package com.kmall.admin.aop; import com.alibaba.fastjson.JSON; import com.kmall.admin.dao.InterfaceSendLogDao; import com.kmall.admin.entity.InterfaceSendLogEntity; import com.kmall.admin.haikong.constant.HaiKongMemberSystemUrlEnum; import com.kmall.admin.haikong.constant.HaiKongWareSystemUrlEnum; import com.kmall.admin.haikong.constant.VmcconnectUrlEnum; import com.kmall.common.constant.Dict; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; @Aspect @Component public class InterfaceExternalAspect { private final static Logger logger = LoggerFactory.getLogger(RepeatSubmitAspect.class); /** * 日志记录dao层 */ @Autowired private InterfaceSendLogDao interfaceSendLogDao; /** * 接口日志记录 * * @param proceedingJoinPoint * @return */ @Around("execution(public * com.kmall.admin.haikong.client.*.*(..))") public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { Object result = null; String exMsg = null; String methd = null; InterfaceSendLogEntity interfaceSendLogEntity = null; StringBuilder requestLog = new StringBuilder(); try { MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature(); methd = methodSignature.getMethod().getName(); interfaceSendLogEntity = getMethdMsg(methd); Object[] args = proceedingJoinPoint.getArgs(); for (Object o : args) { requestLog.append(String.format("参数:%s\r\n", JSON.toJSON(o))); } interfaceSendLogEntity.setRequestDate(new Date()); result = proceedingJoinPoint.proceed(); } catch (Exception e) { exMsg = e.getMessage(); throw e; } finally { saveVmcSend(interfaceSendLogEntity,requestLog.toString(),JSON.toJSONString(result),exMsg); } return result; } /** * 调用各外部系统日志组装 * @param methd * @return */ private InterfaceSendLogEntity getMethdMsg(String methd) { InterfaceSendLogEntity interfaceSendLogEntity = new InterfaceSendLogEntity(); switch (methd){ case "sendOrder": interfaceSendLogEntity.setSysType(Dict.sendLog.item_mall.getItemName()); interfaceSendLogEntity.setInterfaceType(VmcconnectUrlEnum.ORDERS_CREATE_ORDER.getMethodName()); break; case "refundOrder": interfaceSendLogEntity.setSysType(Dict.sendLog.item_mall.getItemName()); interfaceSendLogEntity.setInterfaceType(VmcconnectUrlEnum.ORDERS_CANCEL_ORDER.getMethodName()); break; case "ordersOuterStatus": interfaceSendLogEntity.setSysType(Dict.sendLog.item_mall.getItemName()); interfaceSendLogEntity.setInterfaceType(VmcconnectUrlEnum.ORDERS_OUTER_STATUS.getMethodName()); break; case "resendOrder": interfaceSendLogEntity.setSysType(Dict.sendLog.item_mall.getItemName()); interfaceSendLogEntity.setInterfaceType(VmcconnectUrlEnum.ORDERS_RETRY_ORDER.getMethodName()); break; case "queryWarehouseStock": interfaceSendLogEntity.setSysType(Dict.sendLog.item_warehouse.getItemName()); interfaceSendLogEntity.setInterfaceType(HaiKongWareSystemUrlEnum.QUERY_INVENTORY.getMethodName()); break; //会员系统 case "getAccessToken": interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName()); interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.QUERY_ACCESS_TOKEN.getMethodName()); break; case "refreshAccessToken": interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName()); interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.REFRESH_ACCESS_TOKEN.getMethodName()); break; case "getMemberInfoByPhone": interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName()); interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.QUERY_MEMBER_INFO_BY_PHONE.getMethodName()); break; case "getMemberInfoByCode": interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName()); interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.QUERY_MEMBER_INFO_BY_CODE.getMethodName()); break; case "getMemberCouponInfo": interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName()); interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.QUERY_MEMBER_COUPON.getMethodName()); break; case "changeMemberScore": interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName()); interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.CHANGE_MEMBER_SCORE.getMethodName()); break; case "memberOrderSync": interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName()); interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.MEMBER_ORDER_SYNC.getMethodName()); break; case "rollbackMemberScore": interfaceSendLogEntity.setSysType(Dict.sendLog.item_member.getItemName()); interfaceSendLogEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.ROLLBACK_MEMBER_SCORE.getMethodName()); break; default: break; } return interfaceSendLogEntity; } /** * 插入日志记录 * @param interfaceSendLogEntity * @param request * @param response * @param exMsg */ private void saveVmcSend(InterfaceSendLogEntity interfaceSendLogEntity, String request, String response,String exMsg){ interfaceSendLogEntity.setRequestMsg(request); interfaceSendLogEntity.setResponseMsg(response); interfaceSendLogEntity.setResponseDate(new Date()); interfaceSendLogEntity.setExceptionMsg(exMsg); interfaceSendLogDao.save(interfaceSendLogEntity); } }