⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmppdbaccess.java

📁 cmpp的开发的短信端口实例
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            if(num++ > 1000) break;  //每次最多取出1000条记录

            String msgcontent      = rs.getString ("MSG_CONTENT")==null?"":rs.getString ("MSG_CONTENT").trim();

            //如果发送字符长,则截成多段
            int length     = 70;  //标准为70个字符
            int iMsgLenth = msgcontent.length();

//            int iLength = (0 + length > iMsgLenth) ? iMsgLenth - 0 : length;
//            int iBeginIndex = 0;
//            int iEndIndex   = iEndIndex   =
//                (iBeginIndex + iLength > iMsgLenth) ? (iMsgLenth) : (iBeginIndex + iLength);
//
//            for (;iBeginIndex  < iEndIndex;
//                 iBeginIndex = iEndIndex,
//                 iEndIndex   = (iBeginIndex + iLength > iMsgLenth) ?
//                 (iMsgLenth) : (iBeginIndex + iLength)
//                )
//            {
             CMPP mtMsg   = new CMPP(CMPP.CMPP_SUBMIT);
             mtMsg.Msg_Id = rs.getLong("msg_id");
             mtMsg.Service_Id = rs.getString("service_code");
             mtMsg.Pk_total   = (byte)rs.getInt("pk_total");
             mtMsg.Pk_number  = (byte)rs.getInt("pk_number");
             mtMsg.Msg_Fmt    = (byte)rs.getInt("msg_fmt");
             mtMsg.Registered_Delivery = (byte)rs.getInt("registered_delivery");
             mtMsg.TP_pid     = 0;
             mtMsg.TP_udhi    = 0;
             mtMsg.Msg_src    = CMPParameter.SP_Id;
             mtMsg.FeeType    = rs.getString("fee_type");
             mtMsg.FeeCode    = rs.getString("fee_code");
             mtMsg.Fee_terminal_Id  = rs.getString("fee_number");
             mtMsg.Src_terminal_type = (byte)rs.getInt("fee_number_type");
             mtMsg.Src_terminal_Id  = rs.getString("src_number");
             mtMsg.Dest_terminal_Id = rs.getString("dest_number");
             mtMsg.Dest_terminal_type = (byte)rs.getInt("dest_number_type");
             mtMsg.Msg_Content = msgcontent;
             mtMsg.Msg_Length  = (byte)mtMsg.Msg_Content.getBytes().length;
             mtMsg.LinkID = rs.getString("LINK_ID");

             //当目标号码与计费号码不同时,更改计费用户类型字段
             if(!mtMsg.Fee_terminal_Id.equals(mtMsg.Dest_terminal_Id))
               mtMsg.Fee_UserType = 3;

             Debug.outInfo("\n[CMPPMaster]"+PublicFunction.getFormatTime()+
                           " <MT>DestNumber:" +mtMsg.Dest_terminal_Id + " ServiceID: "+ mtMsg.Service_Id +
                           " FeeType:"+mtMsg.FeeType +" FeeCode:"+mtMsg.FeeCode + " FeeUserType:"+mtMsg.Fee_UserType +
                           " FeeUserNumber:"+mtMsg.Fee_terminal_Id +" DestUserType:"+mtMsg.Dest_terminal_type +
                           " MsgContent:"+ mtMsg.Msg_Content +"  LinkId:"+mtMsg.LinkID+"  SrcNumber:"+mtMsg.Src_terminal_Id);

             synchronized(vctMTData){
               vctMTData.addElement(mtMsg);
             }

//           } // end for (;iBeginIndex  < iEndIndex;.....
        }
    }
    catch(Exception e){
       e.printStackTrace();
       return false;
    }

    //关闭连接
    try{
        rs.close() ;
        stmt.close() ;
    }
    catch(SQLException e){
      e.printStackTrace();
      this.isAvail = false;
      return false;
    }

    //System.out.println("开始只标志为");

    //置发送标记SEND_STATUS为-2
    CMPP mtMsg;
    int sndSize    = vctMTData.size() ;

    for(int i = 0; i < sndSize; i++){
        mtMsg = (CMPP)vctMTData.elementAt (i);
        strSql = "update cmpp_mt_hn set status = -2 where msg_id =  " + mtMsg.Msg_Id ;
        try {
            stmt = conn.createStatement();
            stmt.execute(strSql);
            stmt.close() ;
        }
        catch (SQLException ex) {
            System.out.println("[CMPPMaster]DBAccess.Set Send_Status error :" +ex.toString());
            vctMTData.removeElementAt (i);
            i--;
            sndSize--;
            this.isAvail = false;
            return false;
        }
    }

    discloseconn(conn,stmt,null);  //关闭connection(放回连接池)
    return true;
  }




  /**释放连接池的连接closeconn();  //关闭connection(放回连接池)**/
  private void discloseconn(Connection conn,Statement stmt,ResultSet rst){
    try{
      if(rst != null){
        rst.close();
      }
       if(conn != null){
        conn.close();
      }
      if(stmt != null){
        stmt.close();
      }
   }
    catch (Exception sqle){
      System.out.println("Database disconnecting failed"+sqle);
    }
  }



  /**
   * <p>Title: CMPPMODataSaveThread保存上行数据的线程</p>
   * <p>Description: 湖南移动短信网关通讯程序</p>
   * <p>Copyright: Copyright (c) 2004</p>
   * <p>Company: sunun tech ltd.</p>
   * @author zhanghao
   * @version 1.0
   */
  public class CMPPMODataSaveThread extends Thread{

    public boolean isAvail = false;

    public CMPPMODataSaveThread(){
      isAvail = true;
    }

    public void run(){
      //转储缓冲中的MO数据
      Vector vctWillSaveMO = new Vector(1,1);
      Vector vctMTRespMsg  = new Vector(1,1);
      while (true) {
        try {
          if (vctMOData.size() > 0) {

            synchronized (vctMOData) {
              while (vctMOData.size() > 0) {
                vctWillSaveMO.addElement(vctMOData.elementAt(0));
                vctMOData.removeElementAt(0);
              }
            }

            //调用CMPPDBAccess的存储方法存储上行数据
            int iSize = vctWillSaveMO.size();
            CMPPDBAccess.getInstance().saveMOData(vctWillSaveMO);
            iSize = iSize - vctWillSaveMO.size();
            if (iSize > 0) {
              Debug.outInfo("[CMPPMaster]" + PublicFunction.getFormatTime() +
                            " 本次保存数据:" + iSize);
            }

          }

          if (vctRespMsg.size() > 0) {
            synchronized (vctRespMsg) {

              while (vctRespMsg.size() > 0) {
                vctMTRespMsg.addElement(vctRespMsg.elementAt(0));
                vctRespMsg.removeElementAt(0);
              }
            }

            //调用CMPPDBAccess的dealProccessMsg处理响应信息
            int iSize = vctMTRespMsg.size();
            CMPPDBAccess.getInstance().dealProccessMsg(vctMTRespMsg);
            Debug.outInfo("[CMPPMaster]"+PublicFunction.getFormatTime()+" 本次保存数据:"+(iSize-vctMTRespMsg.size()));
          }
          PublicFunction.sleep(20);
        }
        catch (Exception ex) {
          //打印异常,并关闭连接
          Debug.outInfo("[CMPPMaster]保存MO数据失败:" + ex.toString());
          //将未写入数据库的MO数据放回原MO缓冲
          if (vctWillSaveMO.size() > 0) {
            while(vctWillSaveMO.size()>0) {
              vctMOData.addElement(vctWillSaveMO.elementAt(0));
              vctWillSaveMO.removeElementAt(0);
            }
          }
          if (vctMTRespMsg.size() > 0) {
            while(vctMTRespMsg.size()>0) {
              vctRespMsg.addElement(vctMTRespMsg.elementAt(0));
              vctMTRespMsg.removeElementAt(0);
            }
          }
        }  // end try-catch
      }  // end - while
    }
  }



  /**
   * 发送成功后,删除待发送表中的数据
   * @param mtData
   * @return
   */
  public void dealProccessMsg(CMPP cmppMsg){
    Statement stmt = null;
    PreparedStatement pstmt = null;
    String sqlStatement =null;
    Connection conn     = null;

    try {

      if(cmppMsg.Result ==0){
        String strSql ="delete from cmpp_mt_hn where msg_id = "+cmppMsg.Sequence_Id;
        //System.out.println("Resp "+ cmppMsg.Msg_Id);
        //Debug.outDebug(strSql);
        conn = ConnectionPool.getConnection();
        stmt = conn.createStatement();
        stmt.execute(strSql);
        stmt.close();
      }
      else{
        System.out.println("[CMPPMaster]发送短信失败,错误状态码:" +cmppMsg.Result+"") ;
        if(cmppMsg.Result==8) //如果是流量控制错,则将错误状态位置为1,使系统对其重发
            cmppMsg.Result =1;

        String strSql ="update cmpp_mt_hn set status = "+cmppMsg.Result+" where msg_id = "+cmppMsg.Sequence_Id;
        conn = ConnectionPool.getConnection();
        stmt = conn.createStatement();
        stmt.execute(strSql);
        stmt.close();
      }

    }
    catch(Exception e){
      System.out.println("[CMPPMaster]delete table cmpp_mt_hn has error:msgid=" + cmppMsg.Result +","+e) ;
      disclose(conn);
    }
    finally{
      discloseconn(conn,null,null);  //关闭connection(放回连接池)
    }
  }


  /**
   * 将vctRespData中的SubmitResp数据保存到数据库中
   * @param vctRespData
   * @throws java.lang.Exception
   */

  public void dealProccessMsg(Vector vctData) throws Exception{

    Connection conn = null;
    Statement  stmt = null;

    try{

      conn = ConnectionPool.getConnection();
      stmt = conn.createStatement();
      conn.setAutoCommit(false);

      //将状态报告,Deliver消息插入到数据库得SQL语句
      for(int i=0;i<vctData.size();i++){

        CMPP cmppMsg = (CMPP)vctData.elementAt(i);
        if(cmppMsg.Result ==0){
          String strSql ="delete from cmpp_mt_hn where msg_id = "+cmppMsg.Sequence_Id;
          //System.out.println("Resp "+ cmppMsg.Msg_Id);
          //Debug.outDebug(strSql);
          stmt.addBatch(strSql);
        }
        else{
          System.out.println("[CMPPMaster]发送短信失败,错误状态码:" +cmppMsg.Result+"") ;
          if(cmppMsg.Result==8) //如果是流量控制错,则将错误状态位置为1,使系统对其重发
              cmppMsg.Result =1;

          String strSql ="update cmpp_mt_hn set status = "+cmppMsg.Result+" where msg_id = "+cmppMsg.Sequence_Id;
          stmt.addBatch(strSql);
        }
      }

      stmt.executeBatch();
      conn.commit();
      conn.setAutoCommit(true);
      vctData.removeAllElements();
    }
    catch(Exception ex){
      throw ex;
    }
    finally{
      discloseconn(conn,stmt,null);
    }

  }


  /**
   * 断开数据库连接
   */
  private void disclose(Connection conn) {
    try {
      if(this.isAvail){
        if(conn != null){
          conn.close();
        }
        this.isAvail = false;
        Debug.outInfo("通讯程序关闭数据库连接");
      }
    }
    catch (Exception sqle){
      System.out.println("Database disconnecting failed");
    }
  }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -