当前位置: 首页 > article >正文

动态透视报表 + 查询接口 + Excel导出

动态透视报表 查询接口 Excel导出✅动态行维度产品 / 型号 / 项目 任意组合✅动态列维度月份✅a / f 子表头✅SQL 透视适合 GaussDB✅查询接口 EasyExcel 导出接口✅可复用报表引擎整体架构Controller ↓ ReportService ↓ PivotEngine核心透视引擎 ↓ MyBatis ↓ GaussDB一、数据库示例表sales_planproduct model itemmonthtypevalue示例数据productmodelitemmonthtypevalueAA1P11月a10AA1P12月a20AA1P13月a30AA1P14月f40二、报表请求参数核心publicclassReportRequest{// 行维度privateListStringrowDims;// 列维度privateStringcolDim;// 指标privateStringmeasure;}示例{rowDims:[product,model,item],colDim:month,measure:value}三、透视SQL生成引擎核心类PivotEnginepublicclassPivotEngine{生成透视 SQLpublicstaticStringbuildPivotSql(Stringtable,ListStringrowDims,StringcolDim,Stringmeasure,ListStringcolValues){StringBuildersqlnewStringBuilder();sql.append(SELECT );// 行维度for(Stringr:rowDims){sql.append(r).append(,);}// 透视列for(Stringv:colValues){sql.append(SUM(CASE WHEN ).append(colDim).append().append(v).append( THEN ).append(measure).append( ELSE 0 END) AS \).append(v).append(\,);}sql.append(SUM().append(measure).append() total );sql.append(FROM ).append(table);sql.append( GROUP BY );for(inti0;irowDims.size();i){sql.append(rowDims.get(i));if(irowDims.size()-1){sql.append(,);}}returnsql.toString();}生成SQLSELECTproduct,model,item,SUM(CASEWHENmonth1月THENvalueELSE0END)1月,SUM(CASEWHENmonth2月THENvalueELSE0END)2月,SUM(CASEWHENmonth3月THENvalueELSE0END)3月,SUM(value)totalFROMsales_planGROUPBYproduct,model,item四、MyBatisMapperpublicinterfaceReportMapper{查询列维度值Select(SELECT DISTINCT ${col} FROM ${table} ORDER BY ${col})ListStringqueryColValues(Param(table)Stringtable,Param(col)Stringcol);执行透视SQLSelect(${sql})ListMapString,ObjectqueryPivot(Param(sql)Stringsql);五、ServiceServicepublicclassReportService{AutowiredReportMappermapper;核心逻辑publicMapString,Objectreport(ReportRequestreq){// 1 查询月份ListStringcolsmapper.queryColValues(sales_plan,req.getColDim());// 2 构建SQLStringsqlPivotEngine.buildPivotSql(sales_plan,req.getRowDims(),req.getColDim(),req.getMeasure(),cols);// 3 执行ListMapString,Objectdatamapper.queryPivot(sql);MapString,ObjectresultnewHashMap();result.put(cols,cols);result.put(data,data);returnresult;}六、查询接口PostMapping(/report/query)publicMapString,Objectquery(RequestBodyReportRequestreq){returnservice.report(req);}返回数据{cols:[1月,2月,3月,4月],data:[{product:A,model:A1,item:P1,1月:10,2月:20,3月:30,4月:40,total:100}]}七、EasyExcel 动态表头生成表头publicstaticListListStringbuildHead(ListStringrowDims,ListStringmonths,MapString,StringtypeMap){ListListStringheadnewArrayList();for(Stringr:rowDims){head.add(Arrays.asList(r));}for(Stringm:months){head.add(Arrays.asList(m,typeMap.get(m)));}head.add(Arrays.asList(合计));returnhead;}八、Excel导出接口PostMapping(/report/export)publicvoidexport(RequestBodyReportRequestreq,HttpServletResponseresponse)throwsException{MapString,Objectresultservice.report(req);ListStringcols(ListString)result.get(cols);ListMapString,Objectdata(ListMapString,Object)result.get(data);ListListStringheadExcelUtil.buildHead(req.getRowDims(),cols,getTypeMap());ListListObjectrowsExcelUtil.buildRows(req.getRowDims(),cols,data);EasyExcel.write(response.getOutputStream()).head(head).sheet(报表).doWrite(rows);}九、最终能力这个报表引擎支持能力支持动态行维度✅动态列维度✅SQL透视✅查询接口✅Excel导出✅EasyExcel动态表头✅百万行导出✅十、最终效果与你图片一样产品 型号 项目 1月 2月 3月 4月 5月 合计 a a a f f A A1 P1 10 20 30 40 50 150 B B1 P1 20 40 60 80 100 300

相关文章:

动态透视报表 + 查询接口 + Excel导出

动态透视报表 查询接口 Excel导出 ✅ 动态行维度(产品 / 型号 / 项目 任意组合)✅ 动态列维度(月份)✅ a / f 子表头✅ SQL 透视(适合 GaussDB)✅ 查询接口 EasyExcel 导出接口✅ 可复用报表引擎 整体…...

SDXL 1.0插件开发:Photoshop脚本自动化集成

SDXL 1.0插件开发:Photoshop脚本自动化集成 1. 为什么需要Photoshop与SDXL 1.0的深度协作 设计师每天面对的不是单一工具,而是一整套工作流。当AI生成图像成为创意起点,问题就来了:生成的图片如何快速进入专业设计环节&#xff…...

AI 卖课博主年赚 120 万?原本我想打假,算完账我破防了

AI 卖课博主年赚 120 万?原本我想打假,算完账我破防了 大家好,我是马彪。 昨天晚上刷到一个博主,说自己一年赚了120万,其中90万来自卖课,才5万粉丝。我想这不扯淡呢吗,肯定又是吹牛想割韭菜。 现…...

Spring AI vs Python生态:Java开发者如何选择AI工具链?

Spring AI vs Python生态:Java开发者如何构建高效AI工具链? 当Java开发者第一次踏入AI应用开发领域时,往往会面临一个灵魂拷问:是拥抱Python生态的LangChain/LlamaIndex,还是坚持Java技术栈选择Spring AI?这…...

Phi-4-reasoning-vision-15B部署教程:开源大模型镜像适配国产GPU方案

Phi-4-reasoning-vision-15B部署教程:开源大模型镜像适配国产GPU方案 1. 模型介绍 Phi-4-reasoning-vision-15B是微软推出的视觉多模态推理模型,具备强大的图像理解和分析能力。这个15B参数规模的模型特别擅长处理需要结合视觉和语言理解的复杂任务。 …...

智能抢票系统:从技术实现到场景落地

智能抢票系统:从技术实现到场景落地 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 你是否曾遇到这样的场景:苦等数月的演唱会门票在开票瞬间售罄&…...

基于机器学习的驾驶疲劳检测,应该如何入门?

基于机器学习的驾驶疲劳检测可以说是本科/硕士毕设中性价比很高的一个题目:它既有充足的开源参考资料,又容易做出可视化的Demo,答辩时也比较讨喜。 我来帮你把这个看似庞大的项目拆解成流水线。 你不需要去手搓底层的神经网络,只…...

Winhance中文版:让Windows系统管理不再复杂的全能工具

Winhance中文版:让Windows系统管理不再复杂的全能工具 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh…...

嘉立创PCB打样被加价到170元?手把手教你用STM32H743飞控板案例解决‘拆单嫌疑’

STM32H743飞控板PCB打样避坑指南:如何巧妙应对嘉立创拆单判定 最近不少硬件开发者在使用嘉立创进行STM32H743飞控板PCB打样时,遇到了一个令人头疼的问题——原本33元的4层板打样价格突然飙升到170多元。这种情况往往是由于平台算法误判设计文件存在"…...

探秘书匠策AI:毕业论文创作的“全能助手”大揭秘

在学术探索的征途中,毕业论文如同一座巍峨的山峰,让无数学生既心怀憧憬又倍感压力。从选题迷茫到文献海捞,从结构搭建到内容雕琢,每一步都充满了挑战。但别怕,今天我们就来揭秘一位学术界的“全能助手”——书匠策AI&a…...

新手福音:用快马AI生成带详解注释的Arduino交通灯实验代码

作为一个刚接触单片机的新手,第一次看到Arduino开发板时既兴奋又迷茫。那些闪烁的LED灯和蜂鸣器背后到底藏着什么秘密?今天我就用InsCode(快马)平台来探索一个有趣的交通灯模拟项目,整个过程比想象中简单多了。 项目构思 我想做一个能模拟真实…...

【西瓜带你学设计模式 | 第四期 - 抽象工厂模式】抽象工厂模式 —— 定义、核心结构、实战示例、优缺点与适用场景及模式区别

文章目录前言1. 抽象工厂模式是什么?2. 解决什么问题?2.1 有多个“产品维度”,并且需要成套切换2.2 变化点分散导致代码难维护3. 核心结构4. 示例4.1 抽象产品:Slice(切片)4.2 抽象产品:Pulp&am…...

11.0592MHz晶振在51单片机串口通信中的优势解析

1. 为什么11.0592MHz晶振成为单片机工程师的首选在嵌入式系统设计中,晶振的选择往往决定了整个系统的稳定性和精度。作为一名从事单片机开发多年的工程师,我发现11.0592MHz的晶振在51单片机项目中出现的频率异常高。这绝非偶然,而是由一系列精…...

GLM-4.1V-9B-Base效果展示:艺术画作风格+主题+文化元素三重解析

GLM-4.1V-9B-Base效果展示:艺术画作风格主题文化元素三重解析 1. 视觉理解新标杆:GLM-4.1V-9B-Base简介 GLM-4.1V-9B-Base是智谱开源的一款视觉多模态理解模型,专为图像内容识别、场景描述和目标问答任务而设计。不同于普通的图像识别工具&…...

RWKV7-1.5B-G1A助力运维:利用Xshell脚本自动化模型部署与监控

RWKV7-1.5B-G1A助力运维:利用Xshell脚本自动化模型部署与监控 1. 引言 "又到周五下午4点,运维团队收到紧急需求——需要在10台服务器上部署最新的RWKV7-1.5B-G1A模型服务。"这样的场景对运维工程师来说再熟悉不过。传统的手动部署方式不仅耗…...

告别图库!用LiuJuan Z-Image为文章博客自动生成配图(保姆级教程)

告别图库!用LiuJuan Z-Image为文章博客自动生成配图(保姆级教程) 1. 为什么你需要这个工具? 作为一名内容创作者,我深知找配图的痛苦。记得上周为了给一篇技术文章配图,我花了整整40分钟在图库里翻找&…...

博德之门3 Mod管理器:解决Mod加载顺序被重置的终极指南 [特殊字符]

博德之门3 Mod管理器:解决Mod加载顺序被重置的终极指南 🎮 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 如果你在使用BG3ModManager(博德之门3模组…...

沉浸式翻译扩展常见问题解决方案

沉浸式翻译扩展常见问题解决方案 【免费下载链接】immersive-translate 沉浸式双语网页翻译扩展 , 支持输入框翻译, 鼠标悬停翻译, PDF, Epub, 字幕文件, TXT 文件翻译 - Immersive Dual Web Page Translation Extension 项目地址: https://gitcode.c…...

CCF和中国科协对NeurIPS更正投稿政策做出回应

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【顶会/顶刊】投稿交流群添加微信号:CVer2233,小助手拉你进群!扫描下方二维码,加入CVer学术星球!可以获得最新顶会/顶…...

Windows更新修复完全指南:从诊断到解决的系统更新问题处理方案

Windows更新修复完全指南:从诊断到解决的系统更新问题处理方案 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool Win…...

TVBoxOSC:电视盒子全能播放解决方案终极指南

TVBoxOSC:电视盒子全能播放解决方案终极指南 【免费下载链接】TVBoxOSC TVBoxOSC - 一个基于第三方项目的代码库,用于电视盒子的控制和管理。 项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC 你是否曾经为电视盒子播放视频时遇到格式…...

Android Studio中文插件:3分钟极速汉化,告别英文开发障碍

Android Studio中文插件:3分钟极速汉化,告别英文开发障碍 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack …...

PROJECT MOGFACE与Dify平台集成:快速构建无需编码的AI智能体应用

PROJECT MOGFACE与Dify平台集成:快速构建无需编码的AI智能体应用 最近在折腾AI应用开发的朋友,可能都有过类似的烦恼:手头有一个效果不错的模型,比如我们团队部署的PROJECT MOGFACE,想把它变成一个能对外服务的、功能…...

React+GSAP实战:5种酷炫滚动动画效果完整代码分享(含ScrollTrigger配置)

ReactGSAP实战:5种酷炫滚动动画效果完整代码分享(含ScrollTrigger配置) 在现代Web开发中,流畅的滚动动画已经成为提升用户体验的关键因素。作为前端开发者,我们经常需要实现各种吸引眼球的滚动效果,从简单的…...

TPAMI 2026 | 跨十大数据集验证,PoundNet重新审视AI图像检测范式

随着 AI 生成图像技术快速演进,伪造内容在网络传播风险持续上升,高鲁棒性检测技术因此成为学界与产业界关注的关键问题。然而,现有不少方法过于追求单一数据集上的短期收益,往往仅围绕“真/假”二分类目标对大规模预训练模型进行专…...

If、switch选择结构

if单选结构package 选择结构;import java.util.Scanner;public class If单选择结构 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out.println("请输入内容:");String sscanner.nextLine();//equals&#x…...

Leather Dress Collection 角色扮演效果:模拟不同风格的IT技术面试官

Leather Dress Collection 角色扮演效果:模拟不同风格的IT技术面试官 最近在玩一个挺有意思的AI工具,叫Leather Dress Collection。名字听起来有点怪,但它有个功能让我眼前一亮:角色扮演。你可以让它扮演各种角色,并且…...

AutoDL部署大模型后,除了Chat:手把手教你用本地API接口玩转文档总结、代码生成和智能客服

AutoDL部署大模型后,除了Chat:手把手教你用本地API接口玩转文档总结、代码生成和智能客服 当你已经在AutoDL上成功部署了大语言模型,并验证了基础的聊天功能后,是否思考过如何将这些能力真正融入日常工作流?本文将带你…...

多平台资源下载解决方案:res-downloader实现数字内容自由获取

多平台资源下载解决方案:res-downloader实现数字内容自由获取 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在数…...

告别虚拟机!Windows WSL2+GNU Radio玩转HackRF-One无线接收(避坑指南)

告别虚拟机!Windows WSL2GNU Radio玩转HackRF-One无线接收(避坑指南) 在软件定义无线电(SDR)领域,HackRF-One因其开源设计和亲民价格成为入门首选。然而传统虚拟机方案常因性能损耗、驱动兼容性问题让新手望…...