package com.northglass.service.message;
|
|
import java.io.BufferedReader;
|
import java.io.IOException;
|
import java.io.InputStreamReader;
|
import java.io.OutputStreamWriter;
|
import java.io.PrintWriter;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.net.URLConnection;
|
import java.net.URLEncoder;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
import com.northglass.entity.LoadRack;
|
import com.northglass.entity.Machine;
|
import com.northglass.entity.Telecoms;
|
import com.northglass.entity.MachineDispose;
|
import com.northglass.entity.OutTasks;
|
import com.northglass.repository.LoadRackDao;
|
import com.northglass.repository.MachineDao;
|
import com.northglass.repository.MachineDisposeDao;
|
import com.northglass.repository.OutTasksDao;
|
import com.northglass.repository.TelecomsDao;
|
import com.northglass.service.device.DeviceService;
|
import com.northglass.util.HexUtil;
|
|
import net.sf.json.JSONObject;
|
|
@Component
|
@Transactional
|
public class MessageProcessor extends AbstractMessageProcessor {
|
// 倒角机
|
private static final Logger LOGGER = LoggerFactory.getLogger(MessageProcessor.class);
|
@Autowired
|
private MachineDisposeDao machineDisposeDao;
|
@Autowired
|
private OutTasksDao outTasksDao;
|
@Autowired
|
private DeviceService deviceService;
|
@Autowired
|
private LoadRackDao loadRackDao;
|
@Autowired
|
private TelecomsDao telecomsDao;
|
@Autowired
|
private MachineDao machineDao;
|
|
//日志打印
|
public void printLogs(String... str) {
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String reuslt="";
|
for(String item:str){
|
reuslt+=" , "+item;
|
}
|
reuslt=df.format(new Date())+": "+reuslt;
|
System.out.println(reuslt);
|
} catch (Exception e) {
|
// TODO: handle exception
|
System.out.println("记录异常"+str);
|
}
|
|
}
|
//时间验证
|
public boolean verifyTime(Telecoms telecoms) {
|
try {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
if(!telecoms.getInterprets().isEmpty()){
|
Date newdate = sdf.parse(telecoms.getInterprets());
|
Date newdate2 = sdf.parse("2021-12-20");
|
Date nowdate = sdf.parse(sdf.format(new Date()));
|
if(newdate.compareTo(nowdate)==-1||nowdate.compareTo(newdate2)==-1){
|
printLogs("软件已过期!");
|
return false;
|
}
|
}
|
} catch (Exception e) {
|
// TODO: handle exception
|
printLogs("verifyTime");
|
return false;
|
}
|
return true;
|
}
|
public String generateReturnMessage(String sendMessageHex, Telecoms telecoms) {//1101-1114
|
//输出交互数据
|
try {
|
//LOGGER.debug(Logs);
|
Telecoms telecom=telecomsDao.findOne(telecoms.getId());
|
if("派尔".equals(telecom.getNumber())){
|
deviceService.TaskChange(telecom);
|
return "";
|
}else if (sendMessageHex.length() == 24) {
|
String string = sendMessageHex.substring(8, 16);
|
if (string.equals("00060110")) {
|
// LOGGER.debug("消息发送成功!");
|
return "";
|
} else {
|
// LOGGER.debug("发送失败!");
|
return "";
|
}
|
}else if (sendMessageHex.length() == telecom.getFontSize()*4+18) {
|
try {
|
if(!verifyTime(telecom)){
|
return "";
|
}
|
if(!"0001".equals(sendMessageHex.substring(0, 4))){
|
//System.out.println("无效信息");
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
deviceService.WriteFile("D:",telecom.getNumber()+"无效信息",df.format(new Date())+"\r内容:"+sendMessageHex,false);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return "";
|
}
|
telecom.setMessage(sendMessageHex);
|
telecom.setModTime(new Date());
|
telecom.setConnState("在线");
|
telecomsDao.save(telecom);
|
String Texts[]=ResultTexts(sendMessageHex);
|
String TextsByte[]=ResultTextsByte(sendMessageHex);//读取内容 位 格式
|
|
//拿到此PLC下的所有机器
|
List<Machine> Machines=machineDao.FindTelecomsId(telecom.getId());
|
for(Machine machine:Machines){
|
if("启用".equals(machine.getFlag())){
|
if("shelf".equals(machine.getTypeId().getTypesName())){
|
return Shelf(machine,sendMessageHex);
|
}else if("load".equals(machine.getTypeId().getTypesName())){
|
return Load(machine,sendMessageHex);
|
}else if("secondrelay".equals(machine.getTypeId().getTypesName())){
|
return SecondRelay(Machines,sendMessageHex);
|
}
|
}
|
}
|
} catch (Exception e) {
|
// TODO: handle exception
|
printLogs("通讯数据异常,检查!!!"+telecoms.getId()+sendMessageHex);
|
//System.out.println("异常数据!检查!!!"+telecoms.getId());
|
}
|
}
|
return "";
|
} catch (Exception e) {
|
// TODO: handle exception
|
printLogs("检查网络,检查!!!"+telecoms.getId()+sendMessageHex);
|
//System.out.println("异常!检查网络!"+telecoms.getId());
|
return "";
|
}
|
}
|
public String Shelf(Machine machine,String sendMessageHex){
|
try {
|
String Texts[]=ResultTexts(sendMessageHex);
|
String Disposes[]=machine.getKeyLog().split("-");
|
for(String Dispose:Disposes){
|
String values="";
|
String Contents[]=Dispose.split(",");//实际位置
|
for(String Content:Contents){
|
values+=Texts[Integer.valueOf(Content)]+",";
|
}
|
values=values.substring(0,values.length()-1);
|
|
List<MachineDispose> machineDisposes=machineDisposeDao.findMachineDisposeMachineType(machine.getTypeId().getId(),Dispose,values);
|
if(machineDisposes.size()==1){
|
MachineDispose machineDispose=machineDisposes.get(0);
|
if("任务发送".equals(machineDispose.getExeLogic())){
|
return ShelfSend(machine);
|
}else if("发送清除".equals(machineDispose.getExeLogic())){
|
String date = "0000" + "0000" + "0000" + "0000"+"0000";
|
return message(date,"000a");
|
}else if("任务完成".equals(machineDispose.getExeLogic())){
|
return ShelfFinsh(machineDispose,machine);
|
}else if("手动完成".equals(machineDispose.getExeLogic())){
|
return ShelfFinsh(machineDispose,machine);
|
}else if("完成失败".equals(machineDispose.getExeLogic())){
|
return ShelfFinsh(machineDispose,machine);
|
}else if("完成清除".equals(machineDispose.getExeLogic())){
|
return message(machineDispose.getReturnValue(),"0014");
|
}
|
return "";
|
}else if(machineDisposes.size()>=1){
|
printLogs("多逻辑匹配,检查!!!"+machine.getId()+sendMessageHex);
|
return "";
|
}
|
}
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return "";
|
}
|
public String ShelfSend(Machine machine){
|
try {
|
Telecoms telecom=telecomsDao.findOne(10L);
|
String s[]=telecom.getInterprets().split(",");
|
List list=new ArrayList<>();
|
for(String item:s){
|
list.add(item);
|
}
|
List<OutTasks> OutTasksTasksing=outTasksDao.FindMachineStatusWorkStatus("等待退回库区","等待开始","正在工作","正常");
|
if(!OutTasksTasksing.isEmpty()){
|
return "";
|
}
|
for(int i=0;i<3;i++){
|
List<OutTasks> OutTasksTasks=new ArrayList<OutTasks>();
|
if(i==0){
|
OutTasksTasks=outTasksDao.FindMachineStatusWorkStatus("等待退回库区","等待中","正常");
|
}else if(i==1){
|
OutTasksTasks=outTasksDao.FindTaskTypeTasking("在线库到上片台(补片)","等待开始","等待中");
|
}else if(i==2){
|
OutTasksTasks=outTasksDao.FindMachineStatusWorkStatus("等待开始","等待中","正常");
|
}else{
|
System.out.println("错误,不存在");
|
return "";
|
}
|
for(OutTasks OutTask:OutTasksTasks){
|
String startnumber="";//起始地址
|
String endnumber=""; //目的地地址
|
if("等待开始".equals(OutTask.getMachineStatus())){
|
if(list.contains(OutTask.getTaskId())){
|
//此任务已撤销
|
OutTask.setMesStatus("派尔确认可退回");
|
OutTask.setMachineStatus("任务完成");
|
outTasksDao.save(OutTask);
|
continue;
|
}
|
List<LoadRack> LoadRackss= loadRackDao.findLoadRacksTasksRacks(OutTask.getStockName());//此料架是否已经存在某工位
|
List<LoadRack> loadRacks=loadRackDao.findRackNames(OutTask.getDestination());//目的地线路是否有空闲工位
|
//验证料架是否在库内
|
if(!LoadRackss.isEmpty()){
|
SetInfoContent(OutTask,"此料架其他工位正在使用!");
|
}else if(!loadRacks.isEmpty()){
|
LoadRack loadRack=loadRacks.get(0);
|
startnumber = HexUtil.intTo2ByteHex(Integer.valueOf(OutTask.getStockName()));
|
endnumber = HexUtil.intTo2ByteHex(Integer.valueOf(loadRack.getNumber()));
|
OutTask.setWorkStatus("正在工作");
|
OutTask.setRackNumber(loadRack.getNumber());
|
OutTask.setInfoContent("");
|
outTasksDao.save(OutTask);
|
}else{
|
SetInfoContent(OutTask,"此线路无空工位!");
|
}
|
}else if("等待退回库区".equals(OutTask.getMachineStatus())){
|
//2024-6-25 添加节点 退库时发现其他线需要则直接转线
|
List<OutTasks> FisrtStockNameTasks =outTasksDao.FindStockName(OutTask.getStockName());//所有未完成但跟此任务相同的架号
|
//退库--》转线
|
if(!FisrtStockNameTasks.isEmpty()&&!OutTask.getDestination().equals(FisrtStockNameTasks.get(0).getDestination())){
|
//有其他线需要此任务
|
OutTasks FistoutTasks=FisrtStockNameTasks.get(0);
|
List<OutTasks> FisrtDestination =outTasksDao.FindDestination(FistoutTasks.getDestination());
|
if(!FisrtDestination.isEmpty()
|
&&FistoutTasks.getTaskIds()==FisrtDestination.get(0).getTaskIds()){
|
//此时可以从 此工位 直接送到另一线路
|
List<LoadRack> loadRackStart=loadRackDao.findOutTasksId(OutTask.getId());//料架当前位置
|
List<LoadRack> loadRackEnd=loadRackDao.findRackNames(FistoutTasks.getDestination());//料架目标位置
|
if(!loadRackStart.isEmpty()&&!loadRackEnd.isEmpty()){
|
LoadRack Start=loadRackStart.get(0);
|
LoadRack End=loadRackEnd.get(0);
|
startnumber = HexUtil.intTo2ByteHex(Integer.valueOf(Start.getNumber()));
|
endnumber = HexUtil.intTo2ByteHex(Integer.valueOf(End.getNumber()));
|
OutTask.setWorkStatus("正在工作");
|
OutTask.setRackNumber(End.getNumber());
|
OutTask.setInfoContent("");
|
//OutTask.Finsh();
|
//FistoutTasks.setWorkStatus("正在工作");
|
//FistoutTasks.setRackNumber(End.getNumber());
|
//FistoutTasks.setInfoContent("");
|
//outTasksDao.save(OutTask);
|
//outTasksDao.save(FistoutTasks);
|
}else{
|
SetInfoContent(OutTask,"此线路无空工位!");
|
}
|
}
|
}
|
//正常退库
|
List<LoadRack> loadRacks=loadRackDao.findOutTasksId(OutTask.getId());
|
if(loadRacks.size()==1&&startnumber==""&&endnumber==""){
|
startnumber = HexUtil.intTo2ByteHex(Integer.valueOf(loadRacks.get(0).getNumber()));
|
endnumber = HexUtil.intTo2ByteHex(Integer.valueOf(OutTask.getStockName()));
|
OutTask.setRackNumber(loadRacks.get(0).getNumber());
|
OutTask.setWorkStatus("正在工作");
|
OutTask.setInfoContent("");
|
outTasksDao.save(OutTask);
|
}else if(loadRacks.size()>1){
|
SetInfoContent(OutTask,"多个料架上绑定此任务!");
|
}else{
|
SetInfoContent(OutTask,"无工位绑定此任务!");
|
}
|
}
|
if (startnumber !=null && endnumber != null&&startnumber !="" && endnumber != "") {
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc仓储写入内容:[ 起始地:"+Integer.valueOf(startnumber,16)+" 目的地:"+Integer.valueOf(endnumber,16)+" ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
String date = "0001" + "0000" + startnumber + endnumber+"0001";
|
return message(date,"000a");
|
}
|
}
|
}
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return "";
|
}
|
public String ShelfFinsh(MachineDispose machineDispose,Machine machine){
|
try {
|
if("禁用".equals(machine.getFlag())){
|
String date=machineDispose.getReturnValue();
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc仓储写入内容:[ 清除任务完成 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(date,"0014");
|
}
|
List<OutTasks> OutTasksTasks=outTasksDao.FindMachineStatusWorkStatus("等待开始","等待退回库区","正在工作","正常");
|
if(OutTasksTasks.size()==1){ //正常
|
OutTasks OutTask=OutTasksTasks.get(0);
|
if("完成失败".equals(machineDispose.getExeLogic())){
|
OutTask.setWorkStatus("等待中");
|
OutTask.setInfoContent("");
|
outTasksDao.save(OutTask);
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc仓储写入内容:[ MES收到仓储完成失败 任务ID: "+OutTask.getTaskId()+",铁架号:"+OutTask.getStockName()+"]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(machineDispose.getReturnValue(),"0014");
|
}
|
if("等待开始".equals(OutTask.getMachineStatus())){
|
//料架目标位置
|
List<LoadRack> loadRacks=loadRackDao.findNumber(OutTask.getRackNumber());
|
if(loadRacks.size()==1){
|
|
String NewMachineStatus=("在线库到离线库".equals(OutTask.getTaskType())||
|
"离线库到在线库".equals(OutTask.getTaskType()))?"铁架已到吊装位":"铁架已到二次接力";
|
LoadRack LoadRack=loadRacks.get(0);
|
LoadRack.setState("使用中");
|
LoadRack.setOutTasks(OutTask);
|
OutTask.setMachineStatus(NewMachineStatus);
|
OutTask.setWorkStatus("等待中");
|
OutTask.setInfoContent("");
|
outTasksDao.save(OutTask);
|
loadRackDao.save(LoadRack);
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc仓储写入内容:[ MES收到仓储完成 任务ID:"+OutTask.getTaskId()+",铁架号:"+OutTask.getStockName()+" 已送至("+OutTask.getDestination()+") 目的地 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(machineDispose.getReturnValue(),"0014");
|
}else if(loadRacks.size()>1){
|
//存在多个重名编号
|
SetInfoContent(OutTask,"此编号存在多工位! "+OutTask.getRackNumber());
|
}else{
|
//此料架上存在任务
|
SetInfoContent(OutTask,"此编号工位上有任务! "+OutTask.getRackNumber());
|
}
|
}else if("等待退回库区".equals(OutTask.getMachineStatus())){
|
List<LoadRack> loadRacks=loadRackDao.findOutTasksId(OutTask.getId());
|
if(loadRacks.size()==1){
|
List<LoadRack> endRacks=loadRackDao.findNumber(OutTask.getRackNumber());
|
if(endRacks.size()==1){//转移任务
|
LoadRack endRack=endRacks.get(0);
|
List<OutTasks> lineTask=outTasksDao.FindDestination(endRack.getRackName());//此线未开始任务
|
if(lineTask.size()>0){
|
|
OutTasks frist=lineTask.get(0);
|
if(frist!=null&&frist.getStockName().equals(OutTask.getStockName())){
|
String NewMachineStatus=("在线库到离线库".equals(frist.getTaskType())||
|
"离线库到在线库".equals(frist.getTaskType()))?"铁架已到吊装位":"铁架已到二次接力";
|
frist.setMachineStatus(NewMachineStatus);
|
frist.setWorkStatus("等待中");
|
frist.setInfoContent("");
|
endRack.setState("使用中");
|
endRack.setOutTasks(frist);
|
outTasksDao.save(frist);
|
loadRackDao.save(endRack);
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="仓储工位-工位:[铁架号:"+OutTask.getStockName()+" 起始地: "+loadRacks.get(0).getNumber()+" 目的地:"+endRack.getNumber()+"]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
}
|
}
|
}
|
LoadRack LoadRack=loadRacks.get(0);
|
LoadRack.ResetLoadRack();
|
OutTask.setWorkStatus("");
|
OutTask.setMachineStatus("任务完成");
|
OutTask.setInfoContent("");
|
outTasksDao.save(OutTask);
|
loadRackDao.save(LoadRack);
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc仓储写入内容:[ MES收到仓储完成 任务ID:"+OutTask.getTaskId()+",铁架号:"+OutTask.getStockName()+" 已退回在线库 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(machineDispose.getReturnValue(),"0014");
|
}
|
}else{
|
SetInfoContent(OutTask,"此任务MES状态错误! 应为以下状态任意一个:1.等待开始 2.等待退回库区");
|
}
|
}else if(OutTasksTasks.size()>1){
|
//多个正在工作的任务 不应该存在的状态
|
}else{
|
//不存在正在工作的任务
|
}
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return "";
|
}
|
|
public String Load(Machine machine,String sendMessageHex){
|
try {
|
String Texts[]=ResultTexts(sendMessageHex);
|
String Disposes[]=machine.getKeyLog().split("-");
|
for(String Dispose:Disposes){//完成 -请求
|
String values="";
|
String Contents[]=Dispose.split(",");//实际位置
|
for(String Content:Contents){
|
values+=Texts[Integer.valueOf(Content)]+",";
|
}
|
values=values.substring(0,values.length()-1);
|
|
List<MachineDispose> machineDisposes=machineDisposeDao.findMachineDisposeMachineType(machine.getTypeId().getId(),Dispose,values);
|
|
if(machineDisposes.size()==1){
|
MachineDispose machineDispose=machineDisposes.get(0);
|
if("任务发送".equals(machineDispose.getExeLogic())){
|
return LoadSend(machine);
|
}else if("发送清除".equals(machineDispose.getExeLogic())){
|
return message(machineDispose.getReturnValue(),"000a");
|
}else if("任务完成".equals(machineDispose.getExeLogic())){
|
return LoadFinsh(machine,machineDispose,1);
|
}else if("任务破损".equals(machineDispose.getExeLogic())){
|
return LoadFinsh(machine,machineDispose,-1);
|
}else if("任务失败".equals(machineDispose.getExeLogic())){
|
return LoadFinsh(machine,machineDispose,0);
|
}else if("完成清除".equals(machineDispose.getExeLogic())){
|
return message("0000","0014");
|
}
|
return "";
|
}else if(machineDisposes.size()>=1){
|
System.out.println("多逻辑匹配");
|
return "";
|
}
|
}
|
} catch (Exception e) {
|
System.out.println("错误");
|
// TODO: handle exception
|
}
|
return "";
|
}
|
public String LoadSend(Machine machine){
|
try { //上片机
|
Telecoms telecom=telecomsDao.findOne(10L);
|
String s[]=telecom.getInterprets().split(",");
|
List list=new ArrayList<>();
|
for(String item:s){
|
list.add(item);
|
}
|
List<LoadRack> TasksLoadRacks=loadRackDao.findLoadMachine(machine.getId());
|
for(LoadRack loadRack:TasksLoadRacks){
|
if(!"铁架已到二次接力".equals(loadRack.getOutTasks().getMachineStatus())&&
|
!"等待退回库区".equals(loadRack.getOutTasks().getMachineStatus()))
|
{
|
//System.out.println(loadRack.getId()+","+loadRack.getOutTasks().getTaskId()+","+loadRack.getMachineLoad().getWorkState()+","+loadRack.getOutTasks().getMesStatus()+","+loadRack.getOutTasks().getMachineStatus()+","+loadRack.getState()+","+loadRack.getFlag());
|
if("等待吸片".equals(loadRack.getState())){
|
loadRack.setState("亮灯");
|
loadRackDao.save(loadRack);
|
}else if("等待中".equals(loadRack.getMachineLoad().getWorkState())&&
|
"派尔确认铁架已到位".equals(loadRack.getOutTasks().getMesStatus())&&
|
"铁架已到上片位".equals(loadRack.getOutTasks().getMachineStatus())&&
|
"使用中".equals(loadRack.getState())&&
|
"启用".equals(loadRack.getFlag()))
|
{
|
final int loadNum1=loadRack.getOutTasks().getPlanLoadNum1();
|
final int loadNum2=loadRack.getOutTasks().getPlanLoadNum2();
|
final int loadNum3=loadRack.getOutTasks().getPlanLoadNum3();
|
final int LoadeNum=loadRack.getOutTasks().getLoadeNum();
|
final int PosunCount=loadRack.getOutTasks().getPosunCount();
|
final int StockNum=loadRack.getOutTasks().getStockNum();
|
final int Sum=loadNum1+loadNum2+loadNum3;
|
if(StockNum>=LoadeNum+PosunCount+1&&Sum>=LoadeNum)
|
{
|
if(list.contains(loadRack.getOutTasks().getTaskId())){
|
//此任务已撤销
|
loadRack.getOutTasks().setMesStatus("上片完成可退回");
|
loadRack.getOutTasks().setMachineStatus("上片完成请求退回");
|
loadRackDao.save(loadRack);
|
return "";
|
}
|
//防错 1.架子玻璃总数量大于 已上数量+破损数量+1; 2.且需要上片数大于已上数量+1
|
machine.setWorkState("正在工作");
|
loadRack.getOutTasks().setInfoContent("");
|
loadRack.getOutTasks().setWorkStatus("正在工作");
|
machineDao.save(machine);
|
loadRackDao.save(loadRack);
|
String bb=HexUtil.intTo2ByteHex(Integer.valueOf(new Double(loadRack.getOutTasks().getBb()).intValue()));
|
String hh=HexUtil.intTo2ByteHex(Integer.valueOf(new Double(loadRack.getOutTasks().getHh()).intValue()));
|
String pgknum=HexUtil.intTo2ByteHex(Sum);
|
String locknum=HexUtil.intTo2ByteHex(StockNum);
|
String date="000100000000"+bb+hh+pgknum+locknum;
|
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ 开始吸片,宽:"+loadRack.getOutTasks().getBb()+" 高:"+loadRack.getOutTasks().getHh()+" 总任务数:"+Sum+" 架上数量:"+StockNum+" 已上数量:"+loadRack.getOutTasks().getLoadeNum()+" 破损数量:"+loadRack.getOutTasks().getPosunCount()+"]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(date,"000a");
|
}else{
|
loadRack.getOutTasks().setInfoContent("数量不够!");
|
loadRackDao.save(loadRack);
|
}
|
}else if("铁架已到上片位".equals(loadRack.getOutTasks().getMachineStatus())){
|
if(!"派尔确认铁架已到位".equals(loadRack.getOutTasks().getMesStatus())){
|
String strss="派尔未确认铁架已到位!";
|
if(!strss.equals(loadRack.getOutTasks().getInfoContent())){
|
loadRack.getOutTasks().setInfoContent(strss);
|
loadRackDao.save(loadRack);
|
}
|
}else if(!"等待中".equals(loadRack.getMachineLoad().getWorkState())){
|
String strss="上片机状态不是等待中!";
|
if(!strss.equals(loadRack.getOutTasks().getInfoContent())){
|
loadRack.getOutTasks().setInfoContent(strss);
|
loadRackDao.save(loadRack);
|
}
|
}else if(!"使用中".equals(loadRack.getState())){
|
String strss="此工位状态不是使用中!";
|
if(!strss.equals(loadRack.getOutTasks().getInfoContent())){
|
loadRack.getOutTasks().setInfoContent(strss);
|
loadRackDao.save(loadRack);
|
}
|
}else if(!"启用".equals(loadRack.getFlag())){
|
String strss="此工位处于禁用状态!";
|
if(!strss.equals(loadRack.getOutTasks().getInfoContent())){
|
loadRack.getOutTasks().setInfoContent(strss);
|
loadRackDao.save(loadRack);
|
}
|
}
|
}
|
break;
|
}
|
}
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return "";
|
}
|
public String LoadFinsh(Machine machine,MachineDispose machineDispose,int flag){
|
try {
|
//此上片机 在上片位的 架子
|
if("禁用".equals(machine.getFlag())){
|
String date=machineDispose.getReturnValue();
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ 清除任务标志 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(date,"0014");
|
}
|
List<LoadRack> TasksLoadRacks=loadRackDao.findLoadMachineTasks(machine.getId());
|
for(LoadRack loadRack:TasksLoadRacks){
|
if("正在工作".equals(loadRack.getOutTasks().getWorkStatus())&&
|
"正在工作".equals(loadRack.getMachineLoad().getWorkState())){
|
//完成数量+1
|
int loadNum1=loadRack.getOutTasks().getPlanLoadNum1();
|
int loadNum2=loadRack.getOutTasks().getPlanLoadNum2();
|
int loadNum3=loadRack.getOutTasks().getPlanLoadNum3();
|
int LoadeNum=loadRack.getOutTasks().getLoadeNum();
|
int PosunCount=loadRack.getOutTasks().getPosunCount();
|
int StockNum=loadRack.getOutTasks().getStockNum();
|
int Sum=loadNum1+loadNum2+loadNum3;
|
int ResultSum=LoadeNum+PosunCount+(flag<0?-flag:flag);//结果
|
if(flag==1){
|
//完成
|
if(ResultSum==StockNum||ResultSum==Sum){//任务完成
|
loadRack.getMachineLoad().setWorkState("暂停");
|
loadRack.getOutTasks().setMachineStatus("上片完成请求退回");
|
loadRack.getOutTasks().setFinshTime(new Date());
|
loadRack.getOutTasks().setLoadeNum(loadRack.getOutTasks().getLoadeNum()+1);
|
loadRack.getOutTasks().setInfoContent("");
|
loadRackDao.save(loadRack);
|
String finshnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getLoadeNum());
|
String posunnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getPosunCount());
|
String date=machineDispose.getReturnValue()+"0000"+finshnum+posunnum;
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ MES收到上片机吸片完成 完工 任务ID: "+loadRack.getOutTasks().getTaskId()+" 铁架号:"+loadRack.getOutTasks().getStockName()+" 已上数量:"+loadRack.getOutTasks().getLoadeNum()+" 破损数量:"+loadRack.getOutTasks().getPosunCount()+" ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(date,"0014");
|
}
|
else if(ResultSum==loadNum1||
|
ResultSum==loadNum1+loadNum2)
|
{ //取间隔条亮灯
|
loadRack.setState("亮灯");
|
loadRack.getMachineLoad().setWorkState("等待中");
|
loadRack.getOutTasks().setLoadeNum(loadRack.getOutTasks().getLoadeNum()+1);
|
loadRackDao.save(loadRack);
|
String finshnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getLoadeNum());
|
String posunnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getPosunCount());
|
String date=machineDispose.getReturnValue()+"0000"+finshnum+posunnum;
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ MES收到上片机吸片完成 任务ID: "+loadRack.getOutTasks().getTaskId()+" 铁架号:"+loadRack.getOutTasks().getStockName()+" 已上数量:"+loadRack.getOutTasks().getLoadeNum()+" 破损数量:"+loadRack.getOutTasks().getPosunCount()+" 此包最后一片请取间隔条 ,暂停吸片 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(date,"0014");
|
}
|
else if((!"超白".equals(loadRack.getOutTasks().getColor())&&!"白玻".equals(loadRack.getOutTasks().getColor()))&&(
|
ResultSum==loadNum1-1||
|
ResultSum==loadNum1+loadNum2-1||
|
ResultSum==Sum-1))
|
{
|
//LOE玻璃最后一片亮灯
|
loadRack.setState("亮灯");
|
loadRack.getMachineLoad().setWorkState("等待中");
|
loadRack.getOutTasks().setLoadeNum(loadRack.getOutTasks().getLoadeNum()+1);
|
loadRackDao.save(loadRack);
|
String finshnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getLoadeNum());
|
String posunnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getPosunCount());
|
String date=machineDispose.getReturnValue()+"0000"+finshnum+posunnum;
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ MES收到上片机吸片完成 任务ID: "+loadRack.getOutTasks().getTaskId()+" 铁架号:"+loadRack.getOutTasks().getStockName()+" 已上数量:"+loadRack.getOutTasks().getLoadeNum()+" 破损数量:"+loadRack.getOutTasks().getPosunCount()+" 此任务为LOW-E玻璃最后一片,暂停吸片 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(date,"0014");
|
}else{
|
loadRack.getMachineLoad().setWorkState("等待中");
|
loadRack.getOutTasks().setLoadeNum(loadRack.getOutTasks().getLoadeNum()+1);
|
loadRackDao.save(loadRack);
|
String finshnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getLoadeNum());
|
String posunnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getPosunCount());
|
String date=machineDispose.getReturnValue()+"0000"+finshnum+posunnum;
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ MES收到上片机吸片完成 任务ID: "+loadRack.getOutTasks().getTaskId()+" 铁架号:"+loadRack.getOutTasks().getStockName()+" 已上数量:"+loadRack.getOutTasks().getLoadeNum()+" 破损数量:"+loadRack.getOutTasks().getPosunCount()+" ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(date,"0014");
|
}
|
}else if(flag==-1){
|
if(ResultSum==StockNum||ResultSum==Sum){//任务完成
|
loadRack.getMachineLoad().setWorkState("暂停");
|
loadRack.getOutTasks().setMachineStatus("上片完成请求退回");
|
loadRack.getOutTasks().setFinshTime(new Date());
|
loadRack.getOutTasks().setPosunCount(loadRack.getOutTasks().getPosunCount()+1);
|
loadRack.getOutTasks().setInfoContent("");
|
loadRackDao.save(loadRack);
|
String finshnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getLoadeNum());
|
String posunnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getPosunCount());
|
String date=machineDispose.getReturnValue()+"0000"+finshnum+posunnum;
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ MES收到上片机吸片破损 完工 任务ID: "+loadRack.getOutTasks().getTaskId()+" 铁架号:"+loadRack.getOutTasks().getStockName()+" 已上数量:"+loadRack.getOutTasks().getLoadeNum()+" 破损数量:"+loadRack.getOutTasks().getPosunCount()+" ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(date,"0014");
|
}else{
|
loadRack.getMachineLoad().setWorkState("等待中");
|
loadRack.getOutTasks().setPosunCount(loadRack.getOutTasks().getPosunCount()+1);
|
loadRack.getOutTasks().setInfoContent("");
|
loadRackDao.save(loadRack);
|
String finshnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getLoadeNum());
|
String posunnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getPosunCount());
|
String date=machineDispose.getReturnValue()+"0000"+finshnum+posunnum;
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ MES收到上片机吸片破损 任务ID: "+loadRack.getOutTasks().getTaskId()+" 铁架号:"+loadRack.getOutTasks().getStockName()+" 已上数量:"+loadRack.getOutTasks().getLoadeNum()+" 破损数量:"+loadRack.getOutTasks().getPosunCount()+" ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(date,"0014");
|
}
|
}else if(flag==0){
|
loadRack.getMachineLoad().setWorkState("等待中");
|
loadRackDao.save(loadRack);
|
String finshnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getLoadeNum());
|
String posunnum=HexUtil.intTo2ByteHex(loadRack.getOutTasks().getPosunCount());
|
String date=machineDispose.getReturnValue()+"0000"+finshnum+posunnum;
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ MES收到上片机吸片失败 任务ID: "+loadRack.getOutTasks().getTaskId()+" 铁架号:"+loadRack.getOutTasks().getStockName()+" 已上数量:"+loadRack.getOutTasks().getLoadeNum()+" 破损数量:"+loadRack.getOutTasks().getPosunCount()+" ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return message(date,"0014");
|
}
|
}
|
break;
|
}
|
} catch (Exception e) {
|
// TODO: handle exception
|
System.out.println("Load Finsh");
|
}
|
return "";
|
}
|
|
public String SecondRelay(List<Machine> machines,String sendMessageHex){
|
try {
|
String Send[]=new String[]{"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000"}; //返回内容 十个字
|
String sendInterl[]={"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"}; //返回内容中的 是否取间隔条
|
String Texts[]=ResultTexts(sendMessageHex);
|
for(int count=0;count<Send.length;count++){
|
Send[count]=Texts[10+count];
|
}
|
String TextsByte[]=ResultTextsByte(sendMessageHex);//读取内容 位 格式
|
for(int count=304;count<=319;count++){
|
sendInterl[count-304]=TextsByte[count];
|
}
|
for(int i=0;i<machines.size();i++){
|
Machine machine=machines.get(i);
|
String Disposes[]=machine.getKeyLog().split("-");
|
int Count=0;
|
for(String Dispose:Disposes){
|
Count++;
|
String values="";
|
String Contents[]=Dispose.split(",");//实际位置
|
for(String Content:Contents){
|
if(Count==1){
|
values+=Texts[Integer.valueOf(Content)]+",";
|
}else{
|
values+=TextsByte[Integer.valueOf(Content)]+",";
|
}
|
}
|
values=values.substring(0,values.length()-1);
|
List<MachineDispose> machineDisposes=machineDisposeDao.findMachineDisposeMachineId(machine.getId(),Dispose,values);
|
//System.out.println(machine.getNumber()+":"+" 位置:"+Dispose+" 值:"+values);
|
if(machineDisposes.size()==1){
|
MachineDispose machineDispose=machineDisposes.get(0);
|
if("任务发送".equals(machineDispose.getExeLogic())){
|
String cont=SecondRelaySend(machine,machineDispose);
|
if(!cont.equals("")){
|
Send[i]= cont;
|
}
|
}else if("任务完成1".equals(machineDispose.getExeLogic())||"任务完成2".equals(machineDispose.getExeLogic())){
|
String cont=SecondRelayFinsh(machine,machineDispose);
|
if(!cont.equals("")){
|
Send[i]= cont;
|
}
|
}else if("亮灯发送1".equals(machineDispose.getExeLogic())||
|
"亮灯发送2".equals(machineDispose.getExeLogic())||
|
"亮灯清除1".equals(machineDispose.getExeLogic())||
|
"亮灯清除2".equals(machineDispose.getExeLogic())){
|
String cont=SecondRelayLamp(machine,machineDispose);
|
int sendlight=Integer.valueOf(Contents[0]);
|
if(!cont.equals("")){
|
sendInterl[sendlight-304]= cont;
|
}else{
|
//System.out.println(machine.getNumber()+"亮灯或灭灯失败");
|
}
|
}
|
}else if(machineDisposes.size()>=1){
|
System.out.println("多逻辑匹配");
|
break;
|
}
|
}
|
if("禁用".equals(machine.getFlag())){
|
Send[i]= "0000";
|
}
|
|
}
|
//System.out.println(sendInterl[15]);
|
//sendInterl[15]="1";
|
Send[9]=HexUtil.intBinaryTo16(ToStr(sendInterl));
|
boolean issend=false;
|
for(int count=0;count<Send.length;count++){
|
if(!Send[count].equals(Texts[10+count])){
|
issend=true;
|
}
|
}
|
if(issend){
|
return message(ToStr(Send),"000a");
|
}
|
} catch (Exception e) {
|
// TODO: handle exception
|
System.out.println("错误");
|
}
|
return "";
|
}
|
public String SecondRelaySend(Machine machine,MachineDispose machineDispose){
|
try {
|
List<LoadRack> LoadRackTasking=loadRackDao.findSecondRelayTasking(machine.getId());
|
if(!LoadRackTasking.isEmpty()){
|
//二次接力移动中
|
}else{
|
List<LoadRack> LoadRacks=loadRackDao.findSecondRelayTasks(machine.getId(),"铁架退回二次接力");
|
if(LoadRacks.isEmpty()){
|
LoadRacks=loadRackDao.findSecondRelayBuTasks(machine.getId(),"铁架已到二次接力");
|
}
|
if(LoadRacks.isEmpty()){
|
LoadRacks=loadRackDao.findSecondRelayTasks(machine.getId(),"铁架已到二次接力");
|
}
|
for(LoadRack loadRack1:LoadRacks){
|
if("铁架已到二次接力".equals(loadRack1.getOutTasks().getMachineStatus())){
|
List<LoadRack> LoadRacksall=loadRackDao.findOnlySecondrelayMachine(machine.getId());
|
if(loadRack1.getId()%2!=0&&
|
!loadRack1.getOutTasks().getTaskType().equals("在线库到上片台(补片)")&&
|
LoadRacksall.get(1).getOutTasks()!=null&&
|
("铁架已到上片位".equals(LoadRacksall.get(1).getOutTasks().getMachineStatus())||
|
"上片完成请求退回".equals(LoadRacksall.get(1).getOutTasks().getMachineStatus())))
|
{
|
if(!"此线二工位任务未完成!".equals(loadRack1.getOutTasks().getInfoContent())){
|
loadRack1.getOutTasks().setInfoContent("此线二工位任务未完成!");
|
loadRackDao.save(loadRack1);
|
}
|
}else{
|
if(loadRack1.getMachineLoad().getWorkState().equals("等待补片")&&
|
"在线库到上片台(补片)".equals(loadRack1.getOutTasks().getTaskType()))
|
{
|
loadRack1.getOutTasks().setWorkStatus("正在工作");
|
loadRack1.getOutTasks().setInfoContent("");
|
loadRackDao.save(loadRack1);
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ 工位:"+loadRack1.getNumber()+" 推进上片位 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return loadRack1.getInText();
|
}else if(loadRack1.getMachineLoad().getWorkState().equals("等待中")){
|
loadRack1.getOutTasks().setWorkStatus("正在工作");
|
loadRack1.getOutTasks().setInfoContent("");
|
loadRackDao.save(loadRack1);
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ 工位:"+loadRack1.getNumber()+" 推进上片位 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return loadRack1.getInText();
|
}
|
}
|
}else if("铁架退回二次接力".equals(loadRack1.getOutTasks().getMachineStatus())){
|
loadRack1.getOutTasks().setWorkStatus("正在工作");
|
SetInfoContent(loadRack1.getOutTasks(),"");
|
loadRackDao.save(loadRack1);
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ 工位:"+loadRack1.getNumber()+" 退回二次接力 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return loadRack1.getOutText();
|
}else{
|
//错误
|
}
|
break;
|
}
|
}
|
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return "";
|
}
|
public String SecondRelayFinsh(Machine machine,MachineDispose machineDispose){
|
try {
|
if("禁用".equals(machine.getFlag())){
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ 清除二次接力任务 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return machineDispose.getReturnValue();
|
}
|
List<LoadRack> LoadRackTasking=loadRackDao.findSecondRelayTasking(machine.getId());
|
if(LoadRackTasking.size()==1){
|
//有正在工作的任务
|
LoadRack loadRack1=LoadRackTasking.get(0);
|
String Str1=loadRack1.getInText()+","+loadRack1.getInText();
|
String Str2=loadRack1.getOutText()+","+loadRack1.getOutText();
|
if(Str1.equals(machineDispose.getFontValue())&&
|
"铁架已到二次接力".equals(loadRack1.getOutTasks().getMachineStatus()))
|
{
|
if("等待补片".equals(loadRack1.getMachineLoad().getWorkState())&&
|
"在线库到上片台(补片)".equals(loadRack1.getOutTasks().getTaskType()))
|
{
|
loadRack1.setState("等待吸片");
|
loadRack1.getOutTasks().setWorkStatus("等待中");
|
loadRack1.getOutTasks().setMachineStatus("铁架已到上片位");
|
loadRack1.getMachineLoad().setWorkState("等待中");
|
loadRackDao.save(loadRack1);
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ 收到 工位:"+loadRack1.getNumber()+" 已到达上片位 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return machineDispose.getReturnValue();
|
}else{
|
loadRack1.setState("等待吸片");
|
loadRack1.getOutTasks().setWorkStatus("等待中");
|
loadRack1.getOutTasks().setMachineStatus("铁架已到上片位");
|
loadRackDao.save(loadRack1);
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ 收到 工位:"+loadRack1.getNumber()+" 已到达上片位 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return machineDispose.getReturnValue();
|
}
|
}else if(Str2.equals(machineDispose.getFontValue())&&
|
"铁架退回二次接力".equals(loadRack1.getOutTasks().getMachineStatus()))
|
{
|
/*if("暂停".equals(loadRack1.getMachineLoad().getWorkState())){
|
loadRack1.getMachineLoad().setWorkState("等待中");
|
loadRackDao.save(loadRack1);
|
}*/
|
//退回验证:如果后续两个任务存在此料架则不退库,如不存在则退库
|
List<OutTasks> OutTasksSameStokess=outTasksDao.FindDestinationNoFinshTaskIdOderbyASC(loadRack1.getOutTasks().getDestination(),loadRack1.getOutTasks().getTaskId(),"任务完成");
|
|
if(OutTasksSameStokess.isEmpty()){
|
loadRack1.setState("使用中");
|
loadRack1.getOutTasks().setWorkStatus("等待中");
|
loadRack1.getOutTasks().setMachineStatus("等待退回库区");
|
SetInfoContent(loadRack1.getOutTasks(),"");
|
loadRackDao.save(loadRack1);
|
}else{
|
boolean tui=false;
|
for(int i=0;i<OutTasksSameStokess.size()&&i<2;i++){
|
OutTasks outTasks=OutTasksSameStokess.get(i);
|
if(outTasks.getStockName().equals(loadRack1.getOutTasks().getStockName())){
|
tui=true;
|
//当前任务后两个任务中存在同料架
|
//当前任务标记完成
|
loadRack1.setState("使用中");
|
loadRack1.getOutTasks().setWorkStatus("");
|
loadRack1.getOutTasks().setMachineStatus("任务完成");
|
loadRack1.getOutTasks().setInfoContent("");
|
loadRackDao.save(loadRack1);
|
|
//下一任务标记到达上片位
|
outTasks.setWorkStatus("等待中");
|
outTasks.setMachineStatus("铁架已到二次接力");
|
outTasks.setInfoContent("");
|
outTasksDao.save(outTasks);
|
loadRack1.setState("使用中");
|
loadRack1.setOutTasks(outTasks);
|
loadRackDao.save(loadRack1);
|
break;
|
}
|
}
|
if(!tui){
|
loadRack1.setState("使用中");
|
loadRack1.getOutTasks().setWorkStatus("等待中");
|
loadRack1.getOutTasks().setMachineStatus("等待退回库区");
|
SetInfoContent(loadRack1.getOutTasks(),"");
|
loadRackDao.save(loadRack1);
|
}
|
}
|
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ 收到 工位:"+loadRack1.getNumber()+" 已退回二次接力 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return machineDispose.getReturnValue();
|
}else{
|
//错误
|
|
}
|
}else if(LoadRackTasking.size()>=1){
|
//正在工作数量超过两个!
|
}else{
|
//不存在正在工作中的任务
|
}
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return "";
|
}
|
public String SecondRelayLamp(Machine machine,MachineDispose machineDispose){
|
try {
|
List<LoadRack> LoadRacks=loadRackDao.findSecondRelays(machine.getId());
|
if(LoadRacks.size()==2){
|
LoadRack LoadRack=null;
|
if("亮灯发送1".equals(machineDispose.getExeLogic())||"亮灯清除1".equals(machineDispose.getExeLogic())){
|
LoadRack=LoadRacks.get(0);
|
}else if("亮灯发送2".equals(machineDispose.getExeLogic())||"亮灯清除2".equals(machineDispose.getExeLogic())){
|
LoadRack=LoadRacks.get(1);
|
}
|
if(LoadRack!=null){
|
if("亮灯".equals(LoadRack.getState())&&
|
("亮灯发送1".equals(machineDispose.getExeLogic())|| "亮灯发送2".equals(machineDispose.getExeLogic())))
|
{
|
LoadRack.setState("已亮灯");
|
loadRackDao.save(LoadRack);
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ "+LoadRack.getNumber()+"工位亮灯 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return "1";
|
}
|
else if("已亮灯".equals(LoadRack.getState())&&
|
("亮灯清除1".equals(machineDispose.getExeLogic())|| "亮灯清除2".equals(machineDispose.getExeLogic())))
|
{
|
LoadRack.setState("使用中");
|
loadRackDao.save(LoadRack);
|
try {
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
|
String content="plc"+machine.getNumber()+"写入内容:[ "+LoadRack.getNumber()+"工位灭灯 ]";
|
deviceService.WriteFile("D:",machine.getNumber()+"记录",df.format(new Date())+"\r"+content,true);
|
System.out.println(content);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return "0";
|
}
|
}
|
}
|
} catch (Exception e) {
|
System.out.println("错误");
|
// TODO: handle exception
|
}
|
return "";
|
}
|
|
//信息提示
|
private void SetInfoContent(OutTasks OutTask,String InfoContent) {
|
if(!InfoContent.equals(OutTask.getInfoContent())){
|
OutTask.setInfoContent(InfoContent);
|
outTasksDao.save(OutTask);
|
}
|
}
|
//用于 清空状态字 传参数count 代表清空字数
|
private String ResultClearStr(int count) {
|
String Str="";
|
for(int i=0;i<count;i++){
|
Str+="0000";
|
}
|
return Str;
|
}
|
//数组转换成字符串
|
private String ToStr(String Str[]) {
|
String str="";
|
for (String string : Str) {
|
str+=string;
|
}
|
return str;
|
}
|
//替换 index 下标字符
|
private String ReplaceFont(String Str,String newstr,int index) {
|
String one=Str.substring(0, index);
|
String three=Str.substring(index+1);
|
Str=one+newstr+three;
|
return Str;
|
}
|
|
//得到所有的45个字
|
private String[] ResultTexts(String Str) {
|
String []InfoTex =new String[45];
|
Str=Str.substring(18);
|
for(int i=0;i<45;i++){
|
InfoTex[i]=Str.substring(0,4);
|
Str=Str.substring(4);
|
}
|
return InfoTex;
|
}
|
//得到720个位
|
public String[] ResultTextsByte(String Str) {
|
String []InfoTex =new String[720];
|
Str=Str.substring(18);
|
for(int i=0;i<90;i++){
|
StringBuffer bytefont=new StringBuffer(HexUtil.int16ToBinaryEight(Str.substring(0,2),8));
|
//bytefont.reverse();
|
for (int j = 0; j < 8; j++) {
|
InfoTex[i*8+j]=bytefont.charAt(j)+"";
|
}
|
Str=Str.substring(2);
|
}
|
return InfoTex;
|
}
|
|
private String message(String senddate, String address) {
|
String Herd = "0110" + address;
|
int length = senddate.length() / 4;
|
String dates = Herd + HexUtil.intTo2ByteHex(length) + HexUtil.intTo1ByteHex(length * 2) + senddate;
|
int lengths = dates.length() / 2;
|
String date = "00000000" + HexUtil.intTo2ByteHex(lengths) + dates;
|
// LOGGER.debug("发送信息内容:" + date);
|
return date;
|
}
|
|
}
|