ludc
2025-01-16 5203081b68e3a8dc139d1807b2f8774e4a00a82a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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();
   }
}