前几天公司让我开发一个java 消息获取和消息摘要接口,刚看了几天《JAVA核心技术》,感觉各种编程语言真是相通。几天时间我就喜欢上JAVA了,JAVA省去了C++中最让人厌烦的内存处理,实现垃圾回收机制,让程序员可以更安心专注于功能的实现上。而且JAVA结构清晰。至于缺点,我想它的优点也就是缺点,JAVA屏蔽了内存处理,使得用户不方便深入底层探究。
闲话少说,我把这几天的代码都贴出来。
由于消息概要接口和消息内容获取接口的结构基本上都是一样,所以我只贴出了消息概要接口的内容。我只对其中一些关键代码做一些解释!
1、对于String applist参数的说明:
String applist是一个比较复杂的结构,{"AppListRecord":[{"APPID":"8"},{"APPID":"9"}]},其中appid的个数不定,要求从这个字符串中找出所有的appid号:
方式:
组json包,在json包中提取jsonarray对象,然后从jsonarray对象中提取所有的appid,最后将appid存入list中。
ps:不知道有没有更好的方法,但是我暂时只能想到这个办法了。
List<String> appidList = new ArrayList<String>();
appidList.clear(); //
JSONObject appJson = new JSONObject();
appJson = JSONObject.fromObject(applist);
String installedAppString = appJson.getString("AppListRecord");
// 将参数转换成json对象
JSONArray paramsString = JSONArray.fromObject(installedAppString);
//提取appid并将appid存入list中。
for (int i = 0; i < paramsString.size(); i++) {
appJson = (JSONObject) paramsString.get(i);
// APPID 支付应用标识
appId = (String) appJson.get("APPID");
// 检测支付应用标识appId为非空
ParamChecker.checkString(appId, "appId");
ParamChecker.checkNumeric(appId, "appId");// 非数字检测
appidList.add(appId);
}
//从list中读取出appid值。
for(int i=0; i<appidList.size(); i++){
appId = appidList.get(i);
消息概要接口:
声明:
/**
* 消息概要获取接口
* @param productNo 用户电信产品号
* @param location 归属地信息
* @param maxrecord 最大返回记录数
* @param msgtype 消息类型
* @param startrecode 前面跳过的记录数
* @param applist 已安装支付应用列表
* @return
*/
public String querymsgOutline(String productNo,String location,String maxrecord,
String msgtype,String startrecode,String applist);
接口实现:
/**
* 消息概要获取接口实现
* @param productNo 用户电信产品号
* @param location 归属地信息
* @param maxrecord 最大返回记录数
* @param msgtype 消息类型
* @param startrecode 前面跳过的记录数
* @param applist 已安装支付应用列表
* @param appid 支付应用标识
* @return
*/
@SuppressWarnings("unchecked")
public String querymsgOutline(String productNo,String location,String maxrecord,
String msgtype,String startrecode,String applist)
{
String[] jsonNames = { "RECORDAMOUNT", "MSGLIST" };
String responseCode = "000000";
String responseContent = "成功";
String hot = null;
Long pk = null;
String appId = "";
List<String> appidList = new ArrayList<String>(); //有问题吗??
appidList.clear(); //
JSONObject appJson = new JSONObject();
appJson = JSONObject.fromObject(applist);
String installedAppString = appJson.getString("AppListRecord");
// 将参数转换成json对象
JSONArray paramsString = JSONArray.fromObject(installedAppString);
try {
ParamChecker.checkString(productNo, "productNo");
ParamChecker.checkNumeric(productNo, "productNo");
ParamChecker.checkString(msgtype, "msgtype");
ParamChecker.checkString(location, "location");
ParamChecker.checkString(applist, "applist");
for (int i = 0; i < paramsString.size(); i++) {
appJson = (JSONObject) paramsString.get(i);
// APPID 支付应用标识
appId = (String) appJson.get("APPID");
// 检测支付应用标识appId为非空
ParamChecker.checkString(appId, "appId");
ParamChecker.checkNumeric(appId, "appId");// 非数字检测
appidList.add(appId);
}
pk = TInfDcoperlogDao.insert(TInfDcoperlogDao.PARTY_GROUP_PO,
"querymsg", "DB", "", "PRODUCTNO", productNo);
JSONArray jsonArray655 = new JSONArray();
List<MmOMsg> records = TMmMsgDao.queryOutlineMsg(productNo,location, msgtype,
maxrecord, startrecode, appidList);
int recordAmount = records.size();
for (int i = 0; i < recordAmount; i++) {
MmOMsg record = records.get(i);
String title = record.getMsgTitle();
String msg_id = record.getMsgId();
String time = record.getTime();
String isScroll = record.getIsScroll();
if(isScroll.equals("Y"))
hot = "1";
else if(isScroll.equals("N"))
hot = "0";
JSONObject jsonObject = new JSONObject();
jsonObject.put("MSGTITLE", title);
jsonObject.put("MSG_ID", msg_id);
jsonObject.put("TIME", time);
jsonArray655.add(jsonObject);
}
// 更新日志表
TInfDcoperlogDao.update(pk, responseCode, responseContent);
return JSONTool.createJson(jsonNames, new Object[] { recordAmount,
jsonArray655 });
} catch (Exception e) {
return ExceptionHandler.toJson(e, pk, GlobalConstants.MODULE_CODE_MEPF);
}
}
在实现接口时,由于需要对数据库T_MM_MSG表进行查询,用queryOutlineMsg实现了数据库的查询
/*
* 概要消息获取
*/
@SuppressWarnings("unchecked")
public static List<MmOMsg> queryOutlineMsg(String productNo, String location, String msgtype,
String maxrecord, String startrecode, List<String> appidList) throws Exception{
// List<String> areaCodeList = TSymAreaDao.getAreaCodeConnBy(productNo);
//DictTranslationUtils dictString = new DictTranslationUtils();
String dictname = DictTranslationUtils.dictTranslation(location, "INF_PROVINCENOCONV");
String appId = "";
StringBuffer sql = new StringBuffer();
if(StringUtils.isEmpty(startrecode)){
startrecode = "0";
}
if ("00".equals(msgtype) || "0".equals(msgtype)) {
//sql.append("select msg.title, msg.msg_id,to_char(msg.create_date,'yyyyMMddhh24miss') as create_date,msg.isscroll from t_mm_msg msg ");
sql.append(" select * from (select rownum num,msg.title,msg.msg_id,to_char(msg.create_date,'yyyyMMddhh24miss') as create_date,msg.isscroll from t_mm_msg msg ")
.append(" where 1 = 1 ");
sql.append(" and (';'||AREACODE_LIST||';' like ").append(" '%;'||'" + dictname + "'||';%' )");
sql.append(" or( ';'||AREACODE_LIST||';' like '%;'||'" + "000000" + "'||';%' )");
sql.append(" and msg.stat = 'S0P' ");
sql.append("and (msg.isappall = 'Y'");
/*if (!StringUtils.isEmpty(maxrecord)) {
sql.append(" and rownum < (to_number('").append(maxrecord).append("') + to_number('")
.append(startrecode)
.append("') + 1)");
}*/
for(int i=0; i<appidList.size(); i++){
appId = appidList.get(i);
sql.append(" or ( ';'|| APPID_LIST ||';' like").append(" (select '%;'||app_id||';%' from t_vm_appadpt where appadpt_id = " + appId + "))");
}
sql.append(")) t").append(" where t.num > to_number('").append(startrecode).append("')");
}else {
sql.append(" select * from (select rownum num,msg.title,msg.msg_id,to_char(msg.create_date,'yyyyMMddhh24miss') as create_date,msg.isscroll from t_mm_msg msg ")
.append(" where 1 = 1 ");
sql.append(" and (';'||AREACODE_LIST||';' like ").append(" '%;'||'" + dictname + "'||';%' )");
sql.append(" or( ';'||AREACODE_LIST||';' like '%;'||'" + "000000" + "'||';%' )");
sql.append(" and msg.msg_type='" + msgtype + "' and msg.stat = 'S0P' ");
sql.append("and (msg.isappall = 'Y'");
/* if (!StringUtils.isEmpty(maxrecord)) {
sql.append(" and rownum < (to_number('").append(maxrecord).append("') + to_number('")
.append(startrecode)
.append("') + 1)");
}*/
for(int i=0; i<appidList.size(); i++){
appId = appidList.get(i);
sql.append(" or ( ';'|| APPID_LIST ||';' like").append(" (select '%;'||app_id||';%' from t_vm_appadpt where appadpt_id = " + appId + "))");
}
sql.append(")) t").append(" where t.num > to_number('").append(startrecode).append("')");
}
return DAO.query(sql.toString(), new MmMsgRowOutLineMap());
}
调用消息的接口:
/**
* 消息概要获取接口
* @param request
* @return
* @throws ServiceInvokeException
* @throws JSONException
*/
public String querymsgOutline(HttpServletRequest request)
throws ServiceInvokeException, JSONException {
String productNo = getRequestParam(request,"PRODUCTNO");
String location = getRequestParam(request,"LOCATION");
String maxrecord = getRequestParam(request,"MAXRECORD");
String msgtype = getRequestParam(request,"MSGTYPE");
String startrecode = getRequestParam(request,"STARTRECODE");
String applist = getRequestParam(request,"APPLIST");
MTPaymentService mtp = SpringContextHelper.getMTPaymentServiceBean();
return mtp.querymsgOutline(productNo, location, maxrecord, msgtype, startrecode, applist);
}