package com.fdkankan.scene.Interceptor; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.fdkankan.common.util.ThreeDESUtil; import com.fdkankan.common.util.UserAgentUtils; import com.fdkankan.common.util.WebUtil; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.feign.TietaFeignClient; import com.fdkankan.feign.WS4AServiceClient; import com.fdkankan.scene.entity.SceneViewLog; import com.fdkankan.scene.service.SceneViewLogService; import lombok.extern.log4j.Log4j2; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.Map; @Log4j2 @Aspect @Component @Order(101) public class ViewLogAspect { @Value("${spring.cloud.nacos.discovery.access-key}") private String accessKey; @Value("${tieta.checkToken.syscode}") private String syscode; @Value("${gateway.key:6#dPz>3F}") private String gatewayKey; @Value("${gateway.url}") private String gatewayUrl; @Resource private TietaFeignClient tietaFeignClient; @Autowired private WS4AServiceClient ws4AServiceClient; @Autowired private SceneViewLogService sceneViewLogService; @Pointcut("@annotation(com.fdkankan.scene.annotation.VrLog)") public void checkCooperationPermit() { } /** * 前置通知 用于判断用户协作场景是否有协作权限 * * @param joinPoint * 切点 * @throws IOException */ @Before("checkCooperationPermit()") public void doBefore(JoinPoint joinPoint) throws Exception { log.info("记录日志开始"); HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); boolean mobileDevice = UserAgentUtils.isMobileDevice(request); String userAgent = "pc"; if(mobileDevice){ userAgent = "mobile"; } //请求4a接口获取用户信息 Map parameter = WebUtil.getParameter(joinPoint, request); String acctId = (String) parameter.get("acctId"); String token = (String) parameter.get("token"); String num = (String) parameter.get("num"); String syscode = (String) parameter.get("syscode"); //token校验 JSONObject checkProwadaTokenParam = new JSONObject(); JSONObject params = new JSONObject(); params.put("SYSCODE", syscode); params.put("ACCTID", acctId); params.put("TOKEN", token); String encode = ThreeDESUtil.encode(JSON.toJSONString(params), gatewayKey); checkProwadaTokenParam.put("args", encode); JSONObject result = ws4AServiceClient.checkProwadaToken(checkProwadaTokenParam); log.info("场景:{},4A校验token结果:{}", num, result); if(!"SUCCESS".equals(result.getString("resultStat"))){ throw new BusinessException(4000, "4A鉴权失败"); } String data = result.getString("data"); JSONObject dataObj = JSONObject.parseObject(data); if(!"0".equals(dataObj.getString("RSP"))){ throw new BusinessException(4000, "4A鉴权失败:" + dataObj.getString("ERRDESC")); } String USERCODE = dataObj.getString("USERCODE"); // String SERVICEID = dataObj.getString("SERVICEID"); String ORGCODE = dataObj.getString("ORGCODE"); //查询用户信息 JSONObject param2 = new JSONObject(); param2.put("SERVICEID", syscode); param2.put("LOGINACCOUNT", USERCODE); param2.put("TOKEN", token); encode = ThreeDESUtil.encode(JSON.toJSONString(param2), gatewayKey); Map param = new HashMap<>(); param.put("args", encode); String queryLoginUserInfoResp = HttpUtil.get(gatewayUrl + "/QUERY4A/user/queryLoginUserInfo?args=" + encode); result = JSON.parseObject(queryLoginUserInfoResp); // result = ws4AServiceClient.queryLoginUserInfo(encode); log.info("场景:{},4A查询用户信息结果:{}", num, result); if(!"SUCCESS".equals(result.getString("resultStat"))){ throw new BusinessException(4000, "4A查询用户信息失败"); } data = result.getString("data"); dataObj = JSONObject.parseObject(data); if(!"0".equals(dataObj.getString("RSP"))){ throw new BusinessException(4000, "4A查询用户信息失败:" + dataObj.getString("ERRDESC")); } String nickName = dataObj.getString("LOGINNAME"); JSONObject param3 = new JSONObject(); param3.put("SERVICEID", syscode); param3.put("QUERYMODE", "3"); param3.put("ORGCODE", ORGCODE); param3.put("TOKEN", token); encode = ThreeDESUtil.encode(JSON.toJSONString(param3), gatewayKey); // result = ws4AServiceClient.queryOrgs(encode); String queryOrgsResp = HttpUtil.get(gatewayUrl + "/QUERY4A/query/queryOrgs?args=" + encode); result = JSON.parseObject(queryOrgsResp); log.info("场景:{},4A查询用户组织结果:{}", num, result); if(!"SUCCESS".equals(result.getString("resultStat"))){ throw new BusinessException(4000, "查询用户组织失败"); } data = result.getString("data"); dataObj = JSONObject.parseObject(data); if(!"0".equals(dataObj.getString("RSP"))){ throw new BusinessException(4000, "4A查询用户组织失败:" + dataObj.getString("ERRDESC")); } JSONObject ORGS = dataObj.getJSONObject("ORGS"); JSONArray ORG = ORGS.getJSONArray("ORG"); JSONObject ORG1 = ORG.getJSONObject(0); String ORGNAMEPATH = ORG1.getString("ORGNAMEPATH"); //写入表 SceneViewLog sceneViewLog = new SceneViewLog(); sceneViewLog.setOrgNamePath(ORGNAMEPATH); sceneViewLog.setFuncName("VR全景"); sceneViewLog.setFuncDesc("VR全景试图"); sceneViewLog.setUserName(USERCODE); sceneViewLog.setNickName(nickName); sceneViewLog.setCreateTime(new Date()); sceneViewLog.setTerminalType(userAgent); sceneViewLogService.save(sceneViewLog); } public static void main(String[] args) { JSONObject param2 = new JSONObject(); param2.put("SERVICEID", "CHNTRMS2"); param2.put("LOGINACCOUNT", "wx-sunql3"); param2.put("TOKEN", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJSRVMiLCJpc3MiOiJXUzRBIiwiZXhwIjoxNzMzMzEwNjY1LCJOQU5PU0VDT05EIjo0MjAxNTczODIzODYyMjgzOH0.sQR4qkTeRZEOQMI-Rjck35dFswoOMYHsGSuNcXH45TI"); String encode = ThreeDESUtil.encode(JSON.toJSONString(param2), "6#dPz>3F"); System.out.println(encode); } }