xuhy
11 小时以前 69a0e318bb6ce1efec4d67d8751b7574b37ba49e
AI对接
14个文件已修改
2个文件已添加
365 ■■■■■ 已修改文件
ruoyi-admin/pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysActivityMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysProductIntroductionMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TSysAiConfig.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TSysActivityService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TSysProductIntroductionService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysActivityServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysProductIntroductionServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/utils/util/HttpClientUtils.java 221 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/utils/util/MD5Util.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TSysActivityMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TSysProductIntroductionMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/pom.xml
@@ -173,7 +173,6 @@
            <artifactId>thumbnailator</artifactId>
            <version>0.4.8</version>
        </dependency>
    </dependencies>
    <build>
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));
    }
    /**
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));
    }
    /**
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>
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());
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);
}
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);
}
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;
}
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);
}
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);
}
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;
    }
}
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;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/utils/util/HttpClientUtils.java
New file
@@ -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;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/utils/util/MD5Util.java
New file
@@ -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);
    }
}
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>
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>