update 文档管理html 文本翻译改为腾讯云机器翻译服务器api,优化翻译逻辑,减少翻译量

This commit is contained in:
yyb 2025-08-12 17:09:06 +08:00
parent 95573662ff
commit 94899a4baa
8 changed files with 297 additions and 144 deletions

View File

@ -155,6 +155,19 @@
<version>3.3.0</version> <version>3.3.0</version>
</dependency> </dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.16.1</version>
</dependency>
<!-- 版本在maven生效需要时间如获取不对应的版本可以调低版本号-->
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-tmt</artifactId>
<version>3.1.1297</version>
</dependency>
</dependencies> </dependencies>

View File

@ -93,7 +93,7 @@ public class ManageBroadcastServiceImpl extends ServiceImpl<ManageBroadcastMappe
}else{ }else{
collect = list.stream().map(broadcast -> { collect = list.stream().map(broadcast -> {
//如果英文为null需要翻译并保存一下 //如果英文为null需要翻译并保存一下
if("".equals(broadcast.getContentEn()) || ("".equals(broadcast.getButtonContentEn()) && "".equals(broadcast.getButtonContent()))){ if("".equals(broadcast.getContentEn()) || ("".equals(broadcast.getButtonContentEn()) && !"".equals(broadcast.getButtonContent()))){
broadcast.setButtonContentEn(TranslateUtils.translate(broadcast.getButtonContent(), "zh", "en")); broadcast.setButtonContentEn(TranslateUtils.translate(broadcast.getButtonContent(), "zh", "en"));
broadcast.setContentEn(TranslateUtils.translate(broadcast.getContent(), "zh", "en")); broadcast.setContentEn(TranslateUtils.translate(broadcast.getContent(), "zh", "en"));
manageBroadcastMapper.updateById(broadcast); manageBroadcastMapper.updateById(broadcast);

View File

@ -7,6 +7,7 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.m2pool.common.core.Result.R; import com.m2pool.common.core.Result.R;
import com.m2pool.common.core.constant.HttpStatus; import com.m2pool.common.core.constant.HttpStatus;
import com.m2pool.common.core.utils.StringUtils;
import com.m2pool.common.core.web.page.TableDataInfo; import com.m2pool.common.core.web.page.TableDataInfo;
import com.m2pool.common.security.utils.SecurityUtils; import com.m2pool.common.security.utils.SecurityUtils;
import com.m2pool.manage.constant.CountryConstant; import com.m2pool.manage.constant.CountryConstant;
@ -95,41 +96,36 @@ public class ManageDocumentsServiceImpl extends ServiceImpl<ManageDocumentsMappe
String fromCountry = CountryConstant.ZH; String fromCountry = CountryConstant.ZH;
String toCountry = CountryConstant.EN; String toCountry = CountryConstant.EN;
ManageDocuments build; ManageDocuments build;
//英文转中文 if (manageDocumentVo.getTitle().isEmpty()){
if (CountryConstant.EN.equals(manageDocumentVo.getLang())){ return R.fail("标题不能为空");
build = ManageDocuments.builder()
.titleEn(manageDocumentVo.getTitle())
.subTitleEn(manageDocumentVo.getSubTitle())
.contentEn(manageDocumentVo.getContent())
.content(TranslateUtils.translate(manageDocumentVo.getContent(), toCountry, fromCountry))
.title(TranslateUtils.translate(manageDocumentVo.getTitle(), toCountry, fromCountry))
.subTitle(TranslateUtils.translate(manageDocumentVo.getSubTitle(), toCountry, fromCountry))
.type(manageDocumentVo.getType())
.childType(manageDocumentVo.getChildType())
.createUser(SecurityUtils.getUsername())
.updateUser(SecurityUtils.getUsername())
.articleUrl(manageDocumentVo.getArticleUrl())
.titleUrl(manageDocumentVo.getTitleUrl())
.coin(manageDocumentVo.getCoin())
.build();
}else{
//中文转英文
build = ManageDocuments.builder()
.title(manageDocumentVo.getTitle())
.subTitle(manageDocumentVo.getSubTitle())
.content(manageDocumentVo.getContent())
.type(manageDocumentVo.getType())
.contentEn(TranslateUtils.translate(manageDocumentVo.getContent(), fromCountry, toCountry))
.titleEn(TranslateUtils.translate(manageDocumentVo.getTitle(), fromCountry, toCountry))
.subTitleEn(TranslateUtils.translate(manageDocumentVo.getSubTitle(), fromCountry, toCountry))
.childType(manageDocumentVo.getChildType())
.articleUrl(manageDocumentVo.getArticleUrl())
.titleUrl(manageDocumentVo.getTitleUrl())
.createUser(SecurityUtils.getUsername())
.updateUser(SecurityUtils.getUsername())
.coin(manageDocumentVo.getCoin())
.build();
} }
if (manageDocumentVo.getType() == null){
return R.fail("文档类型不能为空");
}
if (manageDocumentVo.getTitleUrl() != null && manageDocumentVo.getTitleUrl().length() >= 256){
return R.fail("标题图片长度不能大于255");
}
if (manageDocumentVo.getContent().length() >= 50000){
return R.fail("内容长度大于50000,请确定传递的html格式是否正确");
}
//中文转英文
build = ManageDocuments.builder()
.title(manageDocumentVo.getTitle())
.subTitle(manageDocumentVo.getSubTitle())
.content(manageDocumentVo.getContent())
.type(manageDocumentVo.getType())
.contentEn(TranslateUtils.translateHtml(manageDocumentVo.getContent(), fromCountry, toCountry))
.titleEn(TranslateUtils.tencentTextTranslate(manageDocumentVo.getTitle(), fromCountry, toCountry))
.subTitleEn(TranslateUtils.tencentTextTranslate(manageDocumentVo.getSubTitle(),fromCountry, toCountry))
.childType(manageDocumentVo.getChildType())
.articleUrl(manageDocumentVo.getArticleUrl())
.titleUrl(manageDocumentVo.getTitleUrl())
.createUser(SecurityUtils.getUsername())
.updateUser(SecurityUtils.getUsername())
.coin(manageDocumentVo.getCoin())
.build();
int insert = manageDocumentsMapper.insert(build); int insert = manageDocumentsMapper.insert(build);
//存入mongodb 方便以后如果mysql查询限制时切换 //存入mongodb 方便以后如果mysql查询限制时切换
mongoTemplate.save(build, "documents"); mongoTemplate.save(build, "documents");
@ -151,68 +147,45 @@ public class ManageDocumentsServiceImpl extends ServiceImpl<ManageDocumentsMappe
@Override @Override
public R<String> updateDocument(ManageDocumentVo manageDocumentVo) { public R<String> updateDocument(ManageDocumentVo manageDocumentVo) {
String fromCountry = CountryConstant.ZH; String fromCountry = CountryConstant.ZH;
String toCountry = CountryConstant.EN; String toCountry = CountryConstant.EN;
ManageDocuments build; ManageDocuments build;
Update update = new Update(); if (manageDocumentVo.getTitleUrl() != null && manageDocumentVo.getTitleUrl().length() >= 256){
//英文转中文 return R.fail("标题图片地址字符数不能大于255");
if (CountryConstant.EN.equals(manageDocumentVo.getLang())){
build = ManageDocuments.builder()
.id(manageDocumentVo.getId())
.titleEn(manageDocumentVo.getTitle())
.subTitleEn(manageDocumentVo.getSubTitle())
.contentEn(manageDocumentVo.getContent())
.content(TranslateUtils.translate(manageDocumentVo.getContent(), toCountry, fromCountry))
.title(TranslateUtils.translate(manageDocumentVo.getTitle(), toCountry, fromCountry))
.subTitle(TranslateUtils.translate(manageDocumentVo.getSubTitle(), toCountry, fromCountry))
.childType(manageDocumentVo.getChildType())
.articleUrl(manageDocumentVo.getArticleUrl())
.titleUrl(manageDocumentVo.getTitleUrl())
.createUser(SecurityUtils.getUsername())
.updateUser(SecurityUtils.getUsername())
.type(manageDocumentVo.getType())
.coin(manageDocumentVo.getCoin())
.build();
// 英文转中文
update.set("titleEn", manageDocumentVo.getTitle())
.set("subTitleEn", manageDocumentVo.getSubTitle())
.set("contentEn", manageDocumentVo.getContent())
.set("articleUrl", manageDocumentVo.getArticleUrl())
.set("titleUrl", manageDocumentVo.getTitleUrl())
.set("content", TranslateUtils.translate(manageDocumentVo.getContent(), toCountry, fromCountry))
.set("title", TranslateUtils.translate(manageDocumentVo.getTitle(), toCountry, fromCountry))
.set("subTitle", TranslateUtils.translate(manageDocumentVo.getSubTitle(), toCountry, fromCountry));
}else{
//中文转英文
build = ManageDocuments.builder()
.id(manageDocumentVo.getId())
.title(manageDocumentVo.getTitle())
.subTitle(manageDocumentVo.getSubTitle())
.content(manageDocumentVo.getContent())
.contentEn(TranslateUtils.translate(manageDocumentVo.getContent(), fromCountry, toCountry))
.titleEn(TranslateUtils.translate(manageDocumentVo.getTitle(), fromCountry, toCountry))
.subTitleEn(TranslateUtils.translate(manageDocumentVo.getSubTitle(), fromCountry, toCountry))
.articleUrl(manageDocumentVo.getArticleUrl())
.titleUrl(manageDocumentVo.getTitleUrl())
.childType(manageDocumentVo.getChildType())
.createUser(SecurityUtils.getUsername())
.updateUser(SecurityUtils.getUsername())
.type(manageDocumentVo.getType())
.coin(manageDocumentVo.getCoin())
.build();
// 中文转英文
update.set("title", manageDocumentVo.getTitle())
.set("subTitle", manageDocumentVo.getSubTitle())
.set("content", manageDocumentVo.getContent())
.set("articleUrl", manageDocumentVo.getArticleUrl())
.set("titleUrl", manageDocumentVo.getTitleUrl())
.set("contentEn", TranslateUtils.translate(manageDocumentVo.getContent(), fromCountry, toCountry))
.set("titleEn", TranslateUtils.translate(manageDocumentVo.getTitle(), fromCountry, toCountry))
.set("subTitleEn", TranslateUtils.translate(manageDocumentVo.getSubTitle(), fromCountry, toCountry));
} }
Update update = new Update();
update.set("childType", manageDocumentVo.getChildType()) String content = StringUtils.isEmpty(manageDocumentVo.getContent()) ? "" : TranslateUtils.translateHtml(manageDocumentVo.getContent(), fromCountry, toCountry);
String title = StringUtils.isEmpty(manageDocumentVo.getTitle()) ? "" : TranslateUtils.tencentTextTranslate(manageDocumentVo.getTitle(), fromCountry, toCountry);
String subTitle = StringUtils.isEmpty(manageDocumentVo.getSubTitle()) ? "" : TranslateUtils.tencentTextTranslate(manageDocumentVo.getSubTitle(), fromCountry, toCountry);
//中文转英文
build = ManageDocuments.builder()
.id(manageDocumentVo.getId())
.title(manageDocumentVo.getTitle())
.subTitle(manageDocumentVo.getSubTitle())
.content(manageDocumentVo.getContent())
.contentEn(content)
.titleEn(title)
.subTitleEn(subTitle)
.articleUrl(manageDocumentVo.getArticleUrl())
.titleUrl(manageDocumentVo.getTitleUrl())
.childType(manageDocumentVo.getChildType())
.createUser(SecurityUtils.getUsername())
.updateUser(SecurityUtils.getUsername())
.type(manageDocumentVo.getType())
.coin(manageDocumentVo.getCoin())
.build();
// 中文转英文
update.set("title", manageDocumentVo.getTitle())
.set("subTitle", manageDocumentVo.getSubTitle())
.set("content", manageDocumentVo.getContent())
.set("articleUrl", manageDocumentVo.getArticleUrl())
.set("titleUrl", manageDocumentVo.getTitleUrl())
.set("contentEn", content)
.set("titleEn", title)
.set("subTitleEn", subTitle)
.set("childType", manageDocumentVo.getChildType())
.set("createUser", SecurityUtils.getUsername()) .set("createUser", SecurityUtils.getUsername())
.set("updateUser", SecurityUtils.getUsername()) .set("updateUser", SecurityUtils.getUsername())
.set("type", manageDocumentVo.getType()); .set("type", manageDocumentVo.getType());
@ -220,7 +193,6 @@ public class ManageDocumentsServiceImpl extends ServiceImpl<ManageDocumentsMappe
Query query = new Query(Criteria.where("id").is(manageDocumentVo.getId())); Query query = new Query(Criteria.where("id").is(manageDocumentVo.getId()));
mongoTemplate.updateFirst(query, update, "documents"); mongoTemplate.updateFirst(query, update, "documents");
int insert = manageDocumentsMapper.updateById(build); int insert = manageDocumentsMapper.updateById(build);
if (insert > 0){ if (insert > 0){
return R.success("修改文章成功"); return R.success("修改文章成功");

File diff suppressed because one or more lines are too long

View File

@ -45,10 +45,10 @@
coin = #{coin} AND `user` = #{user} coin = #{coin} AND `user` = #{user}
<choose> <choose>
<when test="startDate != null and endDate != null"> <when test="startDate != null and endDate != null">
and `date` >= #{startDate} and `date`<![CDATA[ <= ]]> #{endDate} and `should_out_date` >= #{startDate} and `should_out_date`<![CDATA[ <= ]]> #{endDate}
</when> </when>
<otherwise> <otherwise>
and `date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH) and `should_out_date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
</otherwise> </otherwise>
</choose> </choose>
</where> </where>

View File

@ -401,7 +401,6 @@ public class PoolServiceImpl implements PoolService {
List<PowerLineDto> list = poolMapper.getHourNetPowerList(pool.getCoin()); List<PowerLineDto> list = poolMapper.getHourNetPowerList(pool.getCoin());
System.out.println("list----yyb-1"+list);
if("1h".equals(vo.getInterval()) || "rt".equals(vo.getInterval())){ if("1h".equals(vo.getInterval()) || "rt".equals(vo.getInterval())){
PageHelper.clearPage(); PageHelper.clearPage();
//30m数据 限制条数为最近1天的条数 即1*48=48 //30m数据 限制条数为最近1天的条数 即1*48=48

View File

@ -1,5 +1,6 @@
package com.m2pool.pool.utils; package com.m2pool.pool.utils;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.m2pool.common.core.utils.DateUtils; import com.m2pool.common.core.utils.DateUtils;
@ -41,6 +42,37 @@ public class SocketDemo {
//Date endDate = DateUtils.getPreviousHalfHourOrFullHour(new Date()); //Date endDate = DateUtils.getPreviousHalfHourOrFullHour(new Date());
//Date startDate = DateUtils.getOneMonthAgo(endDate); //Date startDate = DateUtils.getOneMonthAgo(endDate);
//System.out.println(startDate+" "+endDate); //System.out.println(startDate+" "+endDate);
String textToTranslate = "<p _msthidden=\"3\"><span style=\"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\" _msttexthash=\"84072040\" _msthash=\"1610\">API 中 coin 字段可目前仅取值支持nexa</span></p><p _msthidden=\"3\"><span id=\"step\"></span></p><h3 style=\"text-align: start;\" _msttexthash=\"11282648\" _msthash=\"1609\">矿池信息</h3><h3 style=\"text-align: start;\" _msthidden=\"3\"><span style=\"font-size: 16px;\" _msttexthash=\"11308739\" _msthash=\"1608\">公共结构</span></h3><p style=\"text-align: start;\" _msthidden=\"3\"><strong _msttexthash=\"7939243\" _msthash=\"1607\">哈希率</strong></p><p style=\"text-align: start;\" _msttexthash=\"11425713\" _msthash=\"1606\">算力数据</p><p style=\"text-align: start;\" _msthidden=\"3\"><br/></p><table style=\"width: auto;\" _msthidden=\"3\"><tbody><tr><th colspan=\"1\" rowspan=\"1\" width=\"120\" _msttexthash=\"5204511\" _msthash=\"1596\">名称</th><th colspan=\"1\" rowspan=\"1\" width=\"99.03\" _msttexthash=\"5230641\" _msthash=\"1597\">类型</th><th colspan=\"1\" rowspan=\"1\" width=\"117\" style=\"text-align: center;\" _msttexthash=\"4973501\" _msthash=\"1598\">备注</th><th colspan=\"1\" rowspan=\"1\" width=\"186\" style=\"text-align: center;\" _msttexthash=\"7093697\" _msthash=\"1599\">解释</th></tr><tr><td colspan=\"1\" rowspan=\"1\" width=\"auto\" style=\"text-align: center;\"><font _mstmutation=\"1\" _msttexthash=\"5119231\" _msthash=\"1600\">日期</font><br/></td><td colspan=\"1\" rowspan=\"1\" width=\"auto\" style=\"text-align: center;\" _msttexthash=\"5119231\" _msthash=\"1601\">日期</td><td colspan=\"1\" rowspan=\"1\" width=\"auto\"></td><td colspan=\"1\" rowspan=\"1\" width=\"auto\" style=\"text-align: center;\" _msttexthash=\"23246444\" _msthash=\"1602\">算力统计时间</td></tr><tr><td colspan=\"1\" rowspan=\"1\" width=\"auto\" style=\"text-align: center;\"><font _mstmutation=\"1\" _msttexthash=\"5078437\" _msthash=\"1603\">算力</font><br/></td><td colspan=\"1\" rowspan=\"1\" width=\"auto\" style=\"text-align: center;\"><font _mstmutation=\"1\" _msttexthash=\"1952132\" _msthash=\"1604\">双</font><br/></td><td colspan=\"1\" rowspan=\"1\" width=\"auto\"></td><td colspan=\"1\" rowspan=\"1\" width=\"auto\" style=\"text-align: center;\"><font _mstmutation=\"1\" _msttexthash=\"5078437\" _msthash=\"1605\">算力</font><br/></td></tr></tbody></table><p _msthidden=\"3\"><span id=\"MinersList\"></span></p><p _msthidden=\"3\"><span style=\"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\" _msttexthash=\"10586056\" _msthash=\"1595\">矿工名单</span></p><p _msthidden=\"3\"><span style=\"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);\" _msttexthash=\"20870291\" _msthash=\"1594\">矿工数量数据</span></p><table style=\"width: auto;\" _msthidden=\"3\"><tbody><tr><th colspan=\"1\" rowspan=\"1\" width=\"148.7\" style=\"text-align: center;\" _msttexthash=\"5204511\" _msthash=\"1581\">名称</th><th colspan=\"1\" rowspan=\"1\" width=\"99\" style=\"text-align: center;\" _msttexthash=\"5230641\" _msthash=\"1582\">类型</th><th colspan=\"1\" rowspan=\"1\" width=\"111\" style=\"text-align: center;\" _msttexthash=\"4973501\" _msthash=\"1583\">备注</th><th colspan=\"1\" rowspan=\"1\" width=\"153\" style=\"text-align: center;\" _msttexthash=\"7093697\" _msthash=\"1584\">解释</th></tr><tr><td colspan=\"1\" rowspan=\"1\" width=\"auto\" style=\"text-align: center;\" _msttexthash=\"2241785\" _msthash=\"1585\">总</td><td colspan=\"1\" rowspan=\"1\" width=\"auto\" style=\"text-align: center;\" _msttexthash=\"5064124\" _msthash=\"1586\">整数</td><td colspan=\"1\" rowspan=\"1\" width=\"auto\">"; // 替换为实际要翻译的文本
String apiKey = ""; // 替换为实际的 API 密钥
String response = translate(textToTranslate, apiKey);
System.out.println(response);
} }
/**
* 发送翻译请求
* @param text 待翻译的文本
* @param apiKey API 密钥
* @return 响应结果字符串
*/
public static String translate(String text, String apiKey) {
// 构建请求体
JSONObject requestBody = new JSONObject();
requestBody.put("q", text);
requestBody.put("source", "auto");
requestBody.put("target", "zh");
requestBody.put("format", "text");
requestBody.put("alternatives", 3);
requestBody.put("api_key", apiKey);
// 发送 POST 请求
String result = HttpRequest.post("https://libretranslate.com/translate")
.header("Content-Type", "application/json")
.body(requestBody.toString())
.execute()
.body();
return result;
}
} }

View File

@ -23,6 +23,7 @@
<module>m2pool-oapi</module> <module>m2pool-oapi</module>
<module>m2pool-chat</module> <module>m2pool-chat</module>
<module>m2pool-manage</module> <module>m2pool-manage</module>
<module>m2pool-lease</module>
</modules> </modules>