diff --git a/pom.xml b/pom.xml index 2a66cba..1ea53c9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - + com.ruoyi ruoyi 3.9.0 @@ -11,7 +11,7 @@ ruoyi http://www.ruoyi.vip 音乐APP后台管理系统 - + 3.9.0 UTF-8 @@ -310,6 +310,11 @@ json 20090211 + + com.aliyun + green20220302 + 2.21.1 + @@ -363,4 +368,4 @@ - \ No newline at end of file + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 32eb6f1..45b5779 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; /** * 启动程序 - * + * * @author ruoyi */ @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) @@ -16,7 +16,7 @@ public class RuoYiApplication { // System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(RuoYiApplication.class, args); - System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" + + System.out.println("(♥◠‿◠)ノ゙ 启动成功 ლ(´ڡ`ლ)゙ \n" + " .-------. ____ __ \n" + " | _ _ \\ \\ \\ / / \n" + " | ( ' ) | \\ _. / ' \n" + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/client/ShareInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/client/ShareInfoController.java index c9a5036..dd30c03 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/client/ShareInfoController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/client/ShareInfoController.java @@ -8,6 +8,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.config.TextModerationPlus; import com.ruoyi.system.service.IShareInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -15,10 +16,11 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; /** * 【请填写功能名称】Controller - * + * * @author ruoyi * @date 2025-07-19 */ @@ -28,6 +30,8 @@ public class ShareInfoController extends BaseController { @Autowired private IShareInfoService shareInfoService; + @Autowired + private TextModerationPlus textModerationPlus; /** * 查询【请填写功能名称】列表 @@ -68,6 +72,10 @@ public class ShareInfoController extends BaseController public AjaxResult add(@RequestBody ShareInfo shareInfo) { Long userId = SecurityUtils.getUserId(); + boolean result = textModerationPlus.textModeration(shareInfo.getShareDecs()); + if (!result){ + return warn("内容违规"); + } shareInfo.setUserId(userId); return toAjax(shareInfoService.insertShareInfo(shareInfo)); } @@ -102,4 +110,15 @@ public class ShareInfoController extends BaseController { return toAjax(shareInfoService.increaseShareCount(id)); } + + // 分享内容检查 + @PostMapping("/textModeration") + public AjaxResult textModeration(@RequestBody Map params) { + String content = params.get("content"); + if (content != null && !content.isEmpty()){ + boolean result = textModerationPlus.textModeration(content); + return result ? success() : warn("内容违规"); + } + return error("文本不能为空"); + } } diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 1c4a9f8..09a6e26 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -52,13 +52,13 @@ org.apache.commons commons-lang3 - + com.fasterxml.jackson.core jackson-databind - + com.alibaba.fastjson2 @@ -198,6 +198,10 @@ org.json json + + com.aliyun + green20220302 + - \ No newline at end of file + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/config/TextModerationPlus.java b/ruoyi-system/src/main/java/com/ruoyi/system/config/TextModerationPlus.java new file mode 100644 index 0000000..d6eba46 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/config/TextModerationPlus.java @@ -0,0 +1,97 @@ +package com.ruoyi.system.config; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.aliyun.green20220302.Client; +import com.aliyun.green20220302.models.TextModerationPlusRequest; +import com.aliyun.green20220302.models.TextModerationPlusResponse; +import com.aliyun.green20220302.models.TextModerationPlusResponseBody; +import com.aliyun.teaopenapi.models.Config; +import com.ruoyi.common.constant.AliKeyConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.Objects; + +/** + * 描述: + * + * @author MXP by 2025/11/4 + */ +@Component +public class TextModerationPlus { + + private static final Logger log = LoggerFactory.getLogger(TextModerationPlus.class); + + public boolean textModeration(String text) { + Config config = new Config(); + /** + * 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 + * 常见获取环境变量方式: + * 方式一: + * 获取RAM用户AccessKey ID:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); + * 获取RAM用户AccessKey Secret:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); + * 方式二: + * 获取RAM用户AccessKey ID:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID"); + * 获取RAM用户AccessKey Secret:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); + */ + config.setAccessKeyId(AliKeyConfig.ACCESS_KEY_ID); + config.setAccessKeySecret(AliKeyConfig.ACCESS_KEY_SECRET); + //接入区域和地址请根据实际情况修改 + config.setRegionId("cn-shanghai"); + config.setEndpoint("green-cip.cn-shanghai.aliyuncs.com"); + //读取时超时时间,单位毫秒(ms)。 + config.setReadTimeout(6000); + //连接时超时时间,单位毫秒(ms)。 + config.setConnectTimeout(3000); + //设置http代理。 + //config.setHttpProxy("http://xx.xx.xx.xx:xxxx"); + //设置https代理。 + //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx"); + Client client; + try { + client = new Client(config); + } catch (Exception e) { + throw new RuntimeException(e); + } + + JSONObject serviceParameters = new JSONObject(); + serviceParameters.put("content", text); + + log.info("serviceParameters: {}", serviceParameters); + + TextModerationPlusRequest textModerationPlusRequest = new TextModerationPlusRequest(); + // 检测类型 + textModerationPlusRequest.setService("comment_detection_pro"); + textModerationPlusRequest.setServiceParameters(serviceParameters.toJSONString()); + + try { + TextModerationPlusResponse response = client.textModerationPlus(textModerationPlusRequest); + if (response.getStatusCode() == 200) { + TextModerationPlusResponseBody result = response.getBody(); + System.out.println(JSON.toJSONString(result)); + System.out.println("requestId = " + result.getRequestId()); + System.out.println("code = " + result.getCode()); + System.out.println("msg = " + result.getMessage()); + Integer code = result.getCode(); + if (200 == code) { + TextModerationPlusResponseBody.TextModerationPlusResponseBodyData data = result.getData(); + log.info("data: {}", JSONUtil.toJsonStr(data)); + if (data != null && Objects.equals(data.getRiskLevel(), "none")){ + return true; + } + } else { + System.out.println("text moderation not success. code:" + code); + } + } else { + System.out.println("response not success. status:" + response.getStatusCode()); + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppVersionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppVersionServiceImpl.java index 859d6b4..316641e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppVersionServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppVersionServiceImpl.java @@ -11,19 +11,19 @@ import java.util.List; /** * 应用版本更新信息Service业务层处理 - * + * * @author ruoyi * @date 2025-09-21 */ @Service -public class AppVersionServiceImpl implements IAppVersionService +public class AppVersionServiceImpl implements IAppVersionService { @Autowired private AppVersionMapper appVersionMapper; /** * 查询应用版本更新信息 - * + * * @param id 应用版本更新信息主键 * @return 应用版本更新信息 */ @@ -35,7 +35,7 @@ public class AppVersionServiceImpl implements IAppVersionService /** * 查询应用版本更新信息列表 - * + * * @param appVersion 应用版本更新信息 * @return 应用版本更新信息 */ @@ -47,7 +47,7 @@ public class AppVersionServiceImpl implements IAppVersionService /** * 新增应用版本更新信息 - * + * * @param appVersion 应用版本更新信息 * @return 结果 */ @@ -61,7 +61,7 @@ public class AppVersionServiceImpl implements IAppVersionService /** * 修改应用版本更新信息 - * + * * @param appVersion 应用版本更新信息 * @return 结果 */ @@ -74,7 +74,7 @@ public class AppVersionServiceImpl implements IAppVersionService /** * 批量删除应用版本更新信息 - * + * * @param ids 需要删除的应用版本更新信息主键 * @return 结果 */ @@ -86,7 +86,7 @@ public class AppVersionServiceImpl implements IAppVersionService /** * 删除应用版本更新信息信息 - * + * * @param id 应用版本更新信息主键 * @return 结果 */ @@ -104,6 +104,8 @@ public class AppVersionServiceImpl implements IAppVersionService @Override public boolean checkVersionByChannel(AppVersion appVersion) { AppVersion lastAppVersion = appVersionMapper.selectLastVersionByChannel(appVersion.getChannel()); - return appVersion.getVersionCode() > lastAppVersion.getVersionCode(); + //if (lastAppVersion == null) + // > lastAppVersion.getVersionCode(); + return true; } }