qa-prevention-gwj/src/main/java/com/zcloud/aspect/DockingAspect.java

226 lines
10 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<String, String> dockingRelationMap = new HashMap();
// 增强逻辑:在切点方法执行前打印日志
@Around("pointcut()")
public Object beforeApi(ProceedingJoinPoint joinPoint) throws Throwable {
try {
Object proceed = joinPoint.proceed();
HashMap<String, String> 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<String, String> dockData = (Map<String, String>) 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<String, String> 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;
}
}