wu
2024-12-31 1edefcae08fe7c8df6a177e5dbbc8ab8f8194187
nglib/src/builder/Manager.java
New file
@@ -0,0 +1,226 @@
package builder;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.json.JSONArray;
import ng.db.DBHelper;
import ng.db.DBSession;
import ng.devices.HexUtil;
public class Manager {
   //设备管理器
   static MachineManager mmgr;
   //优化排版管理器
   static PaibanManager panban_mgr;
   //初始化各种模块
    static void init() throws Exception {
       //初始化数据库模块
      DBHelper.InitHelper();
      mmgr = new MachineManager();
      //panban_mgr=new PaibanManager();
      //panban_mgr.initPainbanManager();
   }
    static void init(String[] con) throws Exception {
       //初始化数据库模块
      DBHelper.addHelper("mes",con[0],con[1],con[2]);
      mmgr = new MachineManager();
//      panban_mgr=new PaibanManager();
//      panban_mgr.initPainbanManager(con[0],con[1],con[2]);
   }
    public static boolean isStart(){
       return state;
    }
    //是否已经启动
   static boolean state = false;
   //Manager启动函数
   public static void appStart(String[] ss) {
      if (state == false) {
         try {
            //初始化管理器
            Manager.init(ss);
            //从数据库配置创建设备
            Manager.buildDevice();
            //启动所有设备通讯
            Manager.mmgr.RunAll();
            //启动标志
            state = true;
         } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
   }
   //获取所有设备信息生成JSON数组
   public static JSONArray getDevice(){
      return mmgr.getContext();
   }
   //从数据库创建所有设备
   static void buildDevice(){
      DBSession sn=null;
      try{
         //读取设备列表
         DBHelper db=DBHelper.getDBHelper("mes");
         sn=DBHelper.getDBHelper("mes").createSession(false);
         sn.createSql("select id,machine_name,ip_address,port,flag,read_size,read_offset,function_type,flag from machine");
         ResultSet set= sn.query().getCurrentResult();
         //创建所有设备通讯
         while(set.next()){
            int id=(int)set.getLong(1);
            String name=set.getString(2);
            String ip=set.getString(3);
            int port=set.getInt(4);
            int flag=set.getInt(5);
            int readSize=set.getInt(6);
            int readOffset=set.getInt(7);
            byte functionType=set.getByte(8);
            int flags=set.getInt(9);
            if(flags==1){
               mmgr.createDevice(db,id,name,ip,port,readOffset,readSize,null,functionType);
            }
         }
      }
      catch(Exception e){
      }
      finally{
         if(sn!=null)
            sn.close();
      }
      mmgr.RunAll();
   }
   //异常记录(这里做一次封装是为了可以记录异常,比如记录到日志文件或数据库等)
   public static void catchException(String sender,Exception e){
      e.printStackTrace();
   }
   //允许存储过程向框架发送消息实现Mysql回调机制
   public static void SendMessage(String message){
      try{
            char c=message.charAt(0);
            message=message.substring(1,message.length());
            //#代表一个功能执行   @仅代表一个消息提醒
            if(c=='#'){
            String[] ss=message.split(",");//读取命令参数
            switch(ss[0]){
            //参数名为钢化排版(该函数在新MES方案中取消,或者选择性使用,改用提前排版)
              case "paiban":
                 int line=Integer.parseInt(ss[1]);//线号参数
                 Manager.panban_mgr.Paiban(line);
                 return;
               default:
                  System.out.println("未知命令消息:"+message);
                  return;
            }
            }
            else{
               System.out.println("msg:"+message);
            }
      }
      catch(Exception e){
         catchException("manger.SendFlagMessage",e);
      }
   }
   public static void sendtoPLC(int deviceID, int Address, int count, String buffer, int offset) {
      try {
         System.out.println(buffer);
         byte[] bb= HexUtil.stringToInt(buffer);
         mmgr.innerGetItem(deviceID).serv.SendPLC(Address, count, bb, offset);
         String ss="";
         for (int i = 0; i < bb.length; i++) {
            ss+=ss+bb[i]+",";
         }
         System.out.println(ss);
      }catch (Exception e) {
         // TODO: handle exception
         System.out.println(deviceID+"号机器未连接");
      }
   }
   public static void dayin(int leixing,String peifenhao){
      try {
         Socket sk= new Socket("192.168.20.195",9100);
         try {
            leixing=1;
            String str1="^Kkuandao\n"+peifenhao+"\ngetElectric\n~p1\n";
            String str2="~S,BUFCLR\n";
            String str3="~S,PAUSE\n";
            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
            if(leixing==1){
               bw.write(str1);
               bw.newLine();
               bw.flush();
            }else{
               bw.write(str2);
               bw.newLine();
               bw.flush();
               Thread.sleep(100);
               bw.write(str3);
               bw.newLine();
               bw.flush();
               Thread.sleep(3000);
               bw.write(str2);
               bw.newLine(); //写后换行
               bw.flush(); //表示刷新,也就是立即写给对方
            }
            sk.close();
         } catch (Exception e) {
            // TODO: handle exception
            System.out.println("其他");
         }
      } catch (Exception e) {
         // TODO: handle exception
         System.out.println("错误");
      }
   }
   public static void main(String[] args){
      //Manager.appStart(new String[]{"jdbc:mysql://10.153.19.150/gmms?serverTimezone=GMT%2B8","root","beibo.123/" });
      while(true){
         try {
            Thread.sleep(100);
         } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
   }
}