package com.fuzamei.aspect; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.fuzamei.dao.BillOrderActDao; import com.fuzamei.dto.OrderDto; import com.fuzamei.dto.billInfoDto; import com.fuzamei.entity.BillOrderAct; import com.fuzamei.enums.LogTypeEnum; import com.fuzamei.po.LogAct; import com.fuzamei.service.LoggerService; import com.fuzamei.util.TimeStampUtil; @Component @Aspect public class AnnotationTest { @Autowired LoggerService loggerService; @Autowired BillOrderActDao billOrderActDao; //定义切点 // execution意思是当某方法执行时触发。 // 第一个 * 意思配备任何一个perform方法,是不在乎方法返回类型是什么。 // concert.Performance是为了定位perform()方法再哪个类中。 // .. 代表配备任何一个perform方法,不在意他的参数列表是啥。 // @Pointcut("execution(* *.findLogActById(..))") // public void sayings() {} // // // // @Before("sayings()") // public void sayHello(JoinPoint point) { // System.out.println("注解类型前置通知:我还要输出参数:" + Arrays.toString(point.getArgs())); // // } //后置通知 //开单日志记录 @AfterReturning(pointcut="execution(* *.insertOrder(..)) && args(orderDto)") public void logForMakeBill(OrderDto orderDto) throws ParseException{ System.out.println("注解类型后置通知" + orderDto); //获取当前时间当做用户操作的操作时间 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = formatter.format(new Date()); //封装LogAct LogAct logAct = new LogAct(); logAct.setOrderId(orderDto.getOrderId()); logAct.setOperatorType(LogTypeEnum.ENTERING.getStateInfo());//'录入'枚举 logAct.setOperatorTime(TimeStampUtil.dateToStamp(dateString)); logAct.setOperatorEnterpriseId(orderDto.getOutEnterpriseId()); logAct.setOperatorEnterpriseName(orderDto.getOutEnterprise()); logAct.setBillTotalMoney(orderDto.getSummary()); logAct.setPaymentEnterpriseName(orderDto.getOutEnterprise()); //logact存入数据库 try { loggerService.inputLogAct(logAct); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("操作记录存入数据库失败,请检查日志"); } } //撤销单据日志记录 @AfterReturning(pointcut="execution(* *.cancelBill(..)) && args(billId)") public void logForCancelBill(String billId) throws ParseException{ System.out.println("注解类型后置通知" + billId); //获取当前时间当做用户操作的操作时间 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = formatter.format(new Date()); //billId临时转换成int int intBillId = Integer.parseInt(billId); //根据流转表id查询流转表信息 BillOrderAct billOrderAct = billOrderActDao.selectByOrderActId(intBillId); //封装LogAct LogAct logAct = new LogAct(); logAct.setOrderId(billOrderAct.getOrderId()); logAct.setOperatorType(LogTypeEnum.REVOKE_ENTERING.getStateInfo());//'撤销录入'枚举 logAct.setOperatorTime(TimeStampUtil.dateToStamp(dateString)); logAct.setOperatorEnterpriseId(billOrderAct.getOwnEnterpriseId()); logAct.setOperatorEnterpriseName(billOrderAct.getOwnEnterprise()); logAct.setBillTotalMoney(billOrderAct.getMoney()); logAct.setPaymentEnterpriseName(billOrderAct.getOperatorEnterprise()); //logact存入数据库 try { loggerService.inputLogAct(logAct); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("操作记录存入数据库失败,请检查日志"); } } //编辑修改单据日志记录 @AfterReturning(pointcut="execution(* *.editBill(..)) && args(orderDto)") public void logForEditBill(OrderDto orderDto) throws ParseException{ System.out.println("注解类型后置通知" + orderDto); //获取当前时间当做用户操作的操作时间 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = formatter.format(new Date()); //封装LogAct LogAct logAct = new LogAct(); logAct.setOrderId(orderDto.getOrderId()); logAct.setOperatorType(LogTypeEnum.REVISE.getStateInfo());//'编辑修改'枚举 logAct.setOperatorTime(TimeStampUtil.dateToStamp(dateString)); logAct.setOperatorEnterpriseId(orderDto.getOutEnterpriseId()); logAct.setOperatorEnterpriseName(orderDto.getOutEnterprise()); logAct.setBillTotalMoney(orderDto.getSummary()); logAct.setPaymentEnterpriseName(orderDto.getOutEnterprise()); //logact存入数据库 try { loggerService.inputLogAct(logAct); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("操作记录存入数据库失败,请检查日志"); } } // //环绕通知。注意要有ProceedingJoinPoint参数传入。 // @Around("sayings()") // public void sayAround(ProceedingJoinPoint pjp) throws Throwable{ // System.out.println("注解类型环绕通知..环绕前"); // pjp.proceed();//执行方法 // System.out.println("注解类型环绕通知..环绕后"); // } }