|
等 级:版主 |
经 验 值:37213 |
魅 力 值:4262 |
龙 币:26203 |
积 分:24877.1 |
注册日期:2005-08-20 |
|
|
|
* 文件名:PublishMessage.java
/**
*
* 制作时间:2007-11-23下午15:13:03
* 文件名:PublishMessage.java
* 制作者:winchizhang
*/
package com.qware.common.message.service.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Hashtable;
import java.util.Vector;
public class PublishMessage {
static String strURL = "http://172.16.2.230:1521";
static String strDriverName = "oracle.jdbc.driver.OracleDriver";
static String strUser = "qware5";
static String strPassword = "qware5";
static Connection conn = null;
// 间隔时间(毫秒):每间隔多少时间,每10分钟检查一次
static long interval = 600000;
// 休眠的时间(毫秒)
static long sleepTime;
// 处理的时间(毫秒)
static long workTime;
// 发送消息类型
static int[] sendFlag = {0,1,2};//0 mail;1 IM;2 SMS
/**
* 功能描述:检查DB,若有需要发送的message,发送。
* @return
* 2007-11-20下午15:13:03
*/
public static void search() {
boolean run = true;
int start_hour = 0;
int start_minute = 0;
int start_second = 0;
int end_hour = 0;
int end_minute = 0;
int end_second = 0;
while (run){
try{
//得到系统当前时间
Calendar startTime = Calendar.getInstance();
startTime.setTime(new Date(System.currentTimeMillis()));
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strStartTime = df.format(startTime.getTime());
//开始时间换算
start_hour = startTime.get(Calendar.HOUR_OF_DAY);
start_minute = startTime.get(Calendar.MINUTE) ;
start_second = startTime.get(Calendar.SECOND) ;
System.out.println("the start time is HH:MM:SS = "+ start_hour + ":" + start_minute + ":" + start_second);
long lngStartTime = (start_hour*3600 + start_minute*60 + start_second)*1000;
//发送messge
sendMessage(strStartTime);
//计算消耗时间
Calendar endTime = Calendar.getInstance();
endTime.setTime(new Date(System.currentTimeMillis()));
//结束时间换算
end_hour = endTime.get(Calendar.HOUR_OF_DAY);
end_minute = endTime.get(Calendar.MINUTE) ;
end_second = endTime.get(Calendar.SECOND) ;
System.out.println("the end time is HH:MM:SS = "+ end_hour + ":" + end_minute + ":" + end_second);
long lngEndTime = (end_hour*3600 + end_minute*60 + end_second)*1000;
workTime = lngEndTime - lngStartTime;
sleepTime = Math.abs(interval - workTime);
System.out.println("sleepTime="+sleepTime);
Thread.sleep(sleepTime);
}catch (Exception e) {
e.printStackTrace();
run = false;
}
}
}//////////////// End of main()
private static void sendMessage(String strStartTime) {
//查询符合发送条件的messge
//SELECT * from TBL_UF_MESSAGE where sendDate <= sysTime and messageStatus='0' or sendDate <= sysTime and sendCount < sendTime
String sqlSelect = "SELECT * from TBL_UF_MESSAGE "
+ "where (createDate <= to_date('" + strStartTime+ "','yyyy-MM-dd HH:mi:ss ') and messageStatus='0' )"
+ "or (createDate <= to_date('" + strStartTime+ "','yyyy-MM-dd HH:mi:ss ') and sendCount < sendTime)";
System.out.println("sqlSelect="+sqlSelect);
Vector vectorResult = getMessage(sqlSelect);
int MessageLen = vectorResult.size();
//~~~~~发送message~~~~~
if (MessageLen > 0) {
String[] messageId = new String[MessageLen];
String[] sendUserId = new String[MessageLen];
String[] receiveUserId = new String[MessageLen];
String[] title = new String[MessageLen];
String[] messageContent = new String[MessageLen];
String[] url = new String[MessageLen];
String[] messageStatus = new String[MessageLen];
String[] createDate = new String[MessageLen];
String[] sendDate = new String[MessageLen];
String[] sendTime = new String[MessageLen];
String[] sendCount = new String[MessageLen];
//对message记录循环
for( int i =0; i < MessageLen; i++){
int sendCountNumber = 0;
messageId[i] = ((Hashtable)(vectorResult.get(i))).get("messageId").toString();
sendUserId[i] = ((Hashtable)(vectorResult.get(i))).get("sendUserId").toString();
receiveUserId[i] = ((Hashtable)(vectorResult.get(i))).get("receiveUserId").toString();
title[i] = ((Hashtable)(vectorResult.get(i))).get("title").toString();
messageContent[i] = ((Hashtable)(vectorResult.get(i))).get("messageContent").toString();
url[i] = ((Hashtable)(vectorResult.get(i))).get("url").toString();
messageStatus[i] = ((Hashtable)(vectorResult.get(i))).get("messageStatus").toString();
createDate[i] = ((Hashtable)(vectorResult.get(i))).get("createDate").toString();
sendDate[i] = ((Hashtable)(vectorResult.get(i))).get("sendDate").toString();
sendTime[i] = ((Hashtable)(vectorResult.get(i))).get("sendTime").toString();
sendCount[i] = ((Hashtable)(vectorResult.get(i))).get("sendCount").toString();
//对发送方式循环
for( int j =0; j < sendFlag.length; j++) {
switch (sendFlag[j]){
case 0:
//sendEmail();
case 1:
//sendImMessage();
case 2:
//sendSMS();
}
}
//一条messsge发送后,更新消息状态
sendCountNumber++;
String sqlUpdate = "Update TBL_UF_MESSAGE set sendDate = 'now', sendCount = " +sendCountNumber+ "Where messageId = '" + messageId[i] + "'";
doUpdate(sqlUpdate);
}
}
}
public static boolean connect() {
try {
Class.forName(strDriverName).newInstance();
conn = DriverManager.getConnection( strURL, strUser, strPassword );
if(conn != null) {
conn.setAutoCommit(false);
return true;
}
}catch(LinkageError e) {
System.out.println("message1:" + e.getMessage());
}catch(ClassNotFoundException e) {
System.out.println("message2:" + e.getMessage());
}catch (Exception e) {
System.out.println("message3:" + e.getMessage());
}
return false;
}
public static void disconnect(){
if (conn != null) {
try{
conn.close();
}catch(SQLException e){}
}
}
public static Vector getMessage(String sqlString){
Vector vector = new Vector();
try{
if(connect()){
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sqlString);
ResultSetMetaData sqlAttr = rs.getMetaData();
while ( rs.next() ){
Hashtable hashTable = new Hashtable();
for ( int i = 1; i <= sqlAttr.getColumnCount(); i ++ ){
String str = rs.getString(i);
hashTable.put( sqlAttr.getColumnName(i), str );
}
vector.add( hashTable );
}
if(rs != null){
rs.close();
}
if(stmt != null){
stmt.close();
}
}
}catch ( Exception e ){
System.out.println(e);
}
if(conn != null){
disconnect();
}
return vector;
}
public static int doUpdate(String sql) {
int returnI = -1;
try {
if(connect()){
Statement stmt = conn.createStatement();
returnI = stmt.executeUpdate(sql);
commit();
stmt.close();
}
} catch (Throwable e) {
System.out.println("PublishMessage.doUpdate() " + e.toString());
rollback(conn);
} finally {
disconnect();
}
return returnI;
}
public static void commit() {
try {
conn.commit();
} catch (Exception e) {
System.out.println("PublishMessage.commit() " + e.toString());
}
}
public static void rollback(Connection con) {
try {
conn.rollback();
} catch (Exception e) {
System.out.println("PublishMessage.rollback() " + e.toString());
}
}
}
|
|
-- 世界上最遥远的距离是冷漠的心
|
|
|