/
ylts
/
chatBotTravel
Обзор
Документация
Войти
/
ylts
/
chatBotTravel
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/org/itcube/WorkDB.java
200 строк
10 KB
javamain
Add project
05 дек 2024, 22:26
05 дек 2024, 22:26
1a2a6fc
Код
Авторство
О чём код?
package org.itcube; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; public class WorkDB { // Переменные для раскрашивания текста private static final String red = "\u001B[31m"; private static final String green = "\u001B[32m"; private static final String reset = "\u001B[0m"; private static final String blue = "\u001B[34m"; //метод для получения данных из БД - получение всех вопросов public static ArrayList<String> getQuestions(String question) throws SQLException { question = question.replaceAll("покажи ", ""); question = question.replaceAll(" «", "«"); question = question.toLowerCase(); DbConnect db = new DbConnect(); ArrayList<String> tags = new ArrayList<>(); // если вопрос содержит теги, которые отделяются символом #, то вопрос делится этим символом if (question.contains("#")) { for (String s : question.split("#")[1].split(",")){ // вторая часть - набор тегов tags.add(s.trim()); } question = question.split("#")[0].trim(); // первая часть сам вопрос } ArrayList<String> answeres = new ArrayList<>(); String query = "SELECT * FROM questions WHERE question like '%" + question + "%'"; ResultSet rs = db.getStatement().executeQuery(query); rs.next(); int sectionsobjectsId = rs.getInt("sectionsobjectsId"); int sectionorobject = rs.getInt("sectionorobject"); // в вбазе данных разделы (sections) хранятся в одной таблице // а объекты (objects) в другой таблице // если раздел, то sectionorobject = 0 // если объект, то sectionorobject = 1 switch (sectionorobject) { case 0 -> { query = "SELECT * FROM sections WHERE idparent = " + sectionsobjectsId; rs = db.getStatement().executeQuery(query); answeres.add(String.valueOf(sectionorobject)); if (sectionsobjectsId == 0) { answeres.add("0"); // родительский элемент } else { answeres.add("1"); // дочерний элемент } while (rs.next()) { answeres.add(rs.getString("name")); } db.close(); return answeres; } case 1 -> { query = "SELECT * FROM objects WHERE sectionid = " + sectionsobjectsId; rs = db.getStatement().executeQuery(query); answeres.add(String.valueOf(sectionorobject)); answeres.add("tags"); while (rs.next()) { query = "SELECT * FROM tags_objects join tags on tags_objects.tagid = tags.id WHERE objectid = " + rs.getInt("id"); ResultSet rs2 = db.getStatement1().executeQuery(query); StringBuilder tagsColor= new StringBuilder(); ArrayList<String> tagsList = new ArrayList<>(); while (rs2.next()) { tagsList.add(rs2.getString("tag")); } // если вопрос содержит теги, которые отделяются символом #, // то проверяется относятся ли указанные теги к данному объекту // если указанные теги относятся к данному объекту, то они окрашиваются в зеленый цвет // если указанные теги не относятся к данному объекту, то они окрашиваются в красный цвет if (!tags.isEmpty()){ for (int i =0; i < tags.size(); i++) { String sep=", "; if (i == tags.size()-1) { sep=""; } if (tagsList.contains(tags.get(i)) && !tagsList.isEmpty()) { tagsColor.append(green).append(tags.get(i)).append(reset).append(sep); } else { tagsColor.append(red).append(tags.get(i)).append(reset).append(sep); } } } else { tagsColor = new StringBuilder(); } if (tagsColor.length() > 0) { answeres.add(blue + (rs.getString("name") + reset + " (" + tagsColor).trim() + ")"); } else { answeres.add(blue + (rs.getString("name") + reset).trim()); } } db.close(); return answeres; } case 2 -> { // вывод информации о конкретном объекте query = "SELECT * FROM tags_objects join tags on tags_objects.tagid = tags.id WHERE objectid = " + rs.getInt("sectionsobjectsid"); ResultSet rs2 = db.getStatement1().executeQuery(query); StringBuilder tagsColor= new StringBuilder(green); // вывод тегов для данного объекта while (rs2.next()) { tagsColor.append("#").append(rs2.getString("tag")).append(" "); } query = "SELECT * FROM objects WHERE id = " + sectionsobjectsId; rs = db.getStatement().executeQuery(query); rs.next(); answeres.add(String.valueOf(sectionorobject)); answeres.add(String.valueOf(sectionsobjectsId)); answeres.add(blue + rs.getString("name") + reset); answeres.add(green + tagsColor + reset); answeres.add(blue + rs.getString("worktime") + reset); answeres.add(blue + rs.getString("address") + reset); // если поля сайт и социльная сеть не заполнено, то они игнорируется if (rs.getString("site") != null && !rs.getString("site").isEmpty()) answeres.add(rs.getString("site")); if (rs.getString("social") != null && !rs.getString("social").isEmpty()) answeres.add(rs.getString("social")); db.close(); return answeres; } } db.close(); return null; } // метод для добавления пользователя public static int insertUser(User user) throws SQLException { int result; DbConnect db = new DbConnect(); String query = "INSERT INTO users(name, age, gender, email, city) " + "values('" + user.getName() + "', " + user.getAge() + ", '" + user.getGender() + "', '" + user.getEmail() + "', '" + user.getCity() + "')"; db.getStatement().executeUpdate(query); result = db.getStatement().executeQuery("SELECT last_insert_rowid()").getInt(1); db.close(); return result; } // метод для добавления нулевого визита public static void addVisit(int userid, int visitnumber, int objectid) throws SQLException { DbConnect db = new DbConnect(); String query = "INSERT INTO visits(userid, vizitnumber, objectid) VALUES (" +userid + ", " + visitnumber + ", " + objectid +")"; db.getStatement().executeUpdate(query); db.close(); } // метод для добавления нулевого визита без объекта public static void addVisit(int userid, int visitnumber) throws SQLException { DbConnect db = new DbConnect(); String query = "INSERT INTO visits(userid, vizitnumber, objectid) VALUES (" +userid + ", " + visitnumber + ")"; db.getStatement().executeUpdate(query); db.close(); } // метод для получения количества визитов нового пользователя (для простоты пользователь идентифицируется по email) public static int getVisitNumber(String email) throws SQLException { DbConnect db = new DbConnect(); String query = "SELECT count(*) FROM users WHERE email = '" + email + "'"; int result = db.getStatement().executeQuery(query).getInt(1); db.close(); return result; } //метод для раздела "мой маршру" // метод для получения информации об объектах для посещения пользователями public static ArrayList<String> getVisit(int userid, int vizitnumber) throws SQLException { DbConnect db = new DbConnect(); ArrayList<String>result = new ArrayList<>(); String query = "SELECT * FROM visits JOIN objects ON visits.objectid = objects.id "+ "WHERE userid = '" + userid + "' AND vizitnumber = '" + vizitnumber + "';"; ResultSet rs = db.getStatement().executeQuery(query); int count =0; while (rs.next()) { result.add(++count+"__________________________________________"); result.add(blue + rs.getString("name")+reset); result.add(blue + rs.getString("address")+reset); result.add(blue + rs.getString("worktime")+reset); // если поля сайт и социльная сеть не заполнено, то они игнорируется if (rs.getString("site") != null && !rs.getString("site").isEmpty()){ result.add(blue + rs.getString("site")); } if (rs.getString("social") != null && !rs.getString("social").isEmpty()) { result.add(blue + rs.getString("social") + reset); } } db.close(); return result; } }