【JAVA】查询数据返回时自动进行汇总统计,适用于LayUI表格需要统计的查询

查询数据返回时自动进行汇总统计,适用于LayUI表格需要统计的查询

· java spring boot 查询报表数据时自动进行数据统计Code,主要适用LayUI表格需要统计汇总时,其它情况也可适应,主要看需求,按需调整。

数据返回类

import com.central.common.utils.CommonUtils;
import lombok.Data;

import java.util.List;

/**
 * layUI 统计表格专用数据返回结果集,自动计算合计
 * @Auther WangXinXi
 * @Date 2021/1/21
 */
@Data
public class ResultReport<T> {
    /**
     * 总数
     */
    private Long count;

    /**
     * 是否成功:0 成功、1 失败
     */
    private int code;

    /**
     * 提示消息
     */
    private String msg;

    /**
     * 结果集
     */
    private List<T> data;

    /**
     * 合计内容
     */
    private T totalRow;

    /**
     * 合计内容需要忽略的字段
     */
    public static List<String> ignoreFieldNames;


    public List<T> getData() {
        return data;
    }

    public void setData(List<T> data) {
        this.data = data;
        this.count = Long.valueOf(data.size());

        if (!CommonUtils.ListIsNullOrEmpty(data)) {
            try {
                // 通过反射获取model的真实类型
                Class<T> clazz = (Class<T>) data.get(0).getClass();
                // 通过反射创建model的实例
                totalRow = clazz.newInstance();

				// 计算每列数据合计
                this.totalRow = CommonUtils.setSumListsToBeanIgnore(totalRow, data, ignoreFieldNames);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }


    public static <T> ResultReport<T> of(List<T> datas, Integer code, String msg) {
        ResultReport result = new ResultReport();
        result.code = code;
        result.setData(datas);
        result.msg = msg;
        return result;
    }

    public static <T> ResultReport<T> result(List<T> model) {
        if (!CommonUtils.isNullOrEmpty(model)) {
            return of(model, CodeEnum.SUCCESS.getCode(), "成功!");
        } else {
            return of(null, CodeEnum.ERROR.getCode(), "失败!");
        }
    }

}

数据求和方法

/**
     *
     * @param <T>
     * @param all 返回总和Bean
     * @param list 求和数据
     * @param ignoreFieldNames 忽略求和字段
     * @return
     */
    public static <T> T setSumListsToBeanIgnore(T all,List <T> list,List<String> ignoreFieldNames){
        Field[] fields = all.getClass().getDeclaredFields();
        for(int i=0;i<fields.length;i++) {
            try {
                String field = fields[i].getName();
                if(ignoreFieldNames.contains(field)) {
                    continue;
                }
                Integer intFieldAll = 0;
                BigDecimal bigFieldAll = BigDecimal.ZERO;
                Double doubleFieldAll = 0.0;
                for(Object  bean :list) {
                    fields[i].setAccessible(true);
                    Object value = fields[i].get(bean);
                    if (value instanceof Integer) {
                        intFieldAll = intFieldAll+(Integer)value;
                    }else if(value instanceof BigDecimal) {
                        bigFieldAll = bigFieldAll.add((BigDecimal)value);
                    }else if(value instanceof Double) {
                        doubleFieldAll = doubleFieldAll + (Double)value;
                    }else {
                        intFieldAll = -1;
                        bigFieldAll = null;
                        break;
                    }
                }
                if(bigFieldAll != null && intFieldAll != -1 && doubleFieldAll != -1) {
                    if(intFieldAll > 0) {
                        BeanUtils.setProperty(all,field,intFieldAll);
                    }else if(bigFieldAll.doubleValue() > 0) {
                        BeanUtils.setProperty(all,field,bigFieldAll);
                    }else if(doubleFieldAll > 0) {
                        BeanUtils.setProperty(all,field,doubleFieldAll);
                    }
                }
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
        return all;
    }

调用示例

// 忽略不参加计算的属性名称集合
List<String> ignoreFieldNames = new ArrayList<>();
ignoreFieldNames.add("name");
ResultReport.ignoreFieldNames = ignoreFieldNames;
List<OrderBaseReportDto> datas = orderInfoMapper.getOrderReport(params);
return ResultReport.result(datas);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 关于layui数据表格查询后台怎么写的问题,我可以给您一些指导性的回答。如果您使用layui数据表格,您需要编写后台代码来处理数据查询请求。您可以使用服务器端脚本如PHP、Java、Python等编写后台代码,处理查询请求并返回符合条件的数据。您需要根据您的具体需求和数据结构设计后台代码的逻辑和查询语句。建议您在编写后台代码之前先了解layui数据表格的相关文档和示例代码,以便更好地理解和使用该插件。 ### 回答2: Layui是一款基于JavaScript的前端框架,它包含了丰富的UI组件,可以快速搭建出漂亮的界面。其中,Layui数据表格是一种常用的组件,用于展示和交互数据。 在实现Layui数据表格查询功能,我们需要做以下几个步骤: 1. 后台接收参数:前端传递查询条件给后台,一般使用POST方式传递,后台需要接收这些参数。可以使用框架如SpringMVC提供的注解@RequestParam来获取参数值。 2. 构建查询条件:后台接收到参数后,根据这些参数构建查询条件。可以使用SQL语句,例如使用where子句拼接查询条件,或者使用框架如MyBatis提供的动态SQL来实现条件构建。 3. 执行查询操作:使用构建好的查询条件执行查询操作,查询出满足条件的数据。可以通过调用数据库操作API来实现,例如使用JDBC、MyBatis等。 4. 分页查询:对于大数据量的表格,我们一般需要进行分页查询,即每次只查询一页的数据。后台需要根据前端传递的分页参数,例如当前页码和每页显示数据量,计算出查询的起始位置和结束位置,并在查询条件中加入这些限制条件。 5. 返回查询结果:将查询出的结果返回给前端,一般使用JSON格式进行返回。可以使用框架提供的工具类将查询结果转换成JSON字符串,然后通过响应对象返回给前端。 综上所述,Layui数据表格查询后台的实现步骤包括接收参数、构建查询条件、执行查询操作、分页查询返回查询结果。通过以上步骤,就可以实现Layui数据表格查询功能。 ### 回答3: Layui是一个基于前端框架的开源库,它提供了丰富的组件和工具,用于简化前端开发。其中的数据表格组件可以进行数据的展示、编辑、删除等操作。要实现Layui数据表格查询功能,需要在后台进行相应的编写。 首先,需要定义一个后台接口用于接收前端传递过来的查询条件。可以使用常见的后台开发框架,如Spring MVC或Express.js。在该接口中,需要解析前端传递的查询条件,并根据条件在数据库中进行相应的查询操作。 接着,根据接口中接收到的查询条件进行数据查询。可以使用SQL语句进行查询,也可以使用ORM框架进行对象关系映射。根据具体的业务需求,编写相应的查询语句或者利用ORM框架提供的API进行查询操作。 查询数据后,需要查询结果封装成JSON格式返回给前端。可以使用后台框架提供的JSON转换工具,将查询结果转换为JSON字符串。将查询结果返回给前端之后,前端可以根据返回数据进行展示或者其他的操作。 在前端的页面中使用Layui数据表格组件进行展示,需要设置数据源为后台接口的URL,并指定查询条件。可以使用Layui数据表格配置项进行相应的设置,如设置列属性、分页等。通过发送Ajax请求,请求后台的接口,并将查询条件作为参数传递。接收到后台返回数据后,根据数据进行表格的渲染和展示。 总之,实现Layui数据表格查询功能,需要在后台编写相应的接口、数据查询返回数据的方法。前端需要配置页面和发送请求,接收并处理后台返回查询结果。这样就可以实现Layui数据表格查询功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值