package com.zcloud.aspect; import com.alibaba.fastjson.JSON; import com.zcloud.dto.TenCorpDto; import com.zcloud.entity.PageData; import com.zcloud.entity.system.User; import com.zcloud.service.docking.DockingRelationService; import com.zcloud.service.mq.DockSendMessageService; import com.zcloud.service.mq.SendMessageService; import com.zcloud.util.Const; import com.zcloud.util.Jurisdiction; import com.zcloud.util.Tools; import com.zcloud.util.UuidUtil; import org.apache.shiro.session.Session; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; @Component @Aspect public class DockingAspect { @Autowired private DockSendMessageService sendMessageService; @Autowired private DockingRelationService dockingRelationService; @Value("${baseimgpath}") public String baseimgpath; @Pointcut("@annotation(com.zcloud.aspect.DockAnnotation)") public void pointcut() { } public static Map dockingRelationMap = new HashMap(); // 增强逻辑:在切点方法执行前打印日志 @Around("pointcut()") public Object beforeApi(ProceedingJoinPoint joinPoint) throws Throwable { try { Object proceed = joinPoint.proceed(); HashMap parseProceed = JSON.parseObject(JSON.toJSONString(proceed), HashMap.class); if (parseProceed == null) { return parseProceed; } // 数据同步 dataSync(parseProceed, joinPoint); return proceed; } catch (Exception e) { throw e; } // // // MethodSignature signature = (MethodSignature) joinPoint.getSignature(); // Method method = joinPoint.getTarget().getClass().getDeclaredMethod(signature.getName(), signature.getParameterTypes()); // try { // HttpServletRequest request = getRequest(); // //获取资源映射路径:servlet路径 // String servletPath = request.getServletPath(); // //验证该数据是否需要对接 // System.out.println("------------------------切面方法执行------------------------"); // //将路径换为对应的访问路径 // /*servletPath=dockingRelationMap.get(servletPath); // //完整访问路径(访问港务局的路径,不是被访问的路径) // String fullPath = gwjUrl+servletPath; // System.out.println("完整路径:"+fullPath);*/ // //获取所有访问参数 // PageData pageData = getPageData(); // DockAnnotation annotation = method.getAnnotation(DockAnnotation.class); // if (annotation != null) { // if (annotation.isAdd()) { // if (Tools.notEmpty(proceed.get("dockData"))) { // pageData.put("dockData", proceed.get("dockData")); // } // } else if (annotation.hasAnnex()) { // //查找附件 // String dockDataJson = pageData.getString("dockData"); // if (Tools.notEmpty(dockDataJson)) { // Map dockData = (Map) JSON.parse(dockDataJson); // String img = dockData.get("img"); // for (String imgurl : img.split(",")) { // //获取附件名称 // String[] split = imgurl.split("/"); // String filename = split[split.length - 1]; // PageData imgpd = new PageData(); // imgpd.put("imgUrl", imgurl); // imgpd.put("filename", filename); // imgpd.put("url", "/file/saveImg"); // imgpd.put("TARGETURL", "https://qgqy.qhdsafety.com/file/"); // imgpd.put("ORIGINURL", "https://qgqy.qhdsafety.com/file/"); // TenCorpDto tenCorpDto = new TenCorpDto(); // tenCorpDto.setMessage("一条新增消息"); // tenCorpDto.setData(imgpd); // tenCorpDto.setId(UuidUtil.get32UUID()); // tenCorpDto.setTopic("docking"); // tenCorpDto.setProducer_name("qa-prevention-czks"); // sendMessageService.sendMessage(tenCorpDto); // } // } // } // } // PageData login_user = new PageData(); // if (!servletPath.contains("/app/")) { // login_user.put("USER_ID", Jurisdiction.getUSER_ID()); // login_user.put("USERNAME", Jurisdiction.getUsername()); // login_user.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID()); // login_user.put("DEPARTMENT_ID", Jurisdiction.getDEPARTMENT_ID()); // login_user.put("NAME", Jurisdiction.getName()); // login_user.put("ISSUPERVISE", Jurisdiction.getISSUPERVISE()); // login_user.put("POST_ID", Jurisdiction.getPOST_ID()); // } // pageData.put("LOGIN_USER", login_user); // pageData.put("url", servletPath); // /*//连接redis // Jedis jedis = new Jedis(host,port); // //测试是否连接成功 // String ping = jedis.ping(); // System.out.println(ping); // //切换数据库 // String select = jedis.select(0); // System.out.println(select); // //存储数据至redis // String rq = JSON.toJSONString(map); // jedis.zadd("request",0,rq); // System.out.println(rq);*/ // TenCorpDto tenCorpDto = new TenCorpDto(); // tenCorpDto.setMessage("一条新增消息"); // tenCorpDto.setData(pageData); // tenCorpDto.setId(UuidUtil.get32UUID()); // tenCorpDto.setTopic("docking"); // tenCorpDto.setProducer_name("qa-prevention-czks"); // sendMessageService.sendMessage(tenCorpDto); // System.out.println("------------------------方法执行完毕------------------------"); // } catch (Exception e) { // throw new RuntimeException(e); // } // return proceed; } private void dataSync(HashMap proceed, ProceedingJoinPoint joinPoint) throws Exception { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = joinPoint.getTarget().getClass().getDeclaredMethod(signature.getName(), signature.getParameterTypes()); DockAnnotation annotation = method.getAnnotation(DockAnnotation.class); //获取资源映射路径:servlet路径 String servletPath = getRequest().getServletPath(); //验证该数据是否需要对接 System.out.println("------------------------切面方法执行------------------------"); PageData sendData = this.getPageData(); // app 方法 不取session PageData login_user = new PageData(); if (!servletPath.contains("/app/")) { login_user.put("USER_ID", Jurisdiction.getUSER_ID()); login_user.put("USERNAME", Jurisdiction.getUsername()); login_user.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID()); login_user.put("DEPARTMENT_ID", Jurisdiction.getDEPARTMENT_ID()); login_user.put("NAME", Jurisdiction.getName()); login_user.put("ISSUPERVISE", Jurisdiction.getISSUPERVISE()); login_user.put("POST_ID", Jurisdiction.getPOST_ID()); login_user.put("IS_MAIN", Jurisdiction.getIS_MAIN()); Session session = Jurisdiction.getSession(); User user = (User)session.getAttribute(Const.SESSION_USER); login_user.put("user",JSON.toJSONString(user)); sendData.put("LOGIN_USER", login_user); } else { // 手机app 会传递值。 login_user.put("USER_ID", Tools.notEmpty(sendData.getString("USER_ID")) ? sendData.getString("USER_ID") : ""); sendData.put("LOGIN_USER", login_user); } // 路径地址 sendData.put("url", servletPath); // 有存自己表里的图片 把自己图片服务器的前缀传过去 if (annotation.hasAnnex()) { sendData.put("BASEIMGPATH", "czks-baseimgpath"); // 自己表里的图片集合 sendData.put("sendPicturesList", proceed.get("sendPicturesList")); proceed.remove("sendPicturesList"); } // 有dockData if (Tools.notEmpty(proceed.get("dockData"))) { sendData.put("dockData", proceed.get("dockData")); proceed.remove("dockData"); } else { sendData.put("dockData", "手动添加的dockData"); } TenCorpDto tenCorpDto = new TenCorpDto(); tenCorpDto.setMessage("沧州矿石数据同步消息"); tenCorpDto.setData(sendData); tenCorpDto.setId(UuidUtil.get32UUID()); tenCorpDto.setTopic("docking"); tenCorpDto.setProducer_name("qa-prevention-czks"); sendMessageService.sendMessage(tenCorpDto); System.out.println("------------------------切面方法结束------------------------"); } @PostConstruct private void initDockingRelationship() throws Exception { dockingRelationMap = dockingRelationService.listAll(null); } private PageData getPageData() { return new PageData(this.getRequest()); } /** * 得到request对象 * * @return */ private HttpServletRequest getRequest() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) .getRequest(); return request; } }