InterfaceExternalAspect.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package com.kmall.admin.aop;
  2. import com.alibaba.fastjson.JSON;
  3. import com.kmall.admin.dao.InterfaceSendLogDao;
  4. import com.kmall.admin.entity.InterfaceSendLogEntity;
  5. import com.kmall.admin.haikong.constant.HaiKongMemberSystemUrlEnum;
  6. import com.kmall.admin.haikong.constant.HaiKongWareSystemUrlEnum;
  7. import com.kmall.admin.haikong.constant.VmcconnectUrlEnum;
  8. import com.kmall.common.constant.Dict;
  9. import org.aspectj.lang.ProceedingJoinPoint;
  10. import org.aspectj.lang.annotation.Around;
  11. import org.aspectj.lang.annotation.Aspect;
  12. import org.aspectj.lang.reflect.MethodSignature;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Component;
  17. import java.util.Date;
  18. @Aspect
  19. @Component
  20. public class InterfaceExternalAspect {
  21. private final static Logger logger = LoggerFactory.getLogger(RepeatSubmitAspect.class);
  22. /**
  23. * 日志记录dao层
  24. */
  25. @Autowired
  26. private InterfaceSendLogDao interfaceSendLogDao;
  27. /**
  28. * 接口日志记录
  29. *
  30. * @param proceedingJoinPoint
  31. * @return
  32. */
  33. @Around("execution(public * com.kmall.admin.haikong.client.*.*(..))")
  34. public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
  35. Object result = null;
  36. String exMsg = null;
  37. String methd = null;
  38. InterfaceSendLogEntity interfaceSendLogEntity = null;
  39. StringBuilder requestLog = new StringBuilder();
  40. try {
  41. MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
  42. methd = methodSignature.getMethod().getName();
  43. interfaceSendLogEntity = getMethdMsg(methd);
  44. Object[] args = proceedingJoinPoint.getArgs();
  45. for (Object o : args) {
  46. if (o instanceof String) {
  47. o = ((String) o).replaceAll("\r|\n", "");
  48. }
  49. requestLog.append(String.format("参数:%s\r\n", JSON.toJSON(o)));
  50. }
  51. interfaceSendLogEntity.setRequestDate(new Date());
  52. result = proceedingJoinPoint.proceed();
  53. } catch (Exception e) {
  54. exMsg = e.getMessage();
  55. throw e;
  56. } finally {
  57. if (result instanceof String) {
  58. result = ((String) result).replaceAll("\r|\n", "");
  59. }
  60. saveVmcSend(interfaceSendLogEntity,requestLog.toString(),JSON.toJSONString(result),exMsg);
  61. }
  62. return result;
  63. }
  64. /**
  65. * 调用各外部系统日志组装
  66. * @param methd
  67. * @return
  68. */
  69. private InterfaceSendLogEntity getMethdMsg(String methd) {
  70. InterfaceSendLogEntity interfaceSendLogEntity = new InterfaceSendLogEntity();
  71. switch (methd){
  72. case "sendOrder":
  73. interfaceSendLogEntity.setSysType(Dict.sendLog.item_mall.getItemName());
  74. interfaceSendLogEntity.setInterfaceType(VmcconnectUrlEnum.ORDERS_CREATE_ORDER.getMethodName());
  75. break;
  76. case "refundOrder":
  77. interfaceSendLogEntity.setSysType(Dict.sendLog.item_mall.getItemName());
  78. interfaceSendLogEntity.setInterfaceType(VmcconnectUrlEnum.ORDERS_CANCEL_ORDER.getMethodName());
  79. break;
  80. case "ordersOuterStatus":
  81. interfaceSendLogEntity.setSysType(Dict.sendLog.item_mall.getItemName());
  82. interfaceSendLogEntity.setInterfaceType(VmcconnectUrlEnum.ORDERS_OUTER_STATUS.getMethodName());
  83. break;
  84. case "resendOrder":
  85. interfaceSendLogEntity.setSysType(Dict.sendLog.item_mall.getItemName());
  86. interfaceSendLogEntity.setInterfaceType(VmcconnectUrlEnum.ORDERS_RETRY_ORDER.getMethodName());
  87. break;
  88. case "queryWarehouseStock":
  89. interfaceSendLogEntity.setSysType(Dict.sendLog.item_warehouse.getItemName());
  90. interfaceSendLogEntity.setInterfaceType(HaiKongWareSystemUrlEnum.QUERY_INVENTORY.getMethodName());
  91. break;
  92. //会员系统
  93. case "getAccessToken":
  94. interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName());
  95. interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.QUERY_ACCESS_TOKEN.getMethodName());
  96. break;
  97. case "refreshAccessToken":
  98. interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName());
  99. interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.REFRESH_ACCESS_TOKEN.getMethodName());
  100. break;
  101. case "getMemberInfoByPhone":
  102. interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName());
  103. interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.QUERY_MEMBER_INFO_BY_PHONE.getMethodName());
  104. break;
  105. case "getMemberInfoByCode":
  106. interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName());
  107. interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.QUERY_MEMBER_INFO_BY_CODE.getMethodName());
  108. break;
  109. case "getMemberCouponInfo":
  110. interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName());
  111. interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.QUERY_MEMBER_COUPON.getMethodName());
  112. break;
  113. case "changeMemberScore":
  114. interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName());
  115. interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.CHANGE_MEMBER_SCORE.getMethodName());
  116. break;
  117. case "memberOrderSync":
  118. interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName());
  119. interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.MEMBER_ORDER_SYNC.getMethodName());
  120. break;
  121. case "rollbackMemberScore":
  122. interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName());
  123. interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.ROLLBACK_MEMBER_SCORE.getMethodName());
  124. break;
  125. default:
  126. break;
  127. }
  128. return interfaceSendLogEntity;
  129. }
  130. /**
  131. * 插入日志记录
  132. * @param interfaceSendLogEntity
  133. * @param request
  134. * @param response
  135. * @param exMsg
  136. */
  137. private void saveVmcSend(InterfaceSendLogEntity interfaceSendLogEntity, String request, String response,String exMsg){
  138. interfaceSendLogEntity.setRequestMsg(request);
  139. interfaceSendLogEntity.setResponseMsg(response);
  140. interfaceSendLogEntity.setResponseDate(new Date());
  141. interfaceSendLogEntity.setExceptionMsg(exMsg);
  142. interfaceSendLogDao.save(interfaceSendLogEntity);
  143. }
  144. }