2024.12.19

package com.men.translate;

import com.jfinal.aop.Before;
import com.jfinal.aop.Inject;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Record;
import com.men.common.model.Translate;
import com.men.common.model.User;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
* @author mendianyu
*/
@Before(TranslateInterceptor.class)
public class TranslateController extends Controller
{

@Inject
TranslateService service = new TranslateService();

public void index()
{
render("/translate/translation.html");
}


/**
* 翻译文本并将结果存到数据库
*/
public void fanyi()
{
String from = getPara("from");
String to = getPara("to");
String q = getPara("q");


String result = service.textTrans(from, to, q);
setAttr("q", q);
setAttr("result", result);
String id = getSessionAttr("id");

LocalDateTime currentDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH:mm:ss");
String formattedDateTime = currentDateTime.format(formatter);

Translate translate = new Translate();
translate.setId(id);
translate.setTime(formattedDateTime);
translate.setFrom1(from);
translate.setTo1(to);
translate.setQ(q);
translate.setResult(result);

translate.save();

refreshTranslateTimes();
render("/translate/translation.html");
}

/**
* 更新翻译使用字符量
*/
public void refreshTranslateTimes()
{
String q = getAttr("q");
//忽略空格和标点符号
int amounts = q.replaceAll("[\\s\\p{P}]", "").length();
String id = getSessionAttr("id");

Integer tUsed = service.findUserById(id).getTUsed() + amounts;
Integer tLast = service.findUserById(id).getTLast() - amounts;
User user = service.findUserById(id);
user.setTUsed(tUsed);
user.setTLast(tLast);
user.update();
}

/**
* 翻译记录列表
*/
public void list()
{
setAttr("list", service.paginate(getParaToInt(0, 1), 5));
render("/translate/list.html");
}

/**
* 翻译记录具体内容
*/
public void detail()
{
setAttr("details", service.findByTime(getPara()));
render("/translate/details.html");
}

/**
* 模糊查询
*/
public void search()
{
String from = getPara("from");
String to = getPara("to");
String date = getPara("date");
String id = getSessionAttr("id");
if ((from != null && !from.isEmpty()) || (to != null && !to.isEmpty()) || (date != null && !date.isEmpty()))
{
List<Record> translations = service.searchRecords(from, to, date, id);
setAttr("date", date);

setAttr("translations", translations);
} else
{
List<Record> allTranslations = service.searchRecords("", "", "", id);
setAttr("translations", allTranslations);
}

render("/translate/search.html");
}
}
package com.men.translate;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;

public class TranslateInterceptor implements Interceptor
{

@Override
public void intercept(Invocation inv)
{
System.out.println("Before invoking " + inv.getActionKey());
inv.invoke();
System.out.println("After invoking " + inv.getActionKey());
}
}
package com.men.translate;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.men.common.HttpUtil;
import com.men.common.model.Translate;
import com.men.common.model.User;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @author mendianyu
*/
public class TranslateService
{
private Translate dao = new Translate().dao();
private User udao = new User().dao();

public static final String API_KEY = "4M5FTgQ0RtALmrZVaezSyvbO";
public static final String SECRET_KEY = "GZMweUiQxzBifIO4QvadUgjNJqYMkONU";

// 获取 accessToken
private String getAccessToken() {
String url = "https://aip.baidubce.com/oauth/2.0/token";
String params = "grant_type=client_credentials&client_id=" + API_KEY + "&client_secret=" + SECRET_KEY;

try {
// 使用 application/x-www-form-urlencoded 类型发送请求
String contentType = "application/x-www-form-urlencoded"; // 这是百度接口要求的类型

// 调用 HttpUtil 的 post 方法,传递 url, accessToken (空字符串), contentType 和 params
String result = HttpUtil.post(url, "", contentType, params);

// 解析响应的 JSON 获取 access_token
JSONObject jsonObject = com.alibaba.fastjson2.JSON.parseObject(result);
return jsonObject.getString("access_token");

} catch (Exception e) {
e.printStackTrace();
}
return null;
}


// 翻译方法
public String textTrans(String from, String to, String q) {
// 获取动态的 accessToken
String accessToken = getAccessToken();
if (accessToken == null || accessToken.isEmpty()) {
throw new RuntimeException("Failed to get access token");
}

// 请求 URL
String url = "https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1";
try {
// 请求参数
Map<String, Object> map = new HashMap<>();
map.put("from", from);
map.put("to", to);
map.put("q", q);

String param = com.alibaba.fastjson2.JSON.toJSONString(map);

// 发送 HTTP 请求
String result = HttpUtil.post(url, accessToken, "application/json", param);

if (result == null || result.isEmpty()) {
throw new RuntimeException("HTTP response is empty or null");
}

// 解析响应
JSONObject jsonObject = com.alibaba.fastjson2.JSON.parseObject(result);
JSONObject resultObject = jsonObject.getJSONObject("result");
JSONArray transResultArray = resultObject.getJSONArray("trans_result");
JSONObject transResultObject = transResultArray.getJSONObject(0);
String dstValue = transResultObject.getString("dst");
System.out.println("翻译结果为: " + dstValue);
return dstValue;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

public Page<Translate> paginate(int pageNumber, int pageSize) {
return dao.paginate(pageNumber, pageSize, "select *", "from translate order by time desc");
}


public Translate findByTime(String time) {
return dao.findFirst("select * from translate where time = ? ", time);
}


public List<Record> searchRecords(String from, String to, String date, String id) {
String sql = "select * from translate where (from1 like ? or to1 like ? or time like ?) and id=? order by id desc";
date = "%" + date + "%";

List<Record> translations = Db.find(sql, from, to, date, id);
return translations;
}


public User findUserById(String id) {
return udao.findFirst("select * from user where id = ? ", id);
}
}
package com.men.translate;

import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;

/**
* @author mendianyu
*/
public class TranslateValidator extends Validator
{

@Override
protected void validate(Controller controller)
{

}

@Override
protected void handleError(Controller controller)
{

}
}
posted @   我也不想的  阅读(1)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示