package com.bao.lc.site.s3.commands;
import org.apache.commons.chain.Context;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.bao.lc.bean.IDValuePair;
import com.bao.lc.bean.ResultCode;
import com.bao.lc.httpcommand.CommandRetryStrategy;
import com.bao.lc.site.s3.params.TdPNames;
public class BookTicketRetryStrategy implements CommandRetryStrategy
{
private static Log log = LogFactory.getLog(BookTicketRetryStrategy.class);
@Override
public boolean shouldRetry(Context context, int executionCount, IDValuePair rc)
{
boolean ret = false;
if(rc == ResultCode.RC_TD_CONFIRM_PASSENGER_CANCEL_TOO_MUCH
|| rc == ResultCode.RC_TD_CONFIRM_PASSENGER_REPEAT_BUY_TICKET
|| rc == ResultCode.RC_TD_CONFIRM_PASSENGER_CARD_NUMBER_ERROR)
{
ret = false;
}
else if(rc == ResultCode.RC_RAND_CODE_ERROR)
{
// retry with newly input verification code
context.remove(TdPNames._CONFIRM_PASSENGER_VOCDE);
ret = true;
}
else if(rc == ResultCode.RC_TD_CONFIRM_PASSENGER_OTHER_ERROR
|| rc == ResultCode.RC_TD_CONFIRM_PASSENGER_UNKOWN_ERROR)
{
// start from QueryLeftTicket
context.remove(TdPNames._CONFIRM_PASSENGER_CONTENT);
context.remove(TdPNames._CONFIRM_PASSENGER_ENCODING);
context.remove(TdPNames._CONFIRM_PASSENGER_VOCDE);
ret = true;
}
// other cases, stop to retry
else
{
ret = false;
}
log.debug("[BookTicketRetryStrategy]: retry=" + ret + ", rc=" + rc);
return ret;
}
@Override
public boolean shouldRetry(Context context, int executionCount, Exception e)
{
return false;
}
}