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的更多相关文章

  1. 【Java EE 学习 78 上】【数据采集系统第十天】【Service使用Spring缓存模块】

    一.需求分析 调查问卷中或许每一个单击动作都会引发大量的数据库访问,特别是在参与调查的过程中,只是单击“上一页”或者“下一页”的按钮就会引发大量的查询,必须对这种问题进行优化才行.使用缓存策略进行查询 ...

  2. 【Java EE 学习 77 下】【数据采集系统第九天】【使用spring实现答案水平分库】【未解决问题:分库查询问题】

    之前说过,如果一个数据库中要存储的数据量整体比较小,但是其中一个表存储的数据比较多,比如日志表,这时候就要考虑分表存储了:但是如果一个数据库整体存储的容量就比较大,该怎么办呢?这时候就需要考虑分库了, ...

  3. 【Java EE 学习 76 下】【数据采集系统第八天】【通过AOP实现日志管理】【日志管理功能分析和初步实现】

    一.日志管理相关分析 1.日志管理是一种典型的系统级别的应用,非常适合使用spring AOP实现. 2.使用日志管理的目的:对系统修改的动作进行记录,比如对权限.角色.用户的写操作.修改操作.删除操 ...

  4. springMVC之AOP

    AOP(Aspect-Oriented Programming,面向切面编程) 切面(Aepect):横切关注点(跨越应用程序多个模块的功能)被模块化的对象: 通知(Advice):切面必须要完成的工 ...

  5. SSH配置文件和SSM配置文件的写法

    一.SSH配置文件的写法(XML版本) <util:properties id="jdbc" location="classpath:db.properties&q ...

  6. SpringMVC+spring-security+sitemesh+hibernate+freemarker整合-转

    http://www.oschina.net/code/snippet_170632_46774 代码分享 当前位置: 代码分享 » Java  » Web编程 搜 索   SpringMVC+spr ...

  7. Spring基础学习(四)—AOP

    一.AOP基础 1.基本需求      需求: 日志功能,在程序执行期间记录发生的活动. ArithmeticCalculate.java public interface ArithmeticCal ...

  8. Spring4 AOP详解

    Spring4 AOP详解 第一章Spring 快速入门并没有对Spring4 的 AOP 做太多的描述,是因为AOP切面编程概念不好理解.所以这章主要从三个方面详解AOP:AOP简介(了解),基于注 ...

  9. Spring学习(1)——快速入门

    认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP( ...

随机推荐

  1. Codeforces Round #380 (Div. 2)/729B Spotlights 水题

    Theater stage is a rectangular field of size n × m. The director gave you the stage's plan which act ...

  2. 命令行访问远程mysql数据库

    命令: mysql -u用户名 -p密码 -h远程数据库IP地址 -P端口 -D数据库名 例子: 使用用root帐号,密码为123456,登录ip地址为192.168.1.110,端口为3306,名称 ...

  3. asp.net 文件上传,大文件上传。

    新建一个asp.net页面,在工具栏里拖入 FileUpload 上传控件.一个按钮 Button  !    !     ! 进入Button事件 //----------------------- ...

  4. 【BZOJ4104】解密运算 [暴力]

    解密运算 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 对于一个长度为N的字符串,我们在字 ...

  5. 【BZOJ4821】【SDOI2017】相关分析 [线段树]

    相关分析 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Frank对天文学非常感兴趣,他经 ...

  6. js中三种定义变量 const, var, let 的区别

    js中三种定义变量的方式const, var, let的区别 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 ...

  7. hdu 2545 树上战争(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2545 树上战争 Time Limit: 10000/4000 MS (Java/Others)     ...

  8. 用python玩微信(聊天机器人,好友信息统计)

    1.用 Python 实现微信好友性别及位置信息统计 这里使用的python3+wxpy库+Anaconda(Spyder)开发.如果你想对wxpy有更深的了解请查看:wxpy: 用 Python 玩 ...

  9. CSS原生布局方式

    前言 网页原生布局的方法其实网上有很多,大概为Flow(流动布局模型).Float(浮动布局模型).Layer(层级布局模型).<!--more--> Flow布局 流动布局模型其实就是默 ...

  10. aspxpivotgrid排序

    protected virtual void SetSortBySummary() { foreach (PivotGridField field in grid.Fields) { if (fiel ...