📄 wappushtranslator.java
字号:
package com.rainbow.mas.plugin.dbplugin.translator;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.rainbow.mas.SessionFactory;
import com.rainbow.mas.plugin.dbplugin.util.SendHeadInfo;
import com.rainbow.mas.plugin.dbplugin.util.SeqNumber;
import com.rainbow.mas.plugin.dbplugin.util.Utility;
import com.rainbow.mas.plugin.dbplugin.util.WPushUtil;
import com.rainbow.mas.web.dto.MmsOutbox;
import com.rainbow.mas.web.dto.MsgRoute;
import com.rainbow.mas.web.dto.SmsDeliver;
import com.rainbow.mas.web.dto.SmsDeliverHistory;
import com.rainbow.mas.web.dto.SmsIdMapping;
import com.rainbow.mas.web.dto.SmsInbox;
import com.rainbow.mas.web.dto.SmsOutbox;
import com.rainbow.mas.web.dto.SmsSent;
import com.rainbow.mas.web.dto.SmsSubmit;
import com.rainbow.mas.web.dto.SmsSubmitHistory;
import com.rainbow.mas.web.dto.WapPushOutbox;
import com.rainbow.mas.web.dto.WapPushSent;
public class WapPushTranslator implements Translator {
static Logger logger = LogManager.getLogger(WapPushTranslator.class);
private static SeqNumber seqNumber = SeqNumber.getInstance();
public void clean(Date cleanTime) {
if (cleanTime == null)
return;
Session s = SessionFactory.currentSession();
Transaction tx = s.beginTransaction();
try {
tx = s.beginTransaction();
int ret = s.createSQLQuery(
"delete from wappush_sent " + "where senttime<'"
+ datefmt.format(cleanTime) + "'").executeUpdate();
logger.info("Clean " + ret + "wappush_sent data item!");
tx.commit();
} catch (Exception e) {
if (tx != null) {
e.printStackTrace();
tx.rollback();
}
} finally {
s.close();
}
}
public void inbound(int max)
{
int mx = max;
if (mx <= 0)
{
mx = 1000;
}
Session s = SessionFactory.currentSession();
Transaction tx = s.beginTransaction();
try
{
tx = s.beginTransaction();
List list = s.createQuery("from WapPushOutbox").setMaxResults(mx)
.list();
for (int i = 0; i < list.size(); i++)
{
WapPushOutbox out = (WapPushOutbox) list.get(i);
// IN 参数
String apID = out.getApplicationid();
String extendCode = out.getExtcode();
// 是否返回状态报告
Integer registeredDelivery = out.getReqdeliveryreport();
//生成PUSH发送内容!!!!!!!!!!!!!!!!!!!!!!!!!!
String BinaryContent = WPushUtil.formatPushMessage(out.getTargeturl(), out.getSubject());
List l = s.createQuery(
"from MsgRoute r " + "where r.applicationId='"
+ out.getApplicationid() + "'").list();
if (l.size() > 1)
{
logger.info("Duplicate activated Message Route!"
+ "(applicationID:" + out.getApplicationid()
+ " extcode:" + out.getExtcode() + ")");
continue;
}
else if (l.size() == 0)
{
logger.info("No suited Message Route!" + "(applicationID:"
+ out.getApplicationid() + " extcode:"
+ out.getExtcode() + ")");
continue;
}
// 从DB中得到BizConfig/////////////////////
// 这二项是由是我自己来的 封闭成一个函数 Utility.getSendHeadInfo();
// IN:ApID,extendCode
// OUT:服务代码,业务代码 ,BizConfig
SendHeadInfo sendHeadInfo = Utility.getSendHeadInfo(apID,
extendCode);
// 输出标号 代表一组消息
String requestIdentifier = seqNumber.genRequestIdentifier();
// ///////////////////////
String destAddr = out.getDestaddr();
if (destAddr == null)
continue;
String[] addrs = destAddr.split(";");
// 最多不超过50给接受者
for (int j = 0; j < addrs.length && j < 50; j++)
{
// /////////new//////////////
SmsSubmit ss = new SmsSubmit();
// 系统保证唯一序号 要填,由IT系统自己定义
ss.setSmsid(Integer.parseInt(out.getSiwappushid()));//*********
ss.setBiz(sendHeadInfo.getBizConfig());
// ///////////
ss.setLoadtime(new Date());
ss.setServicecode(sendHeadInfo.getBuinessCode());
ss.setCaller(sendHeadInfo.getServerCode());
ss.setCalled(addrs[j]);
ss.setCharge(addrs[j]);
ss.setFeevalue(0); // 填0 免费
// *****************
ss.setMsgformat(4);
ss.setMsgcontent(BinaryContent);
// *****************
ss.setSendtime(new Date());
ss.setStatus(0);// 状态 填0
ss.setFailsendtimes(0);// 失败已重发次数 填0
// 一定要设置 此值不能为空
ss.setSentresult(0); // 状态 填0
ss.setServercode(sendHeadInfo.getServerCode()); // 服务代码
s.save(ss);
s.flush();
// /////////////////////////////////////////////
// 查出ID值 添加到 sms_mapping 表
s.refresh(ss);
int smsTaskID = ss.getSmsTaskId();
SmsIdMapping sim = new SmsIdMapping();
sim.setSmsTaskId(smsTaskID);
sim.setSismsid(requestIdentifier); // 一组消息标识
sim.setApplicationid(apID);
sim.setExtcode(extendCode);
sim.setProcessStatus(0);// 状态 没处理
s.save(sim);
s.flush();
// ////////////////
}
s.delete(out);
}
tx.commit();
}
catch (Exception e)
{
if (tx != null)
{
logger.error("Throw Exception!", e);
tx.rollback();
}
}
finally
{
s.close();
}
}
public void outbound(Date checkTime)
{
if (checkTime == null)
return;
Session s = SessionFactory.currentSession();
Transaction tx = s.beginTransaction();
try
{
tx = s.beginTransaction();
// 处理已发送短信
List list = s.createQuery(
"from SmsSubmitHistory where msgformat = 4 and sendtime>'"
+ datefmt.format(checkTime) + "'").list();
for (int i = 0; i < list.size(); i++)
{
SmsSubmitHistory submit = (SmsSubmitHistory) list.get(i);
List l = s.createQuery(
"from SmsIdMapping m where m.smsTaskId="
+ submit.getSmsTaskId()).list();
if (l.size() != 1)
{
logger.info("No matchedMessage Mapping!");
continue;
}
SmsIdMapping mapping = (SmsIdMapping) l.get(0);
if (mapping == null)
{
continue;
}
WapPushSent sent = new WapPushSent();
sent.setApplicationid(mapping.getApplicationid());
sent.setMaswappushid(submit.getSmsTaskId().toString());//****MAS产生的ID
sent.setGwwappushid(submit.getMsgId()); //网关返回的
sent.setSiwappushid(submit.getSmsid().toString()); //******从WAPPUSH_OUTBOX 表带来
sent.setDestaddr(submit.getCalled());
sent.setExtcode(mapping.getExtcode());
sent.setRequesttime(submit.getLoadtime());
sent.setSentresult(submit.getSentresult());
sent.setSenttime(submit.getSendtime());
sent.setWappushstatus(submit.getStatus().toString());
sent.setStatustime(submit.getResultTime());
s.save(sent);
//暂时先删掉吧 是分开测试的!!!!!!!!!!!!!!
s.delete(submit);
}
tx.commit();
}
catch (Exception e)
{
if (tx != null)
{
e.printStackTrace();
tx.rollback();
}
}
finally
{
s.close();
}
}
/**
* 根据 String destAddrr 得到APID
* 查表MsgRoute
*/
private String getApIdByDestAddrr(String destAddr)
{
String ApID = null;
Session session = null;
StringBuffer sbHql = new StringBuffer();
try
{
session = SessionFactory.currentSession();
sbHql.append("from MsgRoute where '");
sbHql.append(destAddr);
sbHql.append("' like concat(newServiceCode,'%') or '");
sbHql.append(destAddr);
sbHql.append("' like concat(oldServiceCode,'%')");
Iterator<MsgRoute> it = session.createQuery(sbHql.toString()).iterate();
if(it.hasNext())
{
ApID = it.next().getApplicationId();
}
}
catch (Exception e)
{
logger.error(e.getMessage(),e);
}
return ApID;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -