package com.cku.oa.sys.zalog;

import com.cku.core.ZAErrorCode;
import com.cku.core.ZAException;

/**
 * Created with IntelliJ IDEA.
 * User: lyy
 * Date: 2016/7/6
 * Time: 14:48
 */
public class SysFinishPayoutState implements SysState {

    @Override
    public void createOrder(SysContext ckuContext, String info,String memberCode,String tableName,String businessId,String runningNumber,  SysConsumer<String, ZAException> consumer) throws ZAException {
        throw new ZAException(ZAErrorCode.ZA_ERC_FINISHPAYOUT_STATE,"当前处于已经支付状态，无法进行此操作！");
    }

    @Override
    public void payment(SysContext ckuContext, String info,String memberCode,String tableName,String businessId,String runningNumber,  SysConsumer<String, ZAException> consumer) throws ZAException {
        throw new ZAException(ZAErrorCode.ZA_ERC_FINISHPAYOUT_STATE,"当前处于已经支付状态，无法进行此操作！");
    }

    @Override
    public void cancelApply(SysContext ckuContext, String info,String memberCode,String tableName,String businessId,String runningNumber,  SysConsumer<String, ZAException> consumer) throws ZAException {
        throw new ZAException(ZAErrorCode.ZA_ERC_FINISHPAYOUT_STATE,"当前处于已经支付状态，无法进行此操作！");
    }

    @Override
    public void confirmSuccess(SysContext ckuContext, String info,String memberCode,String tableName,String businessId,String runningNumber,  SysConsumer<String, ZAException> consumer) throws ZAException {
        try {
            consumer.accept(info);
            ckuContext.setSysState(new SysSuccessConfirmState());
            ckuContext.setNowState(SysNowState.SuccessConfirm);
            ckuContext.getSysZaLog().setSuccessInfo(info+"审核通过成功！");
            ckuContext.getSysZaLog().setMemberCode(memberCode);
            ckuContext.getSysZaLog().setTableName(tableName);
            ckuContext.getSysZaLog().setBusinessId(businessId);
            ckuContext.getSysZaLog().setRunningNumber(runningNumber);
            ckuContext.zaLogDao.insert(ckuContext.getSysZaLog());
        } catch (ZAException ze) {
            ckuContext.getSysZaLog().setErrorInfo(info+"审核通过失败："+"错误代码："+ze.get_code()+"。错误信息："+ze.getMessage());
            ckuContext.zaLogDao.insert(ckuContext.getSysZaLog());
            throw ze;
        }
    }

    @Override
    public void confirmFail(SysContext ckuContext, String info, String errorInfo,String memberCode,String tableName,String businessId,String runningNumber, SysConsumer<String, ZAException> consumer) throws ZAException {
        try {
            consumer.accept(info);
            ckuContext.setSysState(new SysFailConfirmState());
            ckuContext.setNowState(SysNowState.FailConfirm);
            ckuContext.getSysZaLog().setSuccessInfo(info+"审核不通过成功！");
            ckuContext.getSysZaLog().setReviewRemarks(errorInfo);
            ckuContext.getSysZaLog().setMemberCode(memberCode);
            ckuContext.getSysZaLog().setTableName(tableName);
            ckuContext.getSysZaLog().setBusinessId(businessId);
            ckuContext.getSysZaLog().setRunningNumber(runningNumber);
            ckuContext.zaLogDao.insert(ckuContext.getSysZaLog());
        } catch (ZAException ze) {
            ckuContext.getSysZaLog().setErrorInfo(info+"审核不通过失败："+"错误代码："+ze.get_code()+"。错误信息："+ze.getMessage());
            ckuContext.zaLogDao.insert(ckuContext.getSysZaLog());
            throw ze;
        }
    }

    @Override
    public void updateInfo(SysContext ckuContext, String info,String memberCode, String tableName,String businessId,String runningNumber, SysConsumer<String, ZAException> consumer) throws ZAException {
        throw new ZAException(ZAErrorCode.ZA_ERC_FINISHPAYOUT_STATE,"当前处于已经支付状态，无法进行此操作！");
    }

    @Override
    public void updateData(SysContext ckuContext, String info,String memberCode,String tableName,String businessId,String runningNumber,  SysConsumer<String, ZAException> consumer) throws ZAException {
        throw new ZAException(ZAErrorCode.ZA_ERC_FINISHPAYOUT_STATE,"当前处于已经支付、未审核状态，无法进行此操作！");
    }

    @Override
    public void offlineRefund(SysContext ckuContext, String info,String memberCode,String tableName,String businessId,String runningNumber,  SysConsumer<String, ZAException> consumer) throws ZAException {
        try {
            consumer.accept(info);
            ckuContext.setSysState(new SysEndState());
            ckuContext.setNowState(SysNowState.End);
            ckuContext.getSysZaLog().setSuccessInfo(info+"线下退款成功！");
            ckuContext.getSysZaLog().setMemberCode(memberCode);
            ckuContext.getSysZaLog().setTableName(tableName);
            ckuContext.getSysZaLog().setBusinessId(businessId);
            ckuContext.getSysZaLog().setRunningNumber(runningNumber);
            ckuContext.zaLogDao.insert(ckuContext.getSysZaLog());
        } catch (ZAException ze) {
            ckuContext.getSysZaLog().setErrorInfo(info+"线下退款失败："+"错误代码："+ze.get_code()+"。错误信息："+ze.getMessage());
            ckuContext.zaLogDao.insert(ckuContext.getSysZaLog());
            throw ze;
        }
    }
    @Override
    public void noStateExecute(SysContext ckuContext, String info,String memberCode,String tableName,String businessId,String runningNumber,  SysConsumer<String,ZAException> consumer) throws ZAException{
        throw new ZAException(ZAErrorCode.ZA_ERC_FINISHPAYOUT_STATE,"当前处于已经支付状态，无法进行此操作！");
    }
}
