½­ËÕ𩾧ÏîÄ¿/Haojing/src/main/java/com/northglass/service/message/MessageProcessor.java
@@ -58,9 +58,44 @@
   private TelecomsDao telecomsDao;
   @Autowired
   private MachineDao machineDao;
   public String generateReturnMessage(String sendMessageHex, Telecoms telecoms) {//1101-1114
   //日志打印
   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);
@@ -79,14 +114,9 @@
            }
         }else if (sendMessageHex.length() == telecom.getFontSize()*4+18) {   
            try {
               SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
               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){
                  System.out.println("软件已过期!");
               if(!verifyTime(telecom)){
                  return "";
               }
               }
               if(!"0001".equals(sendMessageHex.substring(0, 4))){
                  //System.out.println("无效信息");
                  try {
@@ -103,6 +133,7 @@
               telecomsDao.save(telecom);
               String Texts[]=ResultTexts(sendMessageHex);   
               String TextsByte[]=ResultTextsByte(sendMessageHex);//读取内容  ä½ æ ¼å¼
               //拿到此PLC下的所有机器
               List<Machine> Machines=machineDao.FindTelecomsId(telecom.getId());
               for(Machine machine:Machines){
@@ -118,16 +149,17 @@
               }                                 
            } catch (Exception e) {
               // TODO: handle exception
               System.out.println("异常数据!检查!!!"+telecoms.getId());
               printLogs("通讯数据异常,检查!!!"+telecoms.getId()+sendMessageHex);
               //System.out.println("异常数据!检查!!!"+telecoms.getId());
            }         
         }
         return "";
      } catch (Exception e) {
         // TODO: handle exception
         System.out.println("异常!检查网络!"+telecoms.getId());
         return"";
         // TODO: handle exception
         printLogs("检查网络,检查!!!"+telecoms.getId()+sendMessageHex);
         //System.out.println("异常!检查网络!"+telecoms.getId());
         return "";
      }
   }
   public String Shelf(Machine machine,String sendMessageHex){
      try {         
@@ -144,7 +176,7 @@
            List<MachineDispose> machineDisposes=machineDisposeDao.findMachineDisposeMachineType(machine.getTypeId().getId(),Dispose,values);
            if(machineDisposes.size()==1){               
               MachineDispose machineDispose=machineDisposes.get(0);
               if("任务发送".equals(machineDispose.getExeLogic())){
               if("任务发送".equals(machineDispose.getExeLogic())){
                   return ShelfSend(machine);
               }else if("发送清除".equals(machineDispose.getExeLogic())){
                  String date = "0000" + "0000" + "0000" + "0000"+"0000";
@@ -160,7 +192,7 @@
               }
               return "";
            }else if(machineDisposes.size()>=1){
               System.out.println("多逻辑匹配");
               printLogs("多逻辑匹配,检查!!!"+machine.getId()+sendMessageHex);
               return "";
            }            
         }         
@@ -204,48 +236,57 @@
                     outTasksDao.save(OutTask);
                     continue;
                  }               
                  List<LoadRack> LoadRackss= loadRackDao.findLoadRacksTasksRacks(OutTask.getStockName());
                  List<LoadRack> LoadRackss= loadRackDao.findLoadRacksTasksRacks(OutTask.getStockName());//此料架是否已经存在某工位
                  List<LoadRack> loadRacks=loadRackDao.findRackNames(OutTask.getDestination());//目的地线路是否有空闲工位
                  //验证料架是否在库内
                  if(!LoadRackss.isEmpty()){
                     SetInfoContent(OutTask,"此料架不在库内!");
                     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{
                     if("在线库到上片台(补片)".equals(OutTask.getTaskType())){
                        List<LoadRack> loadRacks=loadRackDao.findRackNames(OutTask.getDestination());
                        if(!loadRacks.isEmpty()){
                           LoadRack loadRack=loadRacks.get(0);
                           startnumber = HexUtil.intTo2ByteHex(Integer.valueOf(OutTask.getStockName()));
                           endnumber = HexUtil.intTo2ByteHex(Integer.valueOf(loadRack.getNumber()));
                     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(loadRack.getNumber());
                           OutTask.setRackNumber(End.getNumber());
                           OutTask.setInfoContent("");
                           outTasksDao.save(OutTask);
                           //OutTask.Finsh();
                           //FistoutTasks.setWorkStatus("正在工作");
                           //FistoutTasks.setRackNumber(End.getNumber());
                           //FistoutTasks.setInfoContent("");
                           //outTasksDao.save(OutTask);
                           //outTasksDao.save(FistoutTasks);
                        }else{
                           SetInfoContent(OutTask,"此线路无空工位!");
                        }
                     }else{
                        List<OutTasks> FisrtTasks =outTasksDao.FindNoFinshDestinationAsc(OutTask.getDestination(),"等待开始");
                        for(OutTasks Fist:FisrtTasks){
                           if(Fist.getTaskId().equals(OutTask.getTaskId())){
                              List<LoadRack> loadRacks=loadRackDao.findRackNames(OutTask.getDestination());
                              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,"此线路无空工位!");
                              }
                           }
                           break;
                        }
                        }
                     }
                  }
               }else if("等待退回库区".equals(OutTask.getMachineStatus())){
                  }
                  //正常退库
                  List<LoadRack> loadRacks=loadRackDao.findOutTasksId(OutTask.getId());
                  if(loadRacks.size()==1){
                  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());
@@ -309,8 +350,10 @@
               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);
@@ -340,6 +383,34 @@
            }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("");
@@ -350,20 +421,6 @@
                  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{
                  OutTask.setWorkStatus("");
                  OutTask.setMachineStatus("任务完成");
                  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) {
@@ -439,7 +496,11 @@
            if(!"铁架已到二次接力".equals(loadRack.getOutTasks().getMachineStatus())&&
               !"等待退回库区".equals(loadRack.getOutTasks().getMachineStatus()))
            {   
               if("等待中".equals(loadRack.getMachineLoad().getWorkState())&&
               //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())&&
@@ -472,6 +533,7 @@
                     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()+"]";
@@ -882,7 +944,7 @@
               if("等待补片".equals(loadRack1.getMachineLoad().getWorkState())&&
                  "在线库到上片台(补片)".equals(loadRack1.getOutTasks().getTaskType()))
               {
                  loadRack1.setState("使用中");
                  loadRack1.setState("等待吸片");
                  loadRack1.getOutTasks().setWorkStatus("等待中");
                  loadRack1.getOutTasks().setMachineStatus("铁架已到上片位");
                  loadRack1.getMachineLoad().setWorkState("等待中");
@@ -897,7 +959,7 @@
                  }
                  return machineDispose.getReturnValue();
               }else{
                  loadRack1.setState("使用中");
                  loadRack1.setState("等待吸片");
                  loadRack1.getOutTasks().setWorkStatus("等待中");
                  loadRack1.getOutTasks().setMachineStatus("铁架已到上片位");
                  loadRackDao.save(loadRack1);
@@ -918,11 +980,49 @@
                  loadRack1.getMachineLoad().setWorkState("等待中");
                  loadRackDao.save(loadRack1);
               }*/
               loadRack1.setState("使用中");
               loadRack1.getOutTasks().setWorkStatus("等待中");
               loadRack1.getOutTasks().setMachineStatus("等待退回库区");
               SetInfoContent(loadRack1.getOutTasks(),"");
               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()+"  å·²é€€å›žäºŒæ¬¡æŽ¥åŠ›  ]";