...
Как пример реализации интерфейса DialogProcessing ниже приведён пример класса-реализации логики авторизации пользователя по названию договора. Данный класс отрабатывает после запроса названия договора от пользователя, полученный текст передаётся в метод processDialog(), в котором происходит поиск договора и в случае, если договор был найден, указывается, что следующим диалогом должен быть показан заранее созданный диалог с запросом пароля от личного кабинета.
Блок кода | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
package ru.bitel.bgbilling.modules.botmanager.dyn; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.json.JSONObject; import ru.bitel.bgbilling.kernel.container.managed.ServerContext; import ru.bitel.bgbilling.modules.botmanager.common.bean.DialogProcessing; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class AuthProcessing implements DialogProcessing { private static final Logger logger = LogManager.getLogger(); /** * ID диалога с запросом пароля для авторизации */ private final int REQUEST_PASS_DIALOG = 9; /** * ID диалога с ошибкой */ private final int ERROR_DIALOG = 8; @Override public void preDialog( ServerContext serverContext, JSONObject botData ) { } @Override public void processDialog( ServerContext serverContext, JSONObject botData, String inputTextOfUser ) { int cid = findContract( serverContext.getConnection(), inputTextOfUser ); if( cid > 0 ) { botData.put( CONTRACT_ID, cid ); //если договор найден, то указываем, что следующим надо показать диалог с запросом пароля от ЛК botData.put( NEXT_DIALOG_ID, REQUEST_PASS_DIALOG ); if( logger.isDebugEnabled() ) { logger.debug( "Substring for search contract=" + inputTextOfUser + " Contract was find" ); } } else { botData.put( NEXT_DIALOG_ID, ERROR_DIALOG ); if( logger.isDebugEnabled() ) { logger.debug( "Cannot to find contract for substring: " + inputTextOfUser ); } } } //поиск договора по названию договора private int findContract( Connection connection, String contractTitle ) { int result = -1; String query = "select id from contract where title like '%" + contractTitle + "%'"; try(Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery( query )) { if( rs.next() ) { result = rs.getInt( "id" ); } } catch( SQLException ex ) { logger.error( ex ); } return result; } @Override public String title() { return "Обработка авторизации"; } } |
...