ViewLogAspect.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package com.fdkankan.scene.Interceptor;
  2. import cn.hutool.http.HttpUtil;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.fdkankan.common.util.ThreeDESUtil;
  7. import com.fdkankan.common.util.UserAgentUtils;
  8. import com.fdkankan.common.util.WebUtil;
  9. import com.fdkankan.common.exception.BusinessException;
  10. import com.fdkankan.feign.TietaFeignClient;
  11. import com.fdkankan.feign.WS4AServiceClient;
  12. import com.fdkankan.scene.entity.SceneViewLog;
  13. import com.fdkankan.scene.service.SceneViewLogService;
  14. import lombok.extern.log4j.Log4j2;
  15. import org.aspectj.lang.JoinPoint;
  16. import org.aspectj.lang.annotation.Aspect;
  17. import org.aspectj.lang.annotation.Before;
  18. import org.aspectj.lang.annotation.Pointcut;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.core.annotation.Order;
  22. import org.springframework.stereotype.Component;
  23. import org.springframework.web.context.request.RequestContextHolder;
  24. import org.springframework.web.context.request.ServletRequestAttributes;
  25. import javax.annotation.Resource;
  26. import javax.servlet.http.HttpServletRequest;
  27. import java.io.IOException;
  28. import java.util.Date;
  29. import java.util.HashMap;
  30. import java.util.Map;
  31. @Log4j2
  32. @Aspect
  33. @Component
  34. @Order(101)
  35. public class ViewLogAspect {
  36. @Value("${spring.cloud.nacos.discovery.access-key}")
  37. private String accessKey;
  38. @Value("${tieta.checkToken.syscode}")
  39. private String syscode;
  40. @Value("${gateway.key:6#dPz>3F}")
  41. private String gatewayKey;
  42. @Value("${gateway.url}")
  43. private String gatewayUrl;
  44. @Resource
  45. private TietaFeignClient tietaFeignClient;
  46. @Autowired
  47. private WS4AServiceClient ws4AServiceClient;
  48. @Autowired
  49. private SceneViewLogService sceneViewLogService;
  50. @Pointcut("@annotation(com.fdkankan.scene.annotation.VrLog)")
  51. public void checkCooperationPermit() {
  52. }
  53. /**
  54. * 前置通知 用于判断用户协作场景是否有协作权限
  55. *
  56. * @param joinPoint
  57. * 切点
  58. * @throws IOException
  59. */
  60. @Before("checkCooperationPermit()")
  61. public void doBefore(JoinPoint joinPoint) throws Exception {
  62. log.info("记录日志开始");
  63. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  64. boolean mobileDevice = UserAgentUtils.isMobileDevice(request);
  65. String userAgent = "pc";
  66. if(mobileDevice){
  67. userAgent = "mobile";
  68. }
  69. //请求4a接口获取用户信息
  70. Map<String, Object> parameter = WebUtil.getParameter(joinPoint, request);
  71. String acctId = (String) parameter.get("acctId");
  72. String token = (String) parameter.get("token");
  73. String num = (String) parameter.get("num");
  74. String syscode = (String) parameter.get("syscode");
  75. //token校验
  76. JSONObject checkProwadaTokenParam = new JSONObject();
  77. JSONObject params = new JSONObject();
  78. params.put("SYSCODE", syscode);
  79. params.put("ACCTID", acctId);
  80. params.put("TOKEN", token);
  81. String encode = ThreeDESUtil.encode(JSON.toJSONString(params), gatewayKey);
  82. checkProwadaTokenParam.put("args", encode);
  83. JSONObject result = ws4AServiceClient.checkProwadaToken(checkProwadaTokenParam);
  84. log.info("场景:{},4A校验token结果:{}", num, result);
  85. if(!"SUCCESS".equals(result.getString("resultStat"))){
  86. throw new BusinessException(4000, "4A鉴权失败");
  87. }
  88. String data = result.getString("data");
  89. JSONObject dataObj = JSONObject.parseObject(data);
  90. if(!"0".equals(dataObj.getString("RSP"))){
  91. throw new BusinessException(4000, "4A鉴权失败:" + dataObj.getString("ERRDESC"));
  92. }
  93. String USERCODE = dataObj.getString("USERCODE");
  94. // String SERVICEID = dataObj.getString("SERVICEID");
  95. String ORGCODE = dataObj.getString("ORGCODE");
  96. //查询用户信息
  97. JSONObject param2 = new JSONObject();
  98. param2.put("SERVICEID", syscode);
  99. param2.put("LOGINACCOUNT", USERCODE);
  100. param2.put("TOKEN", token);
  101. encode = ThreeDESUtil.encode(JSON.toJSONString(param2), gatewayKey);
  102. Map<String, Object> param = new HashMap<>();
  103. param.put("args", encode);
  104. String queryLoginUserInfoResp = HttpUtil.get(gatewayUrl + "/QUERY4A/user/queryLoginUserInfo?args=" + encode);
  105. result = JSON.parseObject(queryLoginUserInfoResp);
  106. // result = ws4AServiceClient.queryLoginUserInfo(encode);
  107. log.info("场景:{},4A查询用户信息结果:{}", num, result);
  108. if(!"SUCCESS".equals(result.getString("resultStat"))){
  109. throw new BusinessException(4000, "4A查询用户信息失败");
  110. }
  111. data = result.getString("data");
  112. dataObj = JSONObject.parseObject(data);
  113. if(!"0".equals(dataObj.getString("RSP"))){
  114. throw new BusinessException(4000, "4A查询用户信息失败:" + dataObj.getString("ERRDESC"));
  115. }
  116. String nickName = dataObj.getString("LOGINNAME");
  117. JSONObject param3 = new JSONObject();
  118. param3.put("SERVICEID", syscode);
  119. param3.put("QUERYMODE", "3");
  120. param3.put("ORGCODE", ORGCODE);
  121. param3.put("TOKEN", token);
  122. encode = ThreeDESUtil.encode(JSON.toJSONString(param3), gatewayKey);
  123. // result = ws4AServiceClient.queryOrgs(encode);
  124. String queryOrgsResp = HttpUtil.get(gatewayUrl + "/QUERY4A/query/queryOrgs?args=" + encode);
  125. result = JSON.parseObject(queryOrgsResp);
  126. log.info("场景:{},4A查询用户组织结果:{}", num, result);
  127. if(!"SUCCESS".equals(result.getString("resultStat"))){
  128. throw new BusinessException(4000, "查询用户组织失败");
  129. }
  130. data = result.getString("data");
  131. dataObj = JSONObject.parseObject(data);
  132. if(!"0".equals(dataObj.getString("RSP"))){
  133. throw new BusinessException(4000, "4A查询用户组织失败:" + dataObj.getString("ERRDESC"));
  134. }
  135. JSONObject ORGS = dataObj.getJSONObject("ORGS");
  136. JSONArray ORG = ORGS.getJSONArray("ORG");
  137. JSONObject ORG1 = ORG.getJSONObject(0);
  138. String ORGNAMEPATH = ORG1.getString("ORGNAMEPATH");
  139. //写入表
  140. SceneViewLog sceneViewLog = new SceneViewLog();
  141. sceneViewLog.setOrgNamePath(ORGNAMEPATH);
  142. sceneViewLog.setFuncName("VR全景");
  143. sceneViewLog.setFuncDesc("VR全景试图");
  144. sceneViewLog.setUserName(USERCODE);
  145. sceneViewLog.setNickName(nickName);
  146. sceneViewLog.setCreateTime(new Date());
  147. sceneViewLog.setTerminalType(userAgent);
  148. sceneViewLogService.save(sceneViewLog);
  149. }
  150. public static void main(String[] args) {
  151. JSONObject param2 = new JSONObject();
  152. param2.put("SERVICEID", "CHNTRMS2");
  153. param2.put("LOGINACCOUNT", "wx-sunql3");
  154. param2.put("TOKEN", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJSRVMiLCJpc3MiOiJXUzRBIiwiZXhwIjoxNzMzMzEwNjY1LCJOQU5PU0VDT05EIjo0MjAxNTczODIzODYyMjgzOH0.sQR4qkTeRZEOQMI-Rjck35dFswoOMYHsGSuNcXH45TI");
  155. String encode = ThreeDESUtil.encode(JSON.toJSONString(param2), "6#dPz>3F");
  156. System.out.println(encode);
  157. }
  158. }