📄 bosssendsvcimpl.java
字号:
package com.asiainfo.batchsend.sms.boss;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import com.asiainfo.batchsend.CtrCenEntry;
import com.asiainfo.batchsend.model.SmsPush;
import com.asiainfo.databusi.util.CharUtil;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Company: Asiainfo Technologies(China),Inc </p>
* <p>Date: Nov 6, 2007 3:55:51 PM </p>
* <p>Email to: jiangyl@asiainfo.com </p>
* @author jiangyl
* @version 1.0
*/
public class BossSendSvcImpl implements BossSvc {
private static final Logger log = Logger.getLogger(BossSendSvcImpl.class);
private String channelId;
public BossSendSvcImpl(String channelId){
this.channelId = channelId;
}
//判断是否有可发送的任务
String hasLoadData = " select id, camp_id, obj_id, msisdn, send_msg, status, start_date,end_date " +
" from sms_push where status = ? and task_id = ? fetch first 2 rows only ";
public boolean hasLoadData() {
//获得当前执行的任务ID
String taskId = CtrCenEntry.getInstance().getTaskIdByChannel(channelId);
if ( taskId == null )
return false;
Connection conn = null;
boolean flag = false;
try {
conn = DBCon.getShenYunDataSource().getConnection();
PreparedStatement pLoad = conn.prepareStatement(hasLoadData);
pLoad.setInt(1, TODO);
pLoad.setString(2, taskId);
ResultSet rs = pLoad.executeQuery();
while(rs.next()){
flag = true;
break;
}
rs.close();
conn.close();
} catch (SQLException e) {
log.error("深运平台在从sms_push表中检查是否有发送数据时发生严重的错误",e);
} finally {
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
}
}
}
return flag;
}
//这里只根据任务提取数据,主要是因为根据调度任务传进来的taskId已经具备发送的条件
String sql = " select id, camp_id, obj_id, msisdn, send_msg, status, start_date,end_date " +
" from sms_push where status = ? and task_id = ? fetch first 10 rows only ";
String udpate = " update sms_push t set t.status = ? where t.id = ? ";
public List loadData() {
this.threadSleep(Config12350.sendThreadCount);
//获得当前执行的任务ID
String taskId = CtrCenEntry.getInstance().getTaskIdByChannel(channelId);
if ( taskId == null )
return null;
synchronized( channelId ){
Connection conn = null;
List list = new ArrayList();
try {
conn = DBCon.getShenYunDataSource().getConnection();
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement(sql);
PreparedStatement ups = conn.prepareStatement(udpate);
ps.setInt(1, TODO);
ps.setString(2, taskId);
ResultSet rs = ps.executeQuery();
while(rs.next()){
SmsPush sms = new SmsPush();
sms.setId( rs.getLong("id"));
sms.setCampId( rs.getString("camp_id"));
sms.setObjId( rs.getString("obj_id").trim());
sms.setMsisdn( rs.getString("msisdn").trim());
sms.setSendMsg( rs.getString("send_msg").trim());
list.add(sms);
ups.setInt(1, DONE);
ups.setLong(2, sms.getId());
ups.addBatch();
}
ups.executeBatch();
ps.close();
ups.close();
conn.commit();
log.debug("深运平台从sms_push表在装载数据时获取" + list.size() + "条记录,更新" + list.size() +"条记录");
} catch (Exception e) {
try{
conn.rollback();
}catch(Exception ee){
}
log.error("深运平台在装载数据时发生严重的错误",e);
} finally {
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
}
}
}
return list;
}
}
String pSend = " insert into sms_send_10086100(DONE_CODE,BILL_ID,MESSAGE,SEND_DATE,DEAL_DATE,DONE_DATE,PRIORITY_LEVEL,SRC_ADDR,SEQ_NO,FLAG,REQUEST_REPORT)"
+ " values(0,?,?,sysdate,null,sysdate,1,'10086100',0,'0',0)";
public boolean sendData(List list) {
boolean flag = true;
Connection conn = null;
try {
conn = DBCon.getConnection();
PreparedStatement ps = conn.prepareStatement(pSend);
for ( int i = 0; i < list.size(); i++ ){
SmsPush sms = (SmsPush)list.get(i);
ps.setString(1, sms.getMsisdn());
ps.setString(2, CharUtil.convertCharToGBK( sms.getSendMsg()));
ps.addBatch();
}
ps.executeBatch();
conn.commit();
System.out.println("深运平台向BOSS的sms_send_10086100表插入数据,共插入了" + list.size() + "条记录");
} catch (SQLException e) {
try{
conn.rollback();
}catch(SQLException se){
}
flag = false;
log.error("深运平台向BOSS的sms_send_10086100表插入数据时发生严重的错误",e);
} finally {
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
}
}
}
return flag;
}
//发送成功之后如何处理数据
public boolean successDone(List list) {
return true;
}
//发送失败后需要如何处理数据
public void failDone(List list) {
Connection conn = null;
String update = "update sms_push t set t.status = ? where t.id = ? ";
try {
conn = DBCon.getShenYunDataSource().getConnection();
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement(update);
for ( int i = 0; i < list.size(); i++ ){
ps.setInt(1, FAIL );
ps.setLong(2, ( (SmsPush)list.get(i) ).getId() );
ps.addBatch();
}
ps.executeBatch();
conn.commit();
} catch (SQLException e) {
try{
conn.rollback();
}catch(SQLException se){
}
log.error("深运平台在设置sms_push表发送失败状态的时候发生严重的错误",e);
} finally {
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
}
}
}
}
private void threadSleep(long msec) {
try {
Thread.sleep(msec);
} catch (Exception e) {
}
}
public String getChannel() {
return this.channelId;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -