《天龙苑》显示文章详细内容: [展开] [回复] [网址] [举报] [屏蔽]
winchi
winchi目前处于离线状态
等    级:版主
经 验 值:37213
魅 力 值:4262
龙    币:26203
积    分:24877.1
注册日期:2005-08-20
 
  查看winchi个人资料   给winchi发悄悄话   将winchi加入好友   搜索winchi所有发表过的文章   给winchi发送电子邮件      

* 文件名: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());
}
}
}

--
世界上最遥远的距离是冷漠的心
2007-11-24 00:58:11   此文章已经被查看376次   
 相关文章: [回复]  [顶端] 



  您必须登录论坛才可以发表文章:
 
用户名:   密码:   记住密码:    (忘记密码 注册




版权所有 回龙观社区网 经营许可证编号:京B2-20201639 昌公网安备1101140035号

举报电话:010-86468600-5 举报邮箱: