From 4955cdc73d9beb5733aa2c0a578c14798394fa61 Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期二, 23 九月 2025 18:06:45 +0800 Subject: [PATCH] AI对接 --- ruoyi-system/src/main/java/com/ruoyi/system/utils/util/AIUtil.java | 105 +++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 87 insertions(+), 18 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/AIUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/AIUtil.java index 2b0446d..3c3b65b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/AIUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/AIUtil.java @@ -9,10 +9,16 @@ import com.ruoyi.system.model.TSysAiConfig; import com.ruoyi.system.service.TSysAiConfigService; import lombok.extern.slf4j.Slf4j; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.TimeUnit; @Slf4j @@ -29,6 +35,10 @@ */ public static final String ACCESS_TOKEN_URL = "https://www.ai-tongue.com/backend/auth/invoker/pwd/signin"; /** + * 获取数据查询access_token + */ + public static final String DATA_TOKEN_URL = "https://www.ai-tongue.com/backend/auth/user/pwd/signin"; + /** * 会员单点登录 */ public static final String SSO_URL = "https://www.ai-tongue.com/h5/sso"; @@ -36,6 +46,10 @@ * 初始化会员信息 */ public static final String INIT_USER_URL = "https://www.ai-tongue.com/backend/check/i/secret/thirdUser/init"; + /** + * 初始化会员信息 + */ + public static final String REPORT_QUERY_URL = "https://www.ai-tongue.com/backend/devicecheck/m/report/query"; /** * 获取企业应用access_token @@ -59,28 +73,56 @@ redisCache.setCacheObject(Constants.H5AI_ACCESS_TOKEN, accessToken, expiresIn-20, TimeUnit.SECONDS); return accessToken; } + /** + * 获取企业应用access_token + * @return + */ + public String getDataToken() { + String accessToken = redisCache.getCacheObject(Constants.DATA_ACCESS_TOKEN); + if(StringUtils.hasLength(accessToken)){ + return accessToken; + } + TSysAiConfig sysAiConfig = sysAiConfigService.getById(1); + Map<String, String> params = new HashMap<>(); + params.put("loginName", sysAiConfig.getLoginName()); + params.put("loginPassword", MD5Util.md5Hex(sysAiConfig.getLoginPassword())); + String result = HttpUtils.postReq(DATA_TOKEN_URL, params,"Basic Y2xvdWRhcHA6MTIzNDU2"); + log.info("获取access_token:{}", result); + JSONObject object = JSONObject.parseObject(result); + if(object.getInteger("code") != 0){ + throw new ServiceException(object.getString("msg")); + } + JSONObject data = object.getJSONObject("data"); + accessToken = data.getString("access_token"); + Integer expiresIn = data.getInteger("expires_in"); + redisCache.setCacheObject(Constants.DATA_ACCESS_TOKEN, accessToken, expiresIn-20, TimeUnit.SECONDS); + return accessToken; + } /** * 会员单点登录 * @return */ - public R ssoLogin() { + public R<String> ssoLogin(String userId) { String accessToken = redisCache.getCacheObject(Constants.H5AI_ACCESS_TOKEN); if(!StringUtils.hasLength(accessToken)){ accessToken = getAccessToken(); } TSysAiConfig sysAiConfig = sysAiConfigService.getById(1); - String result = HttpUtils.sendGet(SSO_URL, "access_token="+accessToken - +"&encryptedThirdId="+sysAiConfig.getRsaPublicKey() - +"&signEncryptedThirdId="+sysAiConfig.getDevRsaPublicKey() - +"&capture=all&diseaseCode=C00.D00"); - log.info("会员单点登录结果:{}", result); - JSONObject object = JSONObject.parseObject(result); - if(object.getInteger("code") != 0){ - throw new ServiceException(object.getString("msg")); + String result = null; + try { + String encryptedThirdId = RsaSimpleUtil.encrypt(userId, sysAiConfig.getRsaPublicKey()); + String signEncryptedThirdId = RsaSimpleUtil.sign(encryptedThirdId, sysAiConfig.getDevRsaPrivateKey()); + result = HttpUtils.sendGet(SSO_URL, "access_token="+accessToken + +"&encryptedThirdId="+ encryptedThirdId + +"&signEncryptedThirdId="+signEncryptedThirdId + +"&capture=all&diseaseCode=C00.D00"); + } catch (Exception e) { + throw new ServiceException("会员单点登录失败:"+e.getMessage()); } - return R.ok(); + log.info("会员单点登录结果:{}", result); + return R.ok(result); } @@ -97,20 +139,47 @@ accessToken = getAccessToken(); } TSysAiConfig sysAiConfig = sysAiConfigService.getById(1); - String result = HttpUtils.sendPost(INIT_USER_URL, "devId="+sysAiConfig.getDevId() - +"&thirdId="+userId - +"&signEncryptedThirdId="+sysAiConfig.getDevRsaPublicKey() - +"&thirdName="+nickName - +"&sex="+sex - +"&birthday="+birthday,accessToken); + + JSONObject params = new JSONObject(); + params.put("devId", sysAiConfig.getDevId()); + params.put("thirdId", userId); + params.put("signEncryptedThirdId", sysAiConfig.getDevRsaPublicKey()); + params.put("thirdName", nickName); + params.put("sex", sex.toString()); + params.put("birthday", birthday); + + String result = HttpClientUtils.postFromJson(INIT_USER_URL, params.toJSONString(),"Bearer " + accessToken); log.info("会员创建初始化结果:{}", result); JSONObject object = JSONObject.parseObject(result); if(object.getInteger("code") != 0){ throw new ServiceException(object.getString("msg")); } - return R.ok(); + return R.ok(object); } - + /** + * 检测报告检索 + * @param phone + * @param start + * @param end + * @return + */ + public R<JSONObject> reportQuery(String phone,String start,String end){ + String accessToken = redisCache.getCacheObject(Constants.DATA_ACCESS_TOKEN); + if(!StringUtils.hasLength(accessToken)){ + accessToken = getDataToken(); + } + Map<String, String> params = new HashMap<>(); + params.put("phone", phone); + params.put("start", start); + params.put("end", end); + String result = HttpUtils.getReq(REPORT_QUERY_URL, params, accessToken); + log.info("检测报告检索结果:{}", result); + JSONObject object = JSONObject.parseObject(result); + if(object.getInteger("code") != 0){ + throw new ServiceException(object.getString("msg")); + } + return R.ok(object); + } } -- Gitblit v1.7.1