Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Как пример реализации интерфейса DialogProcessing ниже приведён пример класса-реализации логики авторизации пользователя по названию договора. Данный класс отрабатывает после запроса названия договора от пользователя, полученный текст передаётся в метод processDialog(), в котором происходит поиск договора и в случае, если договор был найден, указывается, что следующим диалогом должен быть показан заранее созданный диалог с запросом пароля от личного кабинета.

Блок кода
languagejava
themeEclipse
titleAuthProcessing
linenumberstrue
collapsetrue
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 "Обработка авторизации";
    }
}

...