package ng.devices; import java.sql.CallableStatement; import java.sql.Connection; import builder.Manager; import builder.S7control; import builder.HttpApi; import com.alibaba.fastjson.JSONObject; import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType; import ng.db.DBHelper; import ng.db.DBSession; import ng.devices.ModbusService.ModbusDataPackage; public class MysqlService extends ModbusService { //Êý¾Ý¿â DBHelper db; //É豸ID int id; //ʹÓõĴ洢¹ý³ÌÃû,¹Ì¶¨Ãû³Æ String proc="Total_method"; //¼Ç¼ͨѶ´ÎÊý public int ioCount; //×îºóÒ»´Î¶ÁµÄÊý¾Ý public String lastGet; //×îºóÒ»´ÎдµÄÊý¾Ý public String lastSend; //·¢Ëͱê־λ¶¨Î» public int fa_song_Pos=-1; //ÇëÇó±ê־λ¶¨Î» public int qing_qiu_Pos=-1; //״̬±ê־λ¶¨Î» public int zhuang_tai_Pos=-1; //»ã±¨±ê־λ¶¨Î» public int hui_bao_Pos=-1; //È·Èϱê־λ¶¨Î» public int que_ren_Pos=-1; public int zhangtai; //¹¹Ô캯Êý³õʼ»¯ public MysqlService(DBHelper db,int id) { super(); this.db=db; this.id=id; // TODO Auto-generated constructor stub } int readWord(byte[] buff,int offset){ if(offset<0 || offset>=buff.length-1) return 0; int k=buff[offset]; k=(k<<8)+buff[offset+1]; return k; } //ÅжÏÊÇ·ñ±ê־λȫ0 boolean PassInvoke(byte[] buff){ int a=0,b=0,c=0,d=0; a=readWord(buff,fa_song_Pos); b=readWord(buff,qing_qiu_Pos); c=readWord(buff,hui_bao_Pos); d=readWord(buff,que_ren_Pos); this.zhangtai=readWord(buff,this.zhuang_tai_Pos); if(a==0 && b==0 && c==0 && d==0) return true; return false; } //ÕâÊǽ«¶ÁÓ¦´ð°üת»»ÎªMsyqlʶ±ðµÄÐÎʽ£¨Ö»ÄÜת»¯¶ÁÓ¦´ðÊý¾Ý°ü£© String packToString(ModbusDataPackage pack){ String s=HexUtil.intTo2ByteHex(1); s+=HexUtil.intTo2ByteHex(0); s+=HexUtil.intTo2ByteHex((3+pack.ByteSize)); s+="0103"; s+=HexUtil.intTo1ByteHex(pack.ByteSize); s+=HexUtil.byteToHexString(pack.ByteSize,pack.Content); return s; } //ÕâÊǽ«mysql·µ»ØµÄ×Ö·û´®×ª»»ÎªÊý¾Ý°ü£¨Ö»ÄÜת»¯Ð´ÇëÇó°ü£© boolean fillPack(ModbusDataPackage pack,String message){ if(message==null) return false; int a= HexUtil.hexToInt(message.substring(8*2,10*2)); int b= HexUtil.hexToInt(message.substring(10*2,12*2)); String s=message.substring(13*2,message.length()); byte[] bb= HexUtil.stringToInt(s); pack.Address=a*2; pack.ByteSize=b*2; pack.Content=bb; return true; } //·þÎñʵÏÖº¯Êý @Override protected boolean Service(ModbusDataPackage arg0, ModbusDataPackage arg1) { // TODO Auto-generated method stub //¶Á´ÎÊý+1 ioCount++; //ת»¯ÎªmysqlÊäÈë²ÎÊý String s=this.packToString(arg0); //¸üÐÂ×îºóÒ»Ìõ¶Á±¨ÎÄ this.lastGet=s; DBSession sn=null; String result=null; String flag=null; //ÉÏÆ¬ if(id==2){ try{ JSONObject jSONObject=HttpApi.selectLoadRack(); // JSONObject jSONObject=new JSONObject(); // jSONObject.put("thickness", "4"); // jSONObject.put("width", "3660"); // jSONObject.put("height", "2440"); // jSONObject.put("sameCount", "1"); // jSONObject.put("glassType", "string"); if (jSONObject!=null){ //´´½¨Á¬½Ó sn=this.db.createSession(false); Connection con= sn.getConnection(); //µ÷ÓÃÄǸö´æ´¢¹ý³Ì CallableStatement sql=con.prepareCall("{call Total_method_load(?,?,?,?,?,?,?,?)}"); sql.registerOutParameter(7, java.sql.Types.VARCHAR); sql.registerOutParameter(8, java.sql.Types.VARCHAR); sql.setString(1, s); sql.setLong(2, id); sql.setDouble(3, Double.valueOf(jSONObject.get("width").toString()) ); sql.setDouble(4, Double.valueOf(jSONObject.get("height").toString()) ); sql.setDouble(5, Double.valueOf(jSONObject.get("thickness").toString()) ); sql.setLong(6, Integer.valueOf(jSONObject.get("sameCount").toString()) ); sql.execute(); //¶ÁÈ¡·µ»Ø²ÎÊý result= sql.getString(7); flag= sql.getString(8);//1 ±íʾÈÎÎñÍê³ÉÊýÁ¿¼õÒ» if ("1".equals(flag) ){ for (int i=0;i<1;){ JSONObject loadRackReductionJson=HttpApi.loadRackReduction(); if ("true".equals(loadRackReductionJson.get("success").toString())){ //µ÷Óóɹ¦ i++; break; } } } } }catch(Exception e){ e.printStackTrace(); }finally{ sn.close(); } }else{ try{ //´´½¨Á¬½Ó sn=this.db.createSession(false); Connection con= sn.getConnection(); //µ÷ÓÃÄǸö´æ´¢¹ý³Ì CallableStatement sql=con.prepareCall("{call Total_method(?,?,?,?)}"); sql.registerOutParameter(3, java.sql.Types.VARCHAR); sql.registerOutParameter(4, java.sql.Types.VARCHAR); sql.setString(1, s); sql.setLong(2, id); sql.execute(); //¶ÁÈ¡·µ»Ø²ÎÊý result= sql.getString(3); flag= sql.getString(4); }catch(Exception e){ e.printStackTrace(); }finally{ sn.close(); } } if(result!=null){ if(result.length()>0){ char c=result.charAt(0); //# @ ¿ªÍ·´ú±íÌØÊâÏûÏ¢×Ö·û£¬·ñÔò´ú±íͨѶ if(c=='#' || c=='@'){ //µ÷ÓÃÏûÏ¢´¦Àíº¯Êý£¨ÕâÊÇÒ»¸öÍⲿ½Ó¿Ú£© Manager.SendMessage(result); } else{ //¸üÐÂ×îºóÒ»´Î·¢ËÍ this.lastSend=result; //·µ»ØÒª·¢Ë͵ı¨ÎÄ System.out.println(result); return this.fillPack(arg1,result); } } } return false; } }