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)
{
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人