package com.brilliance.isc.common.api.liaall.controller;

import com.brilliance.isc.common.api.liaall.service.LiaallApiService;
import com.brilliance.isc.common.api.liaall.vo.LiaallRequest;
import com.brilliance.isc.common.api.liaall.vo.LiaallResponse;
import com.brilliance.isc.common.context.SettleContext;
import com.brilliance.isc.common.liaall.vo.LiaallVo;
import com.brilliance.isc.common.transaction.help.TransactionHelpService;
import com.brilliance.isc.common.vo.BizAmdInfoVo;
import com.brilliance.isc.common.vo.BizInfoVo;
import com.brilliance.isc.vo.ResponseSet;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;

@Api("表外记账服务")
public class AbstractLiaallController<T1 extends BizInfoVo, T2 extends BizAmdInfoVo> {

    @Autowired
    private LiaallApiService liaallApiService;

    @Autowired
    private SettleContext settleContext;

    @Autowired
    private TransactionHelpService transactionHelpService;

    /**
     * 表外记账试算服务
     * @param liaallRequest
     * @return ResponseSet<LiaallResponse>
     */
    @ApiOperation("表外记账试算服务")
    public ResponseSet<LiaallResponse> calcLiaall(LiaallRequest<T1, T2> liaallRequest) {
        try {
            settleContext.loadSettleSession(liaallRequest.getTransName(), liaallRequest.getUserId(), liaallRequest.getRec(), liaallRequest.getPtsList());
            return ResponseSet.simpleSuccess(liaallApiService.calcLiaall(liaallRequest));
        } catch (Exception e) {
            throw e;
        } finally {
            transactionHelpService.clearLiaallSet();
            SettleContext.removeUserSession();
        }
    }

    public ResponseSet<LiaallVo> calcTenset(LiaallVo liaallVo) {
        return ResponseSet.simpleSuccess(liaallApiService.calcTenset(liaallVo));
    }
}
