AnnotationTest.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package com.fuzamei.aspect;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Arrays;
  5. import java.util.Date;
  6. import org.aspectj.lang.JoinPoint;
  7. import org.aspectj.lang.ProceedingJoinPoint;
  8. import org.aspectj.lang.annotation.After;
  9. import org.aspectj.lang.annotation.AfterReturning;
  10. import org.aspectj.lang.annotation.Around;
  11. import org.aspectj.lang.annotation.Aspect;
  12. import org.aspectj.lang.annotation.Before;
  13. import org.aspectj.lang.annotation.Pointcut;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Component;
  16. import com.fuzamei.dao.BillOrderActDao;
  17. import com.fuzamei.dto.OrderDto;
  18. import com.fuzamei.dto.billInfoDto;
  19. import com.fuzamei.entity.BillOrderAct;
  20. import com.fuzamei.enums.LogTypeEnum;
  21. import com.fuzamei.po.LogAct;
  22. import com.fuzamei.service.LoggerService;
  23. import com.fuzamei.util.TimeStampUtil;
  24. @Component
  25. @Aspect
  26. public class AnnotationTest {
  27. @Autowired
  28. LoggerService loggerService;
  29. @Autowired
  30. BillOrderActDao billOrderActDao;
  31. //定义切点
  32. // execution意思是当某方法执行时触发。
  33. // 第一个 * 意思配备任何一个perform方法,是不在乎方法返回类型是什么。
  34. // concert.Performance是为了定位perform()方法再哪个类中。
  35. // .. 代表配备任何一个perform方法,不在意他的参数列表是啥。
  36. // @Pointcut("execution(* *.findLogActById(..))")
  37. // public void sayings() {}
  38. //
  39. //
  40. //
  41. // @Before("sayings()")
  42. // public void sayHello(JoinPoint point) {
  43. // System.out.println("注解类型前置通知:我还要输出参数:" + Arrays.toString(point.getArgs())); //
  44. // }
  45. //后置通知
  46. //开单日志记录
  47. @AfterReturning(pointcut="execution(* *.insertOrder(..)) && args(orderDto)")
  48. public void logForMakeBill(OrderDto orderDto) throws ParseException{
  49. System.out.println("注解类型后置通知" + orderDto);
  50. //获取当前时间当做用户操作的操作时间
  51. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  52. String dateString = formatter.format(new Date());
  53. //封装LogAct
  54. LogAct logAct = new LogAct();
  55. logAct.setOrderId(orderDto.getOrderId());
  56. logAct.setOperatorType(LogTypeEnum.ENTERING.getStateInfo());//'录入'枚举
  57. logAct.setOperatorTime(TimeStampUtil.dateToStamp(dateString));
  58. logAct.setOperatorEnterpriseId(orderDto.getOutEnterpriseId());
  59. logAct.setOperatorEnterpriseName(orderDto.getOutEnterprise());
  60. logAct.setBillTotalMoney(orderDto.getSummary());
  61. logAct.setPaymentEnterpriseName(orderDto.getOutEnterprise());
  62. //logact存入数据库
  63. try {
  64. loggerService.inputLogAct(logAct);
  65. } catch (Exception e) {
  66. // TODO Auto-generated catch block
  67. e.printStackTrace();
  68. System.out.println("操作记录存入数据库失败,请检查日志");
  69. }
  70. }
  71. //撤销单据日志记录
  72. @AfterReturning(pointcut="execution(* *.cancelBill(..)) && args(billId)")
  73. public void logForCancelBill(String billId) throws ParseException{
  74. System.out.println("注解类型后置通知" + billId);
  75. //获取当前时间当做用户操作的操作时间
  76. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  77. String dateString = formatter.format(new Date());
  78. //billId临时转换成int
  79. int intBillId = Integer.parseInt(billId);
  80. //根据流转表id查询流转表信息
  81. BillOrderAct billOrderAct = billOrderActDao.selectByOrderActId(intBillId);
  82. //封装LogAct
  83. LogAct logAct = new LogAct();
  84. logAct.setOrderId(billOrderAct.getOrderId());
  85. logAct.setOperatorType(LogTypeEnum.REVOKE_ENTERING.getStateInfo());//'撤销录入'枚举
  86. logAct.setOperatorTime(TimeStampUtil.dateToStamp(dateString));
  87. logAct.setOperatorEnterpriseId(billOrderAct.getOwnEnterpriseId());
  88. logAct.setOperatorEnterpriseName(billOrderAct.getOwnEnterprise());
  89. logAct.setBillTotalMoney(billOrderAct.getMoney());
  90. logAct.setPaymentEnterpriseName(billOrderAct.getOperatorEnterprise());
  91. //logact存入数据库
  92. try {
  93. loggerService.inputLogAct(logAct);
  94. } catch (Exception e) {
  95. // TODO Auto-generated catch block
  96. e.printStackTrace();
  97. System.out.println("操作记录存入数据库失败,请检查日志");
  98. }
  99. }
  100. //编辑修改单据日志记录
  101. @AfterReturning(pointcut="execution(* *.editBill(..)) && args(orderDto)")
  102. public void logForEditBill(OrderDto orderDto) throws ParseException{
  103. System.out.println("注解类型后置通知" + orderDto);
  104. //获取当前时间当做用户操作的操作时间
  105. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  106. String dateString = formatter.format(new Date());
  107. //封装LogAct
  108. LogAct logAct = new LogAct();
  109. logAct.setOrderId(orderDto.getOrderId());
  110. logAct.setOperatorType(LogTypeEnum.REVISE.getStateInfo());//'编辑修改'枚举
  111. logAct.setOperatorTime(TimeStampUtil.dateToStamp(dateString));
  112. logAct.setOperatorEnterpriseId(orderDto.getOutEnterpriseId());
  113. logAct.setOperatorEnterpriseName(orderDto.getOutEnterprise());
  114. logAct.setBillTotalMoney(orderDto.getSummary());
  115. logAct.setPaymentEnterpriseName(orderDto.getOutEnterprise());
  116. //logact存入数据库
  117. try {
  118. loggerService.inputLogAct(logAct);
  119. } catch (Exception e) {
  120. // TODO Auto-generated catch block
  121. e.printStackTrace();
  122. System.out.println("操作记录存入数据库失败,请检查日志");
  123. }
  124. }
  125. // //环绕通知。注意要有ProceedingJoinPoint参数传入。
  126. // @Around("sayings()")
  127. // public void sayAround(ProceedingJoinPoint pjp) throws Throwable{
  128. // System.out.println("注解类型环绕通知..环绕前");
  129. // pjp.proceed();//执行方法
  130. // System.out.println("注解类型环绕通知..环绕后");
  131. // }
  132. }