package com.vci.starter.web.clientutil;
|
|
import com.vci.starter.web.exception.VciBaseException;
|
import com.vci.starter.web.pagemodel.BaseResult;
|
import com.vci.starter.web.pagemodel.DataGrid;
|
import com.vci.starter.web.util.LangBaseUtil;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* 默认的客户端调用类
|
* @author weidy
|
*/
|
public interface BaseClientUtil{
|
|
/**
|
* 使用调用器查询data类型的属性
|
* @param interfaceName 接口的名称,可以不要多语
|
* @param clientUtilProcesser 调用器执行函数
|
* @param <T> 返回结果的类型
|
* @return 列表数据
|
* @throws VciBaseException 参数错误,调用错误会抛出异常
|
*/
|
default <T> List<T> queryData(String interfaceName,ClientUtilProcesser<T> clientUtilProcesser) throws VciBaseException {
|
List<T> dataList = new ArrayList<>();
|
BaseResult<T> result = queryByProvider(interfaceName,clientUtilProcesser);
|
dataList.addAll(result.getData());
|
return dataList;
|
}
|
|
/**
|
* 使用调用器查询
|
* @param interfaceName 接口的名称
|
* @param clientUtilProcesser 调用器执行函数
|
* @param <T> 返回的类型
|
* @return 执行的结果
|
* @throws VciBaseException 调用错误的时候会抛出异常
|
*/
|
default <T> BaseResult<T> queryByProvider(String interfaceName,ClientUtilProcesser<T> clientUtilProcesser) throws VciBaseException {
|
try{
|
BaseResult<T> result = null;
|
if (clientUtilProcesser != null ) {
|
result = clientUtilProcesser.queryByProvider();
|
}
|
if(result == null){
|
throw new VciBaseException("调用【{0}】接口,服务端没有返回值",new String[]{interfaceName});
|
}
|
if(!result.isSuccess()){
|
throw new VciBaseException(result.getMsg(),result.getMsgObjs());
|
}
|
return result;
|
}catch (VciBaseException e){
|
throw e;
|
}catch (Throwable e){
|
throw new VciBaseException(LangBaseUtil.getErrorMsg(e),new String[0],e);
|
}
|
}
|
|
/**
|
* 使用调用查询obj类型的属性
|
* @param interfaceName 接口方法的名字
|
* @param clientUtilProcesser 调用器执行函数
|
* @param <T> 返回的结果累成,取决于调用器的返回值
|
* @return obj属性的值
|
* @throws VciBaseException 调用错误时会抛出异常
|
*/
|
default <T> T queryObj(String interfaceName,ClientUtilProcesser<T> clientUtilProcesser) throws VciBaseException {
|
return queryByProvider(interfaceName,clientUtilProcesser).getObj();
|
}
|
|
/**
|
* 查询列表数据
|
* @param interfaceName 接口方法的名字
|
* @param clientUtilProcesser 调用器执行函数
|
* @param <T> 返回的结果,取决于调用器的返回值
|
* @return 列表数据
|
* @throws VciBaseException 调用错误时会抛出异常
|
*/
|
default <T> DataGrid<T> queryGrid(String interfaceName,ClientUtilProcesser<T> clientUtilProcesser) throws VciBaseException{
|
BaseResult<T> result = queryByProvider(interfaceName,clientUtilProcesser);
|
DataGrid<T> dataGrid = new DataGrid<>();
|
if(result.getData()!=null) {
|
dataGrid.setData(result.getData().stream().collect(Collectors.toList()));
|
}
|
dataGrid.setTotal(result.getTotal());
|
return dataGrid;
|
}
|
|
/**
|
* 执行数据,返回执行结果
|
* @param interfaceName 接口方法的名字
|
* @param clientUtilProcesser 调用器执行函数
|
* @param <T> 返回的结果,取决于调用器的返回值
|
* @return true表示成功,失败的时候会直接抛出异常
|
* @throws VciBaseException 调用错误时会抛出异常
|
*/
|
default <T> boolean executeData(String interfaceName,ClientUtilProcesser<T> clientUtilProcesser) throws VciBaseException{
|
BaseResult<T> result = queryByProvider(interfaceName,clientUtilProcesser);
|
return result.isSuccess();
|
}
|
}
|