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 返回结果的类型 * @return 列表数据 * @throws VciBaseException 参数错误,调用错误会抛出异常 */ default List queryData(String interfaceName,ClientUtilProcesser clientUtilProcesser) throws VciBaseException { List dataList = new ArrayList<>(); BaseResult result = queryByProvider(interfaceName,clientUtilProcesser); dataList.addAll(result.getData()); return dataList; } /** * 使用调用器查询 * @param interfaceName 接口的名称 * @param clientUtilProcesser 调用器执行函数 * @param 返回的类型 * @return 执行的结果 * @throws VciBaseException 调用错误的时候会抛出异常 */ default BaseResult queryByProvider(String interfaceName,ClientUtilProcesser clientUtilProcesser) throws VciBaseException { try{ BaseResult 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 返回的结果累成,取决于调用器的返回值 * @return obj属性的值 * @throws VciBaseException 调用错误时会抛出异常 */ default T queryObj(String interfaceName,ClientUtilProcesser clientUtilProcesser) throws VciBaseException { return queryByProvider(interfaceName,clientUtilProcesser).getObj(); } /** * 查询列表数据 * @param interfaceName 接口方法的名字 * @param clientUtilProcesser 调用器执行函数 * @param 返回的结果,取决于调用器的返回值 * @return 列表数据 * @throws VciBaseException 调用错误时会抛出异常 */ default DataGrid queryGrid(String interfaceName,ClientUtilProcesser clientUtilProcesser) throws VciBaseException{ BaseResult result = queryByProvider(interfaceName,clientUtilProcesser); DataGrid 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 返回的结果,取决于调用器的返回值 * @return true表示成功,失败的时候会直接抛出异常 * @throws VciBaseException 调用错误时会抛出异常 */ default boolean executeData(String interfaceName,ClientUtilProcesser clientUtilProcesser) throws VciBaseException{ BaseResult result = queryByProvider(interfaceName,clientUtilProcesser); return result.isSuccess(); } }