📄 cmppdbaccess.java
字号:
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 + -