From 69a0e318bb6ce1efec4d67d8751b7574b37ba49e Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期二, 23 九月 2025 18:07:13 +0800 Subject: [PATCH] AI对接 --- ruoyi-system/src/main/resources/mapper/system/TSysActivityMapper.xml | 19 ++ ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/service/TSysProductIntroductionService.java | 6 ruoyi-admin/pom.xml | 1 ruoyi-system/src/main/java/com/ruoyi/system/service/TSysActivityService.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysProductIntroductionServiceImpl.java | 7 + ruoyi-system/src/main/java/com/ruoyi/system/model/TSysAiConfig.java | 12 + ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysActivityMapper.java | 8 + ruoyi-system/src/main/resources/mapper/system/TSysProductIntroductionMapper.xml | 19 ++ ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysProductIntroductionMapper.java | 8 + ruoyi-common/pom.xml | 4 ruoyi-system/src/main/java/com/ruoyi/system/utils/util/HttpClientUtils.java | 221 +++++++++++++++++++++++++++++++ ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java | 2 ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysActivityServiceImpl.java | 7 + ruoyi-system/src/main/java/com/ruoyi/system/utils/util/MD5Util.java | 36 +++++ 16 files changed, 356 insertions(+), 9 deletions(-) diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 8f75533..21530ff 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -173,7 +173,6 @@ <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency> - </dependencies> <build> diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java index 6272507..8a47196 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java @@ -45,7 +45,7 @@ @ApiOperation(value = "获取热门活动分页列表") @PostMapping(value = "/pageList") public R<PageInfo<TSysActivity>> pageList(@RequestBody TSysActivityQuery query) { - return R.ok(sysActivityService.pageList(query)); + return R.ok(sysActivityService.pageListApp(query)); } /** diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java index c0b9f22..a2d1793 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java @@ -45,11 +45,7 @@ @ApiOperation(value = "获取产品介绍分页列表") @PostMapping(value = "/pageList") public R<PageInfo<TSysProductIntroduction>> pageList(@RequestBody TSysProductIntroductionQuery query) { - Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); - if(roleType == 5){ - query.setRoleType(roleType); - } - return R.ok(sysProductIntroductionService.pageList(query)); + return R.ok(sysProductIntroductionService.pageListApp(query)); } /** diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 99ab005..3324f0a 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -210,6 +210,10 @@ <artifactId>javax.mail</artifactId> <version>1.6.2</version> <!-- 请检查是否有更新的版本 --> </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpmime</artifactId> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java index 9015708..f4a209e 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java @@ -36,8 +36,7 @@ LoginUser loginUser = tokenService.getLoginUser(request); LoginUserApplet applet = tokenService.getLoginUserApplet(request); if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())|| - StringUtils.isNotNull(applet)) - { + StringUtils.isNotNull(applet)){ if (StringUtils.isNotNull(loginUser)){ tokenService.verifyToken(loginUser); UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities()); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysActivityMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysActivityMapper.java index 0ca58b2..3ca60cb 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysActivityMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysActivityMapper.java @@ -26,4 +26,12 @@ * @return */ List<TSysActivity> pageList(@Param("query") TSysActivityQuery query, @Param("pageInfo")PageInfo<TSysActivity> pageInfo); + /** + * 分页查询 + * + * @param query + * @param pageInfo + * @return + */ + List<TSysActivity> pageListApp(@Param("query") TSysActivityQuery query, @Param("pageInfo")PageInfo<TSysActivity> pageInfo); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysProductIntroductionMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysProductIntroductionMapper.java index a43b80a..637bf5d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysProductIntroductionMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysProductIntroductionMapper.java @@ -26,4 +26,12 @@ * @return */ List<TSysProductIntroduction> pageList(@Param("query") TSysProductIntroductionQuery query, @Param("pageInfo")PageInfo<TSysProductIntroduction> pageInfo); + /** + * 分页查询 + * + * @param query + * @param pageInfo + * @return + */ + List<TSysProductIntroduction> pageListApp(@Param("query") TSysProductIntroductionQuery query, @Param("pageInfo")PageInfo<TSysProductIntroduction> pageInfo); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysAiConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysAiConfig.java index 690b30a..c06786c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysAiConfig.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysAiConfig.java @@ -50,5 +50,17 @@ @TableField("aesKey") private String aesKey; + @ApiModelProperty(value = "应用私钥") + @TableField("devRsaPrivateKey") + private String devRsaPrivateKey; + + @ApiModelProperty(value = "账号") + @TableField("loginName") + private String loginName; + + @ApiModelProperty(value = "密码") + @TableField("loginPassword") + private String loginPassword; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysActivityService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysActivityService.java index 61760ba..b0a6a77 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysActivityService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysActivityService.java @@ -21,4 +21,10 @@ * @return */ PageInfo<TSysActivity> pageList(TSysActivityQuery query); + /** + * 获取热门活动分页列表 + * @param query + * @return + */ + PageInfo<TSysActivity> pageListApp(TSysActivityQuery query); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysProductIntroductionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysProductIntroductionService.java index 0a885ea..1e978e6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysProductIntroductionService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysProductIntroductionService.java @@ -21,4 +21,10 @@ * @return */ PageInfo<TSysProductIntroduction> pageList(TSysProductIntroductionQuery query); + /** + * 获取产品介绍分页列表 + * @param query + * @return + */ + PageInfo<TSysProductIntroduction> pageListApp(TSysProductIntroductionQuery query); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysActivityServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysActivityServiceImpl.java index 6aa84bf..113ab49 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysActivityServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysActivityServiceImpl.java @@ -29,4 +29,11 @@ pageInfo.setRecords(list); return pageInfo; } + @Override + public PageInfo<TSysActivity> pageListApp(TSysActivityQuery query) { + PageInfo<TSysActivity> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TSysActivity> list = this.baseMapper.pageListApp(query,pageInfo); + pageInfo.setRecords(list); + return pageInfo; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysProductIntroductionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysProductIntroductionServiceImpl.java index 5597be5..7915b86 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysProductIntroductionServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysProductIntroductionServiceImpl.java @@ -29,4 +29,11 @@ pageInfo.setRecords(list); return pageInfo; } + @Override + public PageInfo<TSysProductIntroduction> pageListApp(TSysProductIntroductionQuery query) { + PageInfo<TSysProductIntroduction> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TSysProductIntroduction> list = this.baseMapper.pageListApp(query,pageInfo); + pageInfo.setRecords(list); + return pageInfo; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/HttpClientUtils.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/HttpClientUtils.java new file mode 100644 index 0000000..103297c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/HttpClientUtils.java @@ -0,0 +1,221 @@ +package com.ruoyi.system.utils.util; + +import com.google.common.collect.Lists; +import com.ruoyi.common.exception.ServiceException; +import lombok.extern.slf4j.Slf4j; +import org.apache.http.Consts; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +public class HttpClientUtils { + + //请求超时时间 + private final static Integer TIME_OUT = 30000; + //http连接池 + private static volatile PoolingHttpClientConnectionManager poolingHttpClientConnectionManager; + //请求配置 + private static RequestConfig requestConfig; + + public static PoolingHttpClientConnectionManager getPoolingHttpClientConnectionManager() { + if (poolingHttpClientConnectionManager == null) { + synchronized (HttpClientUtils.class) { + if (poolingHttpClientConnectionManager == null) { + poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(); + //连接池最大连接数 + poolingHttpClientConnectionManager.setMaxTotal(1024); + //每个路由最大连接数 + poolingHttpClientConnectionManager.setDefaultMaxPerRoute(64); + //配置请求的超时设置 + requestConfig = + RequestConfig.custom().setConnectionRequestTimeout(TIME_OUT).setConnectTimeout(TIME_OUT).setSocketTimeout(TIME_OUT).build(); + } + } + } + return poolingHttpClientConnectionManager; + } + + public static CloseableHttpClient getHttpClient() { + return HttpClients.custom().setConnectionManager(getPoolingHttpClientConnectionManager()).setDefaultRequestConfig(requestConfig).build(); + } + + /** + * 请求发送执行 + * + * @param httpMethd + * @return + */ + public static String registRequest(HttpUriRequest httpMethd) { + CloseableHttpClient httpClient = getHttpClient(); + try (CloseableHttpResponse httpResponse = httpClient.execute(httpMethd, HttpClientContext.create())) { + int statusCode = httpResponse.getStatusLine().getStatusCode(); + if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + log.error("响应失败 statusCode {}", statusCode); + log.error("============响应失败 response {}", EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8)); + httpMethd.abort(); + } + log.debug("响应成功 statusCode {}", statusCode); + String response = EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8); + log.debug("响应成功 response {}", response); + return response; + } catch (Exception e) { + throw new RuntimeException("请求失败", e); + } + } + + public static List<BasicNameValuePair> toPairs(Map<String, Object> params) { + List<BasicNameValuePair> pairs = Lists.newArrayList(); + if (params != null && !params.isEmpty()) { + pairs = params.entrySet().stream().map(entry -> new BasicNameValuePair(entry.getKey(), + entry.getValue().toString())).collect(Collectors.toList()); + } + return pairs; + } + + /** + * get url请求 + * + * @param url + * @return + */ + public static String get(String url, String token) { + HttpGet request = new HttpGet(); + request.setHeader("Authorization", token); + try { + request.setURI(new URI(url)); + return registRequest(request); + } catch (Exception e) { + log.error("<<<<<<<<<<<<<<<请求失败:{}", e.getMessage()); + } + return null; + } + + /*** + * get请求(带参数) + * @param url + * @return String + */ + public static String getReq(String url, Map<String, String> params) { + String result = null; + try { + URIBuilder uriBuilder = new URIBuilder(url); + Iterator maplist = params.entrySet().iterator(); + while (maplist.hasNext()) { + Map.Entry<String, String> map = (Map.Entry<String, String>) maplist.next(); + uriBuilder.addParameter(map.getKey(), map.getValue()); + } + CloseableHttpClient client = HttpClientBuilder.create().build(); + HttpGet get = new HttpGet(uriBuilder.build()); + get.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36"); + HttpResponse response = client.execute(get); + result = EntityUtils.toString(response.getEntity(), "UTF-8"); + + } catch (URISyntaxException e) { + e.printStackTrace(); + } catch (ClientProtocolException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return result; + } + + /** + * PSOT URL方式提交 + * + * @param url 请求url + * @param params 请求参数 + * @return + */ + public static String postFromUrl(String url, Map<String, Object> params) { + HttpPost request = new HttpPost(url); + request.setEntity(new UrlEncodedFormEntity(toPairs(params), Consts.UTF_8)); + try { + return registRequest(request); + } catch (Exception e) { + log.error("请求失败", e); + } + return null; + } + + /** + * PSOT JSON方式提交 + * + * @param url 请求url + * @param params json串 + * @return + */ + public static String postFromJson(String url, String params, String token) { + HttpPost request = new HttpPost(url); + request.setHeader("Content-type", "application/json"); + request.setHeader("Accept", "application/json"); + request.setHeader("Authorization", token); + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(12000) + .setConnectTimeout(8000) + .build(); + request.setConfig(requestConfig); + StringEntity entity = new StringEntity(params, StandardCharsets.UTF_8); + entity.setContentType("application/json"); + request.setEntity(entity); + try { + return registRequest(request); + } catch (Exception e) { + log.info("<<<<<<<<<<<http请求失败:{}", e.getMessage()); + throw new ServiceException("<<<<<<<<<<<http请求失败<<<<<<<<<<<<<<"); + } + } + + /** + * PSOT JSON方式提交,无token + * + * @param url 请求url + * @param params json串 + * @return + */ + public static String postFrom(String url, String params) { + HttpPost request = new HttpPost(url); + request.setHeader("Content-type", "application/json"); + request.setHeader("Accept", "application/json"); + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(8000) + .setConnectTimeout(6000) + .build(); + request.setConfig(requestConfig); + StringEntity entity = new StringEntity(params, StandardCharsets.UTF_8); + entity.setContentType("application/json"); + request.setEntity(entity); + try { + return registRequest(request); + } catch (Exception e) { + log.error("<<<<<<<<<<<<<<<请求失败:{}", e.getMessage()); + } + return null; + } +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/MD5Util.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/MD5Util.java new file mode 100644 index 0000000..b4fad9a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/MD5Util.java @@ -0,0 +1,36 @@ +package com.ruoyi.system.utils.util; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class MD5Util { + + // 将字节数组转换为十六进制字符串 + private static String bytesToHex(byte[] bytes) { + StringBuilder hexString = new StringBuilder(); + for (byte b : bytes) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) hexString.append('0'); + hexString.append(hex); + } + return hexString.toString(); + } + + // 计算字符串的MD5值,返回十六进制字符串 + public static String md5Hex(String message) { + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] digest = md.digest(message.getBytes()); + return bytesToHex(digest); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); // 不应该发生,因为"MD5"是一个标准的算法名称 + } + } + + public static void main(String[] args) { + String originalString = "Hello, World!"; + String md5Result = md5Hex(originalString); + System.out.println("Original: " + originalString); + System.out.println("MD5: " + md5Result); + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/TSysActivityMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TSysActivityMapper.xml index dac5365..313f876 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TSysActivityMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TSysActivityMapper.xml @@ -45,5 +45,24 @@ </where> ORDER BY create_time DESC </select> + <select id="pageListApp" resultType="com.ruoyi.system.model.TSysActivity"> + SELECT + <include refid="Base_Column_List"/> + FROM t_sys_activity + <where> + <if test="query.activityName != null and query.activityName != ''"> + AND activity_name LIKE concat('%',#{query.activityName},'%') + </if> + <if test="query.showType != null"> + AND show_type = #{query.showType} + </if> + <if test="query.status != null"> + AND status = #{query.status} + </if> + AND show_type in (1,3) + AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + </where> + ORDER BY create_time DESC + </select> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/TSysProductIntroductionMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TSysProductIntroductionMapper.xml index fb4c874..08d0756 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TSysProductIntroductionMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TSysProductIntroductionMapper.xml @@ -45,5 +45,24 @@ </where> ORDER BY create_time DESC </select> + <select id="pageListApp" resultType="com.ruoyi.system.model.TSysProductIntroduction"> + SELECT + <include refid="Base_Column_List"/> + FROM t_sys_product_introduction + <where> + <if test="query.productName != null and query.productName != ''"> + AND product_name LIKE concat('%',#{query.productName},'%') + </if> + <if test="query.showType != null"> + AND show_type = #{query.showType} + </if> + <if test="query.status != null"> + AND status = #{query.status} + </if> + AND show_type in (1,3) + AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + </where> + ORDER BY create_time DESC + </select> </mapper> -- Gitblit v1.7.1