美文网首页
[原创]smarttable扩展model自定义列名

[原创]smarttable扩展model自定义列名

作者: 吉凶以情迁 | 来源:发表于2023-04-11 15:43 被阅读0次
    
        /**
         * 获取Map中所有字段
         * 暂时只支持Map中List数据解析 不支持数组[]
         */
        public static void getMapColumn(List<Column> columns, String fieldName, String parentKey, List<Object> mapList, IFormat<String> keyFormat) {
            if (mapList != null && mapList.size() > 0) {
                Object o = mapList.get(0);
                if (o != null) {
                    if (o instanceof Map) {
                        Map<String, Object> map = (Map<String, Object>) o;
                        //暂时只能解析json每个层级一个Array
                        boolean isOneArray = true;
                        for (Map.Entry<String, Object> entry : map.entrySet()) {
                            String key = entry.getKey();
                            Object val = entry.getValue();
                            if (ArrayColumn.isList(val)) {
                                if (isOneArray) {
                                    List<Object> list = ((List) val);
                                    getMapColumn(columns, fieldName + key + ".", key, list, keyFormat);
                                    isOneArray = false;
                                }
                            } else {
                                String columnName = keyFormat == null ? key : keyFormat.format(key);
                                MapColumn<Object> column = new MapColumn<>(columnName, fieldName + key);
                                columns.add(column);
                            }
                        }
                    } else if (o instanceof CustomColumn) {
                        CustomColumn customColumn = (CustomColumn) o;
                        String[] keys = customColumn.getColumns();
                        //暂时只能解析json每个层级一个Array
                        boolean isOneArray = true;
                        if (keys != null) {
                            for (String key : keys) {
                                Object val = customColumn.getValueByColumnName(key);
                                if (ArrayColumn.isList(val)) {
                                    if (isOneArray) {
                                        List<Object> list = ((List) val);
                                        getMapColumn(columns, fieldName + key + ".", key, list, keyFormat);
                                        isOneArray = false;
                                    }
                                } else {
                                    String columnName = keyFormat == null ? key : keyFormat.format(key);
                                    MapColumn<Object> column = new MapColumn<>(columnName, fieldName + key);
                                    columns.add(column);
                                }
                            }
                        }
                    } else {
                        String columnName = keyFormat == null ? parentKey : keyFormat.format(parentKey);
                        MapColumn<Object> column = new MapColumn<>(columnName, fieldName, false);
    
                        columns.add(column);
                    }
                }
            }
        }
    
        public interface CustomColumn {
    
            String[] getColumns();
    
            Object getValueByColumnName(String columnName);
        }
    

    调整MapColumn的方法

    
        protected void getFieldData(String[] fieldNames,int start,Object child,int level,boolean isFoot) throws NoSuchFieldException, IllegalAccessException {
    
            for (int i = start; i < fieldNames.length; i++) {
                if (child == null) {
                    addData(null, isFoot);
                    countColumnValue(null);
                    getStructure().putNull(level,isFoot);
                    break;
                }
                if (child instanceof Map) {
                    child = ((Map) child).get(fieldNames[i]);
                    if (!isList(child)) {
                        if (i == fieldNames.length - 1) {
                            if (child == null) {
                                getStructure().putNull(level,isFoot);
                            }
                            T t = (T) child;
                            addData(t, true);
                            countColumnValue(t);
                        }
                    } else {
                        level++;
                        if (child.getClass().isArray()) {
                            isArrayColumn = true;
                            T[] data = (T[]) child;
                            setArrayType(ARRAY);
                            for (Object d : data) {
                                if (i == fieldNames.length - 1) {
                                    addData((T) d, true);
                                } else {
                                    getFieldData(fieldNames, i + 1, d, level, true);
                                }
                            }
                            getStructure().put(level - 1, data.length,isFoot);
                        } else {
                            List data = (List) child;
                            setArrayType(LIST);
                            isArrayColumn = true;
                            for (Object d : data) {
                                if (i == fieldNames.length - 1) {
                                    T t = (T) d;
                                    addData(t, true);
                                } else {
                                    getFieldData(fieldNames, i + 1, d, level, true);
                                }
    
                            }
                            getStructure().put(level - 1, data.size(),isFoot);
                        }
                        break;
                    }
                } else  if (child instanceof MapTableData.CustomColumn) {
                    MapTableData.CustomColumn customColumn = (MapTableData.CustomColumn) child;
                    String fieldName = fieldNames[i];
                    child = customColumn.getValueByColumnName(fieldName);
                    if (!isList(child)) {
                        if (i == fieldNames.length - 1) {
                            if (child == null) {
                                getStructure().putNull(level,isFoot);
                            }
                            T t = (T) child;
                            addData(t, true);
                            countColumnValue(t);
                        }
                    } else {
                        level++;
                        if (child.getClass().isArray()) {
                            isArrayColumn = true;
                            T[] data = (T[]) child;
                            setArrayType(ARRAY);
                            for (Object d : data) {
                                if (i == fieldNames.length - 1) {
                                    addData((T) d, true);
                                } else {
                                    getFieldData(fieldNames, i + 1, d, level, true);
                                }
                            }
                            getStructure().put(level - 1, data.length,isFoot);
                        } else {
                            List data = (List) child;
                            setArrayType(LIST);
                            isArrayColumn = true;
                            for (Object d : data) {
                                if (i == fieldNames.length - 1) {
                                    T t = (T) d;
                                    addData(t, true);
                                } else {
                                    getFieldData(fieldNames, i + 1, d, level, true);
                                }
    
                            }
                            getStructure().put(level - 1, data.size(),isFoot);
                        }
                        break;
                    }
                }
            }
        }
    
    

    实现model

    
     @Override
        public String[] getColumns() {
            return new String[]{"xx", "bb"};
    
        }
    
        @Override
        public Object getValueByColumnName(String columnName) {
            switch (columnName) {
                case "xx":
                    return BZLotNo;
                case "bb":
                    return jitai;
              
                default:
                    return "未知:"+columnName;
            }
    
        }
    
    

    相关文章

      网友评论

          本文标题:[原创]smarttable扩展model自定义列名

          本文链接:https://www.haomeiwen.com/subject/lgtpldtx.html