diff --git a/src/main/java/Tools/MaxKb/Model/MaxKbModel.java b/src/main/java/Tools/MaxKb/Model/MaxKbModel.java index 3ff0b4ae..86df08fc 100644 --- a/src/main/java/Tools/MaxKb/Model/MaxKbModel.java +++ b/src/main/java/Tools/MaxKb/Model/MaxKbModel.java @@ -3,7 +3,9 @@ package Tools.MaxKb.Model; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; +import java.time.LocalDateTime; import java.util.List; +import java.util.UUID; public class MaxKbModel { /** @@ -48,11 +50,130 @@ public class MaxKbModel { /** * 获取模型 * - * @param modelName 模型名称 + * @param model_name 模型名称 * @return */ - public List getModel(String modelName) { + public List getModel(String model_name) { String sql = "select * from model where name=?"; - return Db.find(sql, modelName); + return Db.find(sql, model_name); + } + + /** + * 获取应用 + * + * @param applicationName 应用名称 + * @return + */ + public Record getApplication(String applicationName) { + String sql = "select * from application where name=?"; + return Db.findFirst(sql, applicationName); + } + + /** + * 增加应用程序 + * + * @param sourceApplicationName 源应用名称 + * @param targetApplicationName 目标应用名称 + */ + public String addApplication(String sourceApplicationName, String targetApplicationName) { + //获取应用 + Record record = getApplication(sourceApplicationName); + if (record == null) { + System.out.println(sourceApplicationName + "应用不存在!"); + System.exit(0); + } + //克隆出对象 + record = new com.jfinal.plugin.activerecord.Record().setColumns(record.getColumns()); + //生成一个uuid + record.set("id", UUID.randomUUID()); + //名称 + record.set("name", targetApplicationName); + //描述 + record.set("desc","【代码生成】"); + //增加 + Db.save("application", "id", record); + + return record.getStr("id"); + } + + /** + * 获取数据集 + * + * @param dataset_name 数据集名称 + * @return + */ + public Record getDataSet(String dataset_name) { + String sql = "select * from dataset where name=?"; + return Db.findFirst(sql, dataset_name); + } + + /** + * 增加数据集 + * + * @param sourceDatasetName 数据集名称 + */ + public String addDataSet(String sourceDatasetName, String targetDatasetName) { + //获取数据集 + Record record = getDataSet(sourceDatasetName); + if (record == null) { + System.out.println(sourceDatasetName + "数据集不存在!"); + System.exit(0); + } + //克隆出对象 + record = new Record().setColumns(record.getColumns()); + //生成一个uuid + record.set("id", UUID.randomUUID()); + //名称 + record.set("name", targetDatasetName); + //描述 + record.set("desc","【代码生成】"); + //增加 + Db.save("dataset", "id", record); + return record.getStr("id"); + } + + /** + * 生成访问Token + * + * @param application_id 应用的id + */ + public String addAccessToken(String application_id) { + Record record = new Record(); + record.set("create_time", LocalDateTime.now()); + record.set("update_time", LocalDateTime.now()); + record.set("application_id", UUID.fromString(application_id)); + //生成一个16位的随机数 + record.set("access_token", UUID.randomUUID().toString().replace("-", "").substring(0, 16).toLowerCase()); + record.set("is_active", true); + record.set("access_num", 100); + record.set("white_active", false); + record.set("white_list", new String[]{""}); + record.set("show_source", false); + Db.save("application_access_token", "application_id", record); + return record.getStr("access_token"); + } + + /** + * 删除代码生成的数据 + */ + public void delCodeGenerateApplicationDataSet(){ + //通过SQL查询出所有desc=【代码生成】的数据 + String sql = "select * from application where \"desc\"='【代码生成】'"; + List list = Db.find(sql); + for (Record record : list) { + String application_id = record.getStr("id"); + //删除应用与知识库的关联 + sql = "delete from application_dataset_mapping where application_id=?"; + Db.update(sql, UUID.fromString(application_id)); + + sql="delete from application_access_token where application_id=?"; + Db.update(sql, UUID.fromString(application_id)); + + //删除应用 + sql = "delete from application where id=?"; + Db.update(sql, UUID.fromString(application_id)); + } + sql = "delete from dataset where \"desc\"='【代码生成】'"; + Db.update(sql); } } diff --git a/src/main/java/Tools/MaxKb/Service/Impl/MaxKbImpl.java b/src/main/java/Tools/MaxKb/Service/Impl/MaxKbImpl.java index 856876b3..874d8783 100644 --- a/src/main/java/Tools/MaxKb/Service/Impl/MaxKbImpl.java +++ b/src/main/java/Tools/MaxKb/Service/Impl/MaxKbImpl.java @@ -1,11 +1,9 @@ package Tools.MaxKb.Service.Impl; -import Tools.MaxKb.Util.MaxKbUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; import com.jfinal.kit.PropKit; import java.io.File; @@ -39,13 +37,13 @@ public class MaxKbImpl { .form("file", new File(uploadFile)).execute();// 添加文件 // 获取响应内容 String result = response.body(); - JSONObject jo = JSONUtil.parseObj(result); - int code = jo.getInt("code"); + JSONObject jo = JSONObject.parseObject(result); + int code = jo.getInteger("code"); if (code != 200) { System.out.println("请求失败"); return null; } - return jo.getJSONArray("data").getJSONObject(0).getStr("id"); + return jo.getJSONArray("data").getJSONObject(0).getString("id"); } /** @@ -70,8 +68,8 @@ public class MaxKbImpl { .form("file", new File(uploadFile)).execute();// 添加文件 // 获取响应内容 String result = response.body(); - JSONObject jo = JSONUtil.parseObj(result); - int code = jo.getInt("code"); + JSONObject jo = JSONObject.parseObject(result); + int code = jo.getInteger("code"); if (code != 200) { System.out.println("请求失败"); return null; @@ -89,9 +87,11 @@ public class MaxKbImpl { //管理员账号与密码 String username = PropKit.get("MaxKBUsername"); String password = PropKit.get("MaxKBPassword"); - JSONObject requestBody = JSONUtil.createObj() - .set("username", username) - .set("password", password); + + JSONObject requestBody = new JSONObject(); + requestBody.put("username", username); + requestBody.put("password", password); + HttpResponse response = HttpRequest.post(Authorization_URL) .header("Content-Type", "application/json") .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36") @@ -110,8 +110,8 @@ public class MaxKbImpl { } try { - JSONObject responseJson = JSONUtil.parseObj(body); - String data = responseJson.getStr("data"); + JSONObject responseJson = JSONObject.parseObject(body); + String data = responseJson.getString("data"); if (StrUtil.isBlank(data)) { throw new RuntimeException("未获取到data字段"); } @@ -178,8 +178,15 @@ public class MaxKbImpl { } + /** + * 向知识库批量上传文档 + * + * @param authCode 授权码 + * @param zskId 知识库ID + * @param body 分段后的文字内容 + * @return + */ public static String _bach(String authCode, String zskId, String body) { - System.out.println("发送的body="+body); String url = baseUrl + "/api/dataset/" + zskId + "/document/_bach"; HttpResponse response = HttpRequest.post(url) .header("Accept", "application/json, text/plain, */*") diff --git a/src/main/java/Tools/MaxKb/Service/MaxKbService.java b/src/main/java/Tools/MaxKb/Service/MaxKbService.java index 0221e4b4..0e7fe51f 100644 --- a/src/main/java/Tools/MaxKb/Service/MaxKbService.java +++ b/src/main/java/Tools/MaxKb/Service/MaxKbService.java @@ -2,8 +2,8 @@ package Tools.MaxKb.Service; import Tools.MaxKb.Service.Impl.MaxKbImpl; import Tools.MaxKb.Model.MaxKbModel; -import cn.hutool.json.JSONArray; -import cn.hutool.json.JSONObject; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.jfinal.kit.PropKit; import com.jfinal.plugin.activerecord.Record; @@ -72,7 +72,12 @@ public class MaxKbService { return list.getFirst().getStr("id"); } - public static JSONObject uploadDocumentSplit(String uploadFile) { + /** + * 分割文档 + * @param uploadFile + * @return + */ + public static JSONObject splitDocument(String uploadFile) { return MaxKbImpl.uploadDocumentSplit(MaxKbImpl.getAuthorization(), uploadFile); } @@ -93,14 +98,14 @@ public class MaxKbService { String zskId = list.getFirst().getStr("id"); //上传文件 - cn.hutool.json.JSONObject jo = uploadDocumentSplit(uploadFile); + JSONObject jo = splitDocument(uploadFile); JSONArray ja = jo.getJSONArray("data"); - cn.hutool.json.JSONArray jaRes = new JSONArray(); + JSONArray jaRes = new JSONArray(); for (Object o : ja) { cn.hutool.json.JSONObject j = (cn.hutool.json.JSONObject) (o); j.set("paragraphs", j.getJSONArray("content")); j.remove("content"); - jaRes.put(j); + jaRes.add(j); } return MaxKbImpl._bach(MaxKbImpl.getAuthorization(), zskId, jaRes.toString()); } diff --git a/src/main/java/Tools/MaxKb/TestMaxKB.java b/src/main/java/Tools/MaxKb/TestMaxKB.java index f8f14f8a..771efd92 100644 --- a/src/main/java/Tools/MaxKb/TestMaxKB.java +++ b/src/main/java/Tools/MaxKb/TestMaxKB.java @@ -1,5 +1,6 @@ package Tools.MaxKb; +import Tools.MaxKb.Model.MaxKbModel; import Tools.MaxKb.Util.MaxKbUtil; import com.jfinal.kit.PropKit; import com.jfinal.plugin.activerecord.Db; @@ -12,23 +13,24 @@ public class TestMaxKB { public static void main(String[] args) throws Exception { + MaxKbModel mkm = new MaxKbModel(); //加载配置文件 PropKit.use("MaxKb.properties"); //初始化数据库 MaxKbUtil.Init(); //1、删除代码生成的应用程序与知识库 - MaxKbUtil.delCodeGenerateApplicationDataSet(); + mkm.delCodeGenerateApplicationDataSet(); //2、拷贝生成应用 String sourceApplicationName = "应用【模板】"; String targetApplicationName = "XXX的应用"; - String application_id = MaxKbUtil.addApplication(sourceApplicationName, targetApplicationName); + String application_id = mkm.addApplication(sourceApplicationName, targetApplicationName); //3、拷贝生成知识库 String sourceDataSetName = "知识库【模板】"; String targetDataSetName = "XXX的知识库"; - String dataset_id = MaxKbUtil.addDataSet(sourceDataSetName, targetDataSetName); + String dataset_id = mkm.addDataSet(sourceDataSetName, targetDataSetName); //4、应用与知识库关联 Record record = new Record(); @@ -40,7 +42,7 @@ public class TestMaxKB { Db.save("application_dataset_mapping", "id", record); //5、生成应用的访问Token - String access_token = MaxKbUtil.addAccessToken(application_id); + String access_token = mkm.addAccessToken(application_id); System.out.println("增加成功!access_token=" + access_token); } } \ No newline at end of file diff --git a/src/main/java/Tools/MaxKb/Util/MaxKbUtil.java b/src/main/java/Tools/MaxKb/Util/MaxKbUtil.java index cf787e95..0bb9546f 100644 --- a/src/main/java/Tools/MaxKb/Util/MaxKbUtil.java +++ b/src/main/java/Tools/MaxKb/Util/MaxKbUtil.java @@ -2,15 +2,9 @@ package Tools.MaxKb.Util; import com.jfinal.kit.PropKit; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; -import com.jfinal.plugin.activerecord.Db; -import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.dialect.PostgreSqlDialect; import com.jfinal.plugin.hikaricp.HikariCpPlugin; -import java.time.LocalDateTime; -import java.util.List; -import java.util.UUID; - public class MaxKbUtil { /** * 初始化MaxKB的数据库连接 @@ -27,134 +21,4 @@ public class MaxKbUtil { arp.setDialect(new PostgreSqlDialect()); arp.start(); } - - /** - * 获取模型 - * - * @param model_name 模型名称 - * @return - */ - public static com.jfinal.plugin.activerecord.Record getModel(String model_name) { - String sql = "select * from model where name=?"; - return Db.findFirst(sql, model_name); - } - - /** - * 获取应用 - * - * @param applicationName 应用名称 - * @return - */ - public static com.jfinal.plugin.activerecord.Record getApplication(String applicationName) { - String sql = "select * from application where name=?"; - return Db.findFirst(sql, applicationName); - } - - /** - * 增加应用程序 - * - * @param sourceApplicationName 源应用名称 - * @param targetApplicationName 目标应用名称 - */ - public static String addApplication(String sourceApplicationName, String targetApplicationName) { - //获取应用 - com.jfinal.plugin.activerecord.Record record = getApplication(sourceApplicationName); - if (record == null) { - System.out.println(sourceApplicationName + "应用不存在!"); - System.exit(0); - } - //克隆出对象 - record = new com.jfinal.plugin.activerecord.Record().setColumns(record.getColumns()); - //生成一个uuid - record.set("id", UUID.randomUUID()); - //名称 - record.set("name", targetApplicationName); - //描述 - record.set("desc","【代码生成】"); - //增加 - Db.save("application", "id", record); - - return record.getStr("id"); - } - - /** - * 获取数据集 - * - * @param dataset_name 数据集名称 - * @return - */ - public static com.jfinal.plugin.activerecord.Record getDataSet(String dataset_name) { - String sql = "select * from dataset where name=?"; - return Db.findFirst(sql, dataset_name); - } - - /** - * 增加数据集 - * - * @param sourceDatasetName 数据集名称 - */ - public static String addDataSet(String sourceDatasetName, String targetDatasetName) { - //获取数据集 - com.jfinal.plugin.activerecord.Record record = getDataSet(sourceDatasetName); - if (record == null) { - System.out.println(sourceDatasetName + "数据集不存在!"); - System.exit(0); - } - //克隆出对象 - record = new Record().setColumns(record.getColumns()); - //生成一个uuid - record.set("id", UUID.randomUUID()); - //名称 - record.set("name", targetDatasetName); - //描述 - record.set("desc","【代码生成】"); - //增加 - Db.save("dataset", "id", record); - return record.getStr("id"); - } - - /** - * 生成访问Token - * - * @param application_id 应用的id - */ - public static String addAccessToken(String application_id) { - com.jfinal.plugin.activerecord.Record record = new Record(); - record.set("create_time", LocalDateTime.now()); - record.set("update_time", LocalDateTime.now()); - record.set("application_id", UUID.fromString(application_id)); - //生成一个16位的随机数 - record.set("access_token", UUID.randomUUID().toString().replace("-", "").substring(0, 16).toLowerCase()); - record.set("is_active", true); - record.set("access_num", 100); - record.set("white_active", false); - record.set("white_list", new String[]{""}); - record.set("show_source", false); - Db.save("application_access_token", "application_id", record); - return record.getStr("access_token"); - } - - /** - * 删除代码生成的数据 - */ - public static void delCodeGenerateApplicationDataSet(){ - //通过SQL查询出所有desc=【代码生成】的数据 - String sql = "select * from application where \"desc\"='【代码生成】'"; - List list = Db.find(sql); - for (Record record : list) { - String application_id = record.getStr("id"); - //删除应用与知识库的关联 - sql = "delete from application_dataset_mapping where application_id=?"; - Db.update(sql, UUID.fromString(application_id)); - - sql="delete from application_access_token where application_id=?"; - Db.update(sql, UUID.fromString(application_id)); - - //删除应用 - sql = "delete from application where id=?"; - Db.update(sql, UUID.fromString(application_id)); - } - sql = "delete from dataset where \"desc\"='【代码生成】'"; - Db.update(sql); - } }