ludc
2025-01-10 19ec0269a9ce3a57ccfcd1d36585bb1c31977b60
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
104
105
106
107
108
109
110
111
112
113
114
package com.vci.web.service.uidataservice;
 
import com.alibaba.fastjson.JSON;
import com.vci.corba.query.data.KV;
import com.vci.pagemodel.UIFormDataVO;
import com.vci.query.UIDataGridQuery;
import com.vci.query.UIFormQuery;
import com.vci.query.UITreeQuery;
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.pagemodel.UIDataTree;
import com.vci.starter.web.util.Lcm.Func;
 
import java.util.*;
 
/**
 * ui数据查询基础服务(该接口定义了一些公共的数据查询方法和一些默认方法以供继承和使用)
 * @author ludc
 * @date 2024/12/4 11:28
 */
public interface UIDataBaseServiceI {
 
    /**
     * 前端请求传过来的mao的value会出现json串的情况,需要转成map对象,所以调用该方法进行转换
     * @param sourceData 源map对象
     */
    default Map<String,Object> convertMapValueJson2Map(Map<String,Object> sourceData){
        // TODO: 2024/12/2 Ludc 界面传过来的Map的value可能是一个Map,所以尝试转换
        Map<String, Object> convertMap = new HashMap<>();
        sourceData.keySet().stream().forEach(key->{
            Object obj = sourceData.get(key);
            try {
                if(Func.isNotEmpty(obj)){
                    convertMap.put(key, JSON.parseObject(obj.toString(), HashMap.class));
                }
            }catch (Exception e){
                //不抛出异常,如果转的时候报错就代表是String:String类型,直接往Map里面放
                convertMap.put(key,obj);
                //e.printStackTrace();
            }
        });
        return convertMap;
    }
 
    /**
     * 判断是否使用自定义类方式查询:(后续如果判断是自定义类还是自定义URL的逻辑有更改,也尽量统一在一个地方进行更改)
     * @param
     */
    default boolean isCustomClass(String bsCustomClassOrUrl){
        //有.就代表是类路径
        if(bsCustomClassOrUrl.contains(".") && bsCustomClassOrUrl.contains("\\")){
            return true;
        }
        return false;
    }
 
    /**
     * 将KV转成Map
     * @param kvs
     * @return
     */
    default  List<Map<String, Object>> convertKV2ListMap(KV[][] kvs) {
        // 将 KV[][] 转换为 Map
        List<Map<String, Object>> resulListMap = new ArrayList<>();
        if(Func.isEmpty(kvs)){
            return resulListMap;
        }
        for (KV[] kvArray : kvs) {
            Map<String, Object> map = new HashMap<>();
            for (KV kv : kvArray) {
                if (kv.key != null && kv.value != null) {
                    //返回全小写的
                    map.put(kv.key.toLowerCase(Locale.ROOT), kv.value);
                }
            }
            resulListMap.add(map);
        }
        return resulListMap;
    }
 
    /**
     * 获取表格的数据
     * @param dataGridQuery 表格查询,必须有业务类型名称和 表格的编号
     * @return DataGrid中data为Map<String,String>格式
     * @throws VciBaseException 查询出错的时候会抛出异常
     */
    DataGrid getDataForGrid(UIDataGridQuery dataGridQuery) throws Exception;
 
    /**
     * 获取表单的数据
     * @param formQuery 表单的查询条件
     * @return 表单的数据
     * @throws VciBaseException 查询出错的时候会抛出异常
     */
    UIFormDataVO getDataForForm(UIFormQuery formQuery) throws Exception;
 
    /**
     * 获取树形数据
     * @param treeQuery 树形查询条件
     * @return 树形数据
     * @throws VciBaseException 查询出错的时候会抛出异常
     */
    List<UIDataTree> getDataForTree(UITreeQuery treeQuery) throws Exception;
 
    /**
     * 获取树形数据(根据查询模板查询对象,主要用于action配置的查询模板情况下调用)
     * @param treeQuery 树形查询条件
     * @return 树形数据
     * @throws VciBaseException 查询出错的时候会抛出异常
     */
    BaseResult getDataByTemp(UITreeQuery treeQuery) throws Exception;
 
}