数据可视化-如何自定义查询数据方法

场景

根据测试商品,汇总数据通过测试统计商品透出到数据可视化图表数据;

  • 统计商品类目的最大库存以及平均售价信息

测试商品模型

@Model.model(DemoItem.MODEL_MODEL)
@Model(displayName = "测试商品", labelFields = "name")
@Model.Code(sequence = "SEQ", prefix = "IT", size = 8)
public class DemoItem extends CodeModel {

    private static final long serialVersionUID = -5104390780952631397L;

    public static final String MODEL_MODEL = "demo.DemoItem";

    @Field.String
    @Field(displayName = "商品名称")
    private String name;

    @Field.Html
    @Field(displayName = "商品描述")
    private String description;

    @Field.Money(D=2)
    @Field(displayName = "商品价格")
    private BigDecimal itemPrice;

    @Field.Integer
    @Field(displayName = "商品库存")
    private Long inventoryQuantity;

    ....

测试商品统计

@Model.model(DemoItemStatistics.MODEL_MODEL)
@Model(displayName = "测试商品统计", labelFields = "name")
public class DemoItemStatistics extends IdModel {

    private static final long serialVersionUID = 5626273740800455515L;

    public static final String MODEL_MODEL = "demo.DemoItemStatistics";

    @Field.String
    @Field(displayName = "类目名称")
    private String categoryName;

    @Field.Integer
    @Field(displayName = "商品库存")
    private Long inventoryQuantity;

    @Field.Money
    @Field(displayName = "商品价格")
    private BigDecimal itemPrice;
}

自定义商品类目统计数据

【注意】 图表设计器能获取到的接口需指定:category = FunctionCategoryEnum.QUERY_PAGE,且出参和入参类型要与本示例一致

@Function.Advanced(type = FunctionTypeEnum.QUERY, displayName = "商品统计列表", category = FunctionCategoryEnum.QUERY_PAGE)
@Function.fun(FunctionConstants.queryPage)
@Function(openLevel = {FunctionOpenEnum.LOCAL, FunctionOpenEnum.REMOTE, FunctionOpenEnum.API})
public Pagination<DemoItemStatistics> queryPage(Pagination<DemoItemStatistics> page, IWrapper<DemoItemStatistics> queryWrapper) {
    List<DemoItemStatistics> list = new ArrayList<>();

        List<DemoItem> items = demoItemService.queryListByWrapper(Pops.<DemoItem>lambdaQuery()
                .from(DemoItem.MODEL_MODEL)
                .eq(DemoItem::getStatus, ItemStatusEnum.ACTIVE));
        if(CollectionUtils.isEmpty(items)) return page;
        Map<Long, List<DemoItem>> itemMap = items.stream().collect(Collectors.groupingBy(DemoItem::getCategoryId));

        for (Map.Entry<Long, List<DemoItem>> longListEntry : itemMap.entrySet()) {
            long categoryId = longListEntry.getKey();
            List<DemoItem> demoItems = longListEntry.getValue();

            DemoItemCategory itemCategory = new DemoItemCategory().queryById(categoryId);
            DemoItemStatistics itemStatistics = new DemoItemStatistics();
            itemStatistics.setCategoryName(itemCategory.getName());
            //该类目商品的平均价
            itemStatistics.setItemPrice(BigDecimal.valueOf(demoItems.stream().mapToDouble(t->t.getItemPrice().floatValue()).average().getAsDouble()));
            //该类目商品的最大库存
            itemStatistics.setInventoryQuantity(demoItems.stream().mapToLong(t->t.getInventoryQuantity()).max().getAsLong());
            list.add(itemStatistics);
        }
        page.setContent(list);
    return page;
}

场景图表效果

数据可视化-如何自定义查询数据方法

传输模型定义自定义查询方法

定义传输模型

package pro.shushi.pamirs.demo.api.tmodel;

import pro.shushi.pamirs.meta.annotation.Field;
import pro.shushi.pamirs.meta.annotation.Model;
import pro.shushi.pamirs.meta.base.TransientModel;

import java.math.BigDecimal;

@Model.model(DemoItemTransient.MODEL_MODEL)
@Model(displayName = "商品传输模型")
public class DemoItemTransient extends TransientModel {

    public static final String MODEL_MODEL = "demo.DemoItemTransient";

    @Field.Integer
    @Field(displayName ="id")
    private Long id;

    @Field.String
    @Field(displayName ="名称")
    private String name;

    @Field.Money(D=2)
    @Field(displayName = "商品价格")
    private BigDecimal itemPrice;

}

定义传输模型查询数据方法

package pro.shushi.pamirs.demo.core.action;

import org.springframework.stereotype.Component;
import pro.shushi.pamirs.demo.api.model.DemoItem;
import pro.shushi.pamirs.demo.api.tmodel.DemoItemTransient;
import pro.shushi.pamirs.framework.connectors.data.sql.Pops;
import pro.shushi.pamirs.framework.connectors.data.sql.query.LambdaQueryWrapper;
import pro.shushi.pamirs.meta.annotation.Function;
import pro.shushi.pamirs.meta.annotation.Model;
import pro.shushi.pamirs.meta.api.dto.condition.Pagination;
import pro.shushi.pamirs.meta.api.dto.wrapper.IWrapper;
import pro.shushi.pamirs.meta.enmu.FunctionCategoryEnum;
import pro.shushi.pamirs.meta.enmu.FunctionOpenEnum;
import pro.shushi.pamirs.meta.enmu.FunctionTypeEnum;

import java.util.List;
import java.util.stream.Collectors;

@Component
@Model.model(DemoItemTransient.MODEL_MODEL)
public class DemoItemTransientAction {

    @Function.Advanced(type = FunctionTypeEnum.QUERY, displayName = "查询列表", category = FunctionCategoryEnum.QUERY_PAGE)
    @Function(openLevel = {FunctionOpenEnum.LOCAL, FunctionOpenEnum.REMOTE})
    public Pagination<DemoItemTransient> queryPage(Pagination<DemoItemTransient> page, IWrapper<DemoItemTransient> queryWrapper) {
        Pagination<DemoItem> itemPage = new Pagination<>();
        itemPage.setCurrentPage(page.getCurrentPage());
        itemPage.setSize(page.getSize());

        LambdaQueryWrapper<DemoItem> lambdaQueryWrapper = Pops.<DemoItem>lambdaQuery().from(DemoItem.MODEL_MODEL);
        Pagination<DemoItem> result = new DemoItem().queryPage(itemPage, lambdaQueryWrapper);
        List<DemoItemTransient> list = result.getContent().stream().map(a -> {
            DemoItemTransient item = new DemoItemTransient();
            item.setId(a.getId());
            item.setName(a.getName());
            item.setItemPrice(a.getItemPrice());
            return item;
        }).collect(Collectors.toList());

        page.setContent(list);
        return page;
    }
}

Oinone社区 作者:数式-海波原创文章,如若转载,请注明出处:https://doc.oinone.top/designer/datadesigner/7349.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(0)
数式-海波的头像数式-海波数式管理员
上一篇 2024年5月18日 上午10:33
下一篇 2024年5月18日 下午3:14

相关推荐

  • 数据可视化-图表在业务页面如何加动态查询条件

    前提 阅读此文章前,默认读者已了解了界面设计器和数据可视化的基本操作图表基础操作文档 1.新建一个表单视图,要求表单的模型里有动态查询条件的字段 从左侧组件库找到“图表”组件,拖入到视图区域,在右侧属性面板选择已经发布过的图表 2.将“组件库”->“模型”下的查询条件字段拖入到视图区域,然后再选择图表,设置图表组件属性面板内的“查询条件” 查询条件为r…

    2024年8月28日
    58400
  • 数据可视化-项目中如何引用图表、报表、大屏

    依赖包 在业务工程的pom中增加数据可视化运行的依赖包 参考文档 如何添加数据可视化运行时依赖 数据可视化设计图表、报表和数据大屏 在数据可视化中设计好业务合适的图表,并且发布以后,在界面设计器中可以嵌入该图表同样处理的还有报表 在界面设计器中在页面中透出图表、报表和数据大屏 设置图表,选择已经对应的图表 可在表单以及详情的页面中嵌入对应的图表、报表和数据大…

    2024年5月18日
    66000
  • 数据可视化的导入导出

    目录 依赖包安装GraphQL的工具登录gql导出生成json文件子业务工程中导入示例代码 简介 通过调用导出接口,将设计器的设计数据与元数据打包导出到文件中。提供了download/export两类接口。 依赖包 <dependency> <groupId>pro.shushi.pamirs.metadata.manager<…

    2024年5月16日
    1.0K00
  • 如何添加数据可视化运行时依赖

    前端 package.json中新增依赖 @kunlun/data-designer-open-pc,版本跟@kunlun/dependencies的填一样 src/main.ts内导入依赖 import 'reflect-metadata'; import { VueOioProvider } from '@kunlun/de…

    2024年5月15日
    46500
  • 数据可视化中图表的低无一体

    介绍 数据可视化提供了自定义图表模板的功能,以满足现有图表模板无法满足业务需求的情况。 如何使用 点击数据可视化页面头部的“图表模板” 点击创建按钮后弹出图表模板表单,填写后提交保存 找到刚刚创建的图表模板,点击操作栏中的“低无一体”按钮 点击弹窗底部的“生成sdk”按钮 上一步操作完成后会重新刷新页面,再次找到该条数据,点击“低无一体”按钮,再次进来可以看…

    2023年11月1日
    42700

发表回复

登录后才能评论