LoggerAspect
package nc.oss.utils; import java.util.Date; import nc.bs.framework.common.InvocationInfoProxy;
import nc.bs.framework.server.ServerConfiguration;
import nc.md.model.MetaDataException;
import nc.md.persist.framework.MDPersistenceService;
import nc.oss.common.OSSConst;
import nc.vo.oss.log.AggLogVO;
import nc.vo.oss.log.LogDetailVO;
import nc.vo.oss.log.LogVO;
import nc.vo.pub.VOStatus;
import nc.vo.pub.lang.UFDateTime; import org.apache.commons.lang.StringUtils; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; /**
* 日志切面类
*
*
*/
public class LoggerAspect { /**
* 记录日志
* @param serviceName 调用服务接口名
* @param msgObj 服务返回日志
*/
public static void saveLogger(String serviceName, JSONObject msgObj) {
if (!StringUtils.isEmpty(serviceName) && msgObj != null) {
AggLogVO aggVO = new AggLogVO();
LogVO logVO = new LogVO();
aggVO.setParentVO(logVO);
UFDateTime creationtime = new UFDateTime(new Date());
JSONObject retMsgContent = msgObj.getJSONObject(OSSConst.RETURN_MSG);
String serverAddr = InvocationInfoProxy.getInstance().getCallServer();
serverAddr = ServerConfiguration.getServerConfiguration().getServerName(); logVO.setPk_service(serviceName);
logVO.setService_name(serviceName);
logVO.setServer_addr(serverAddr); // 服务器地址
logVO.setRun_status(msgObj.getIntValue(OSSConst.STATUS));
logVO.setLog_msg(retMsgContent.getString(OSSConst.MSG_SUMMARY)); // 消息摘要
logVO.setExt_system(msgObj.getString(OSSConst.EXT_SYSTEM)); // 外部系统
logVO.setBill_type(msgObj.getString(OSSConst.BILL_TYPE)); // 单据类型
logVO.setCreationtime(creationtime);
// 构造日志明细VO
aggVO.setChildrenVO(createLogDetails(serviceName, retMsgContent)); try {
logVO.setStatus(VOStatus.NEW);
MDPersistenceService.lookupPersistenceService().saveBill(aggVO);
} catch (MetaDataException e) {
e.printStackTrace();
}
}
} private static LogDetailVO[] createLogDetails(String serviceName, JSONObject msgContent) {
LogDetailVO[] detailVOs = null;
JSONArray msgDetails = msgContent.getJSONArray(OSSConst.MSG_CONTENT);
if (msgDetails != null && msgDetails.size()>0) {
int count = msgDetails.size();
detailVOs = new LogDetailVO[count];
for (int i=0; i<count; i++) {
LogDetailVO detailVO = new LogDetailVO();
JSONObject jsonMsgDetail = msgDetails.getJSONObject(i); detailVO.setPk_business(jsonMsgDetail.getString(OSSConst.BILL_PK)); // 单据PK
detailVO.setPk_business_ext(jsonMsgDetail.getString(OSSConst.SRC_BILL_PK)); // 来源单据PK
detailVO.setPk_service(serviceName);
detailVO.setRun_status(jsonMsgDetail.getIntValue(OSSConst.STATUS));
detailVO.setLog_msg(jsonMsgDetail.getString(OSSConst.MSG_DETAIL_DESC));
detailVO.setCreationtime(new UFDateTime(new Date()));
detailVO.setStatus(VOStatus.NEW);
detailVOs[i] = detailVO;
}
}
return detailVOs;
} }
LoggerAspect的更多相关文章
- 【Java EE 学习 78 上】【数据采集系统第十天】【Service使用Spring缓存模块】
一.需求分析 调查问卷中或许每一个单击动作都会引发大量的数据库访问,特别是在参与调查的过程中,只是单击“上一页”或者“下一页”的按钮就会引发大量的查询,必须对这种问题进行优化才行.使用缓存策略进行查询 ...
- 【Java EE 学习 77 下】【数据采集系统第九天】【使用spring实现答案水平分库】【未解决问题:分库查询问题】
之前说过,如果一个数据库中要存储的数据量整体比较小,但是其中一个表存储的数据比较多,比如日志表,这时候就要考虑分表存储了:但是如果一个数据库整体存储的容量就比较大,该怎么办呢?这时候就需要考虑分库了, ...
- 【Java EE 学习 76 下】【数据采集系统第八天】【通过AOP实现日志管理】【日志管理功能分析和初步实现】
一.日志管理相关分析 1.日志管理是一种典型的系统级别的应用,非常适合使用spring AOP实现. 2.使用日志管理的目的:对系统修改的动作进行记录,比如对权限.角色.用户的写操作.修改操作.删除操 ...
- springMVC之AOP
AOP(Aspect-Oriented Programming,面向切面编程) 切面(Aepect):横切关注点(跨越应用程序多个模块的功能)被模块化的对象: 通知(Advice):切面必须要完成的工 ...
- SSH配置文件和SSM配置文件的写法
一.SSH配置文件的写法(XML版本) <util:properties id="jdbc" location="classpath:db.properties&q ...
- SpringMVC+spring-security+sitemesh+hibernate+freemarker整合-转
http://www.oschina.net/code/snippet_170632_46774 代码分享 当前位置: 代码分享 » Java » Web编程 搜 索 SpringMVC+spr ...
- Spring基础学习(四)—AOP
一.AOP基础 1.基本需求 需求: 日志功能,在程序执行期间记录发生的活动. ArithmeticCalculate.java public interface ArithmeticCal ...
- Spring4 AOP详解
Spring4 AOP详解 第一章Spring 快速入门并没有对Spring4 的 AOP 做太多的描述,是因为AOP切面编程概念不好理解.所以这章主要从三个方面详解AOP:AOP简介(了解),基于注 ...
- Spring学习(1)——快速入门
认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP( ...
随机推荐
- 【Android】完善Android学习(四:API 3.1)
备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...
- [Luogu 1533] 可怜的狗狗
平衡树,我用的SBT. 排一下序尽量减少操作次数. 第K大询问. 以及插入删除. #include <algorithm> #include <cstdio> #include ...
- PowerDesigner16 时序图
时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的.顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序.时序图中包括的建模元素主要有:角色(Actor) ...
- [J]computer network tarjan边双联通分量+树的直径
https://odzkskevi.qnssl.com/b660f16d70db1969261cd8b11235ec99?v=1537580031 [2012-2013 ACM Central Reg ...
- 51nod1667 概率好题
基准时间限制:4 秒 空间限制:131072 KB 分值: 640 甲乙进行比赛. 他们各有k1,k2个集合[Li,Ri] 每次随机从他们拥有的每个集合中都取出一个数 S1=sigma甲取出的数,S ...
- SQLserver 字符串分割函数
CREATE function Get_StrArrayStrOfIndex ( @str varchar(), --要分割的字符串 @split varchar(), --分隔符号 @index i ...
- C# 文件类的操作---删除
//删除文件夹 1这是最简单的方法 DirectoryInfo di = new DirectoryInfo(string Path); di.Delete(true); 注:path是你要删除的非空 ...
- hdu 1556(线段树之扫描线)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 Color the ball Time Limit: 9000/3000 MS (Java/Ot ...
- Bagging和Boosting 概念及区别(转)
Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法.即将弱分类器组装成强分类器的方法. 首先介绍Boot ...
- unbutu下Io language的解释器安装
今晚看Io,然后要安装解释器,然后就记录下来了... 首先去官网下载 http://iolanguage.com 在页面下方的binaries那里找到自己系统对应的版本,我的是x64deb的,本来是下 ...