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

场景

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

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

测试商品模型

@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

相关推荐

  • 数据可视化-项目中如何引用图表、报表、大屏

    依赖包 在业务工程的pom中增加数据可视化运行的依赖包 pro.shushi.pamirs.data.visualization pamirs-data-visualization-core 数据可视化设计图表、报表和数据大屏 在数据可视化中设计好业务合适的图表,并且发布以后,在界面设计器中可以嵌入该图表同样处理的还有报表 在界面设计器中在页面中透出图表、报…

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

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

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

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

    2023年11月1日
    7800
  • 如何添加数据可视化运行时依赖

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

    2024年5月15日
    8400

发表回复

登录后才能评论