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

2023-04-11  本文已影响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;
        }

    }

上一篇下一篇

猜你喜欢

热点阅读