package com.zcloud.logs;//package com.zcloud.logs;
//
//import com.alibaba.fastjson.JSONObject;
//import com.zcloud.entity.PageData;
//import com.zcloud.service.prevention.CorpInfoService;
//import com.zcloud.service.system.UsersService;
//import com.zcloud.util.Const;
//import com.zcloud.util.Jurisdiction;
//import lombok.extern.slf4j.Slf4j;
//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.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.web.context.request.RequestContextHolder;
//import org.springframework.web.context.request.ServletRequestAttributes;
//
//import javax.servlet.http.HttpServletRequest;
//import java.lang.reflect.Method;
//import java.text.SimpleDateFormat;
//import java.util.Date;
//import java.util.Map;
//
///**
// * @author fangjiakai
// * @date 2022/07/25 11:39
// */
//@Component
//@Aspect
//@Slf4j
//public class LogAopAspect {
//
//    @Autowired
//    private CorpInfoService corpInfoService;
//    @Autowired
//    private UsersService usersService;
//
//    @Around("@annotation(com.zcloud.logs.LogAnno)")
//    public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
//        // 1.方法执行前的处理，相当于前置通知
//        // 获取方法签名
//        MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
//        // 获取方法
//        Method method = methodSignature.getMethod();
//        // 获取方法上面的注解
//        LogAnno logAnno = method.getAnnotation(LogAnno.class);
//        String userId=null;
//        String corpId=null;
//        String ip=null;
//        if(Jurisdiction.getSession() != null && Jurisdiction.getSession().getAttribute(Const.USER_ID)!=null){
//            userId = Jurisdiction.getUSER_ID();
//            corpId = Jurisdiction.getCORPINFO_ID();
//        }else {
//            try {
//                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
//                        .getRequest();
//                Map properties = request.getParameterMap();
//                userId = ((String[]) properties.get("USER_ID"))[0];
//                corpId = ((String[]) properties.get("CORPINFO_ID"))[0];
//            }catch (Exception e){
//                return pjp.proceed();
//            }
//        }
//
//        PageData corp = new PageData();
//        corp.put("CORPINFO_ID",corpId);
//        corp = corpInfoService.findById(corp);
//
//        PageData user = new PageData();
//        user.put("USER_ID",userId);
//        user = usersService.findById(user);
//
//        // 获取操作描述的属性值
//        String menuType = logAnno.menuType();
//        //获取操作模块的属性值
//        String menuServer = logAnno.menuServer();
//        //获取操作类型
//        String instructionsType = logAnno.instructionsType();
//        //获取操作指令
//        String instructionsOperate = logAnno.instructionsOperate();
//        JSONObject message = new JSONObject();
//        message.put("menuType",menuType);
//        message.put("menuServer",menuServer);
//        message.put("instructionsOperate",instructionsOperate);
//        message.put("instructionsType",instructionsType);
//        message.put("CORPINFO_ID",corpId);
//        message.put("CORPINFO_NAME",corp.getString("CORP_NAME"));
//        message.put("USER_ID",userId);
//        message.put("operateor",user.getString("NAME"));
//        Object result = null;
//        try {
//            // 让代理方法执行
//            result = pjp.proceed();
//            // 2.相当于后置通知(方法成功执行之后走这里)
//            message.put("operateResult","正常");
//            Date now = new Date();
//            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//可以方便地修改日期格格式
//            String format = dateFormat.format(now);
//            message.put("operateDate",format);
//            log.info(message.toJSONString());
//        } catch (Exception e) {
//            // 3.相当于异常通知部分
//            message.put("operateResult","失败");
//            Date now = new Date();
//            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//可以方便地修改日期格格式
//            String format = dateFormat.format(now);
//            message.put("operateDate",format);
//            message.put("error",e.getMessage());
//            e.printStackTrace();
//            log.info(message.toJSONString());
//        }
//        return result;
//    }
//}
