导出excel按动态表头导出

一、实现代码 使用Map方式添加head头,对应填充值

  /*** 导出查看发车明细* @param query* @return*/@Overridepublic ExportResult monthResourcePlanDepartureProgressDetailsExportExcelData(ResourceSituationListQuery query) {log.info("导出参数:{}",DstJsonUtil.toString(query));//List<ResourcePlanShipDetailVO> shipDetail = resourcePlanService.getShipDetail(query);List<ResourcePlanShipDetailVO> shipDetail = resourceSituationCoreService.getCodData();if (CollectionUtils.isEmpty(shipDetail)) {log.error("导出数据为空");return null;}List<String> dispatchDate = new ArrayList<>();shipDetail.stream().forEach(e->{e.getShipDetails().stream().forEach(it->{dispatchDate.add(DstDateUtil.format(it.getDispatchDate(),DstDateUtil.Y_M_D));});});List<String> newDispatchDate = Lists.newArrayList(new HashSet(dispatchDate));List<String> newDispatchDateList = newDispatchDate.stream().sorted().collect(Collectors.toList());List<String> monthAndDays = new ArrayList<>();for (String date : newDispatchDateList) {monthAndDays.add(date);}List<String> headers = new ArrayList<String>() {{add("数据类型");add("资源情况编码");add("关联发车计划编码");add("大区城市");add("车辆品牌(属性)");add("车辆型号(属性)");add("车型族群(属性)");add("电池包度数(属性)");add("电池包厂商(属性)");add("车辆用途(属性)");add("发车总数");addAll(monthAndDays);}};List<String> columns = new ArrayList<String>() {{add("dataType");add("resourceSituationCode");add("shipCode");add("cityName");add("carBrandName");add("carModelName");add("carModelGroupName");add("esdTotalPowerName");add("esdCompanyName");add("vehicleUseName");add("needShipCountTotal");addAll(monthAndDays);}};List<Map<String, Object>> mapDatas = new ArrayList<>();shipDetail.forEach(p -> {mapDatas.add(converItemToMap(p,1,monthAndDays));mapDatas.add(converItemToMap(p,2,monthAndDays));});return ExportResult.wrap(headers, columns, mapDatas, 1);}

二、核心转换方法

/*** @Description 转换map* @Param item type 1:计划发车 2:实际发车* @Return java.util.Map<java.lang.String,java.lang.Object>* @Date 2024/3/12 18:59* @Author lwp*/private Map<String,Object> converItemToMap(ResourcePlanShipDetailVO item,Integer type,List<String> monthAndDays){Map<String,Object> temp =new HashMap<>();String dataType = type == 1 ? "计划发车" :"实际发车";Integer needShipCountTotal = type == 1 ? item.getTotalAssignCount() : item.getTotalShipCount();temp.put("dataType", dataType);temp.put("resourceSituationCode",item.getResourceSituationCodes());temp.put("shipCode",item.getShipCodes());temp.put("cityName",item.getFullCityName());temp.put("carBrandName",item.getCarBrandName());temp.put("carModelName",item.getCarModelName());temp.put("carModelGroupName",item.getCarModelGroupName());temp.put("esdTotalPowerName",item.getEsdTotalPowerName());temp.put("esdCompanyName",item.getEsdCompanyName());temp.put("vehicleUseName",item.getVehicleUseName());temp.put("needShipCountTotal",needShipCountTotal);item.setShipDetails(item.getShipDetails().stream().sorted(Comparator.comparing(AssignDetailVO::getDispatchDate)).collect(Collectors.toList()));for (String monthAndDay : monthAndDays) {A: for (AssignDetailVO shipDetail : item.getShipDetails()) {String dispatchDate = DstDateUtil.format(shipDetail.getDispatchDate(), DstDateUtil.Y_M_D);if (dispatchDate.equals(monthAndDay)) {temp.put(monthAndDay, type == 1 ? shipDetail.getDispatchNum() : shipDetail.getShipCount());break A;} else {temp.put(monthAndDay, type == 1 ? 0 : 0);}}}temp = MapUtils.sortMapByKey(temp);return temp;}

三、导出实体类

package com.dst.steed.fulfillment.common.domain.biz.resourceplan;import com.dst.steed.common.convert.translation.Translation;
import lombok.Data;import java.util.List;/*** 资源计划发车明细*/
@Data
public class ResourcePlanShipDetailVO {/*** 资源情况编码*/private String resourceSituationCodes;/*** 发车计划编码*/private String shipCodes;/*** 城市编码*/@Translation(convertName = "convertRegionAndCityName", convertTo = "fullCityName")private String cityCode;/*** 城市名称*/private String fullCityName;/*** 车辆品牌*/@Translation(convertName = "commonConvertAttrValueIdMapValue",convertTo = "attrValueName-carBrandName")private String carBrand;private String carBrandName;/*** 车辆型号*/@Translation(convertName = "commonConvertAttrValueIdMapValue",convertTo = "attrValueName-carModelName")private String carModel;private String carModelName;/*** 车型族群*/@Translation(convertName = "commonConvertAttrValueIdMapValue",convertTo = "attrValueName-carModelGroupName")private String carModelGroup;private String carModelGroupName;/*** 动力电池包电量*/@Translation(convertName = "commonConvertAttrValueIdMapValue",convertTo = "attrValueName-esdTotalPowerName")private String esdTotalPower;private String esdTotalPowerName;/*** 动力电池包厂商*/@Translation(convertName = "commonConvertAttrValueIdMapValue",convertTo = "attrValueName-esdCompanyName")private String esdCompany;private String esdCompanyName;/*** 资产分类*/@Translation(convertName = "commonConvertAttrValueIdMapValue",convertTo = "attrValueName-assetClassifyName")private String assetClassify;private String assetClassifyName;/*** 车辆用途*/@Translation(convertName = "commonConvertAttrValueIdMapValue",convertTo = "attrValueName-vehicleUseName")private String vehicleUse;private String vehicleUseName;/*** 发车总计-计划发车量*/private Integer totalAssignCount;/*** 发车总计-已发车量*/private Integer totalShipCount;/*** 发车总计-剩余量*/private Integer totalResidueCount;/*** 发车明细*/private List<AssignDetailVO> shipDetails;
}

实体类属性明细类

package com.dst.steed.fulfillment.common.domain.biz.resourceplan;import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;import java.util.Date;/*** 分配详情VO*/
@Data
public class AssignDetailVO {/*** 中心分配ID*/private String id;/*** 分配类型 1. 中心分配 2. 大区分配*/private Integer referenceType;/*** 发车日期*/@JsonFormat(pattern = "M月d日", timezone = "GMT+8")private Date dispatchDate;/*** 中心分配发车数量*/private Integer centerDispatchNum;/*** 城市计划发车数量*/private Integer dispatchNum;/*** 实际发车数量(发车明细字段)*/private Integer shipCount;
}

四、展示效果

以有数据的日期展示导出头

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA开源项目分享——基于FPGA加速的热扩散模拟器

导语 今天继续分享康奈尔大学FPGA课程ECE 5760的典型案例——基于FPGA加速的热扩散模拟器。 &#xff08;更多其他案例请参考网站&#xff1a; Final Projects ECE 5760&#xff09; 1. 项目概述 项目网址 https://people.ece.cornell.edu/land/courses/ece5760/FinalProje…

多区域ISIS路由计算

多区域ISIS路由计算&#xff1a; 1、骨干区域是如何访问非骨干区域&#xff1f;&#xff08;R4如何学习到200.200/32的路由&#xff1f;&#xff09; 1.1 默认情况下&#xff0c;L1/2级别路由器会将L1级别LSDB中的叶子信息&#xff0c;作为自己L2级别实节点的叶子信息添加到L2的…

旅游小程序的市场与发展趋势

随着科技的发展&#xff0c;移动互联网已经成为我们生活中不可或缺的一部分。在这个时代&#xff0c;小程序已经成为了一种新的趋势&#xff0c;尤其是在旅游行业。那么&#xff0c;旅游小程序有哪些市场&#xff0c;发展趋势又怎么样呢&#xff1f; 一、旅游小程序的市场 1. 用…

3D高斯泼溅的崛起

沉浸式媒体领域正在以前所未有的速度发展&#xff0c;其中 3D 高斯溅射成为一项关键突破。 这项技术在广泛的应用中看起来非常有前景&#xff0c;并且可能会彻底改变我们未来创建数字环境以及与数字环境交互的方式。 在本文中&#xff0c;我们将通过与摄影测量和 NeRF 等前辈进…

企业用大模型如何更具「效价比」?百度智能云发布5款大模型新品

服务8万企业用户&#xff0c;累计帮助用户精调1.3万个大模型&#xff0c;帮助用户开发出16万个大模型应用&#xff0c;自2023年12月以来百度智能云千帆大模型平台API日调用量环比增长97%...从一年前国内大模型平台的“开路先锋”到如今的大模型“超级工厂”&#xff0c;百度智能…

从相机空间到像素空间的投影和反投影原理和代码

目录 从相机空间到像素空间的投影 效果 ​编辑 公式 ​编辑 代码 像素空间到相机空间的反投影 记录一下从相机空间到像素空间的投影&#xff08;3D-->2D&#xff09;和像素空间到相机空间的反投影&#xff08;2D-->3D&#xff09;。 推荐blog&#xff1a;SLAM入门之视…

smpl渲染工具

根据3d姿态预测smpl参数 GitHub - Jeff-sjtu/HybrIK: Official code of "HybrIK: A Hybrid Analytical-Neural Inverse Kinematics Solution for 3D Human Pose and Shape Estimation", CVPR 2021 GitHub - woo1/Texture_visualize_smpl: smpl texture visualizatio…

ModbusRTU/TCP/profinet网关在西门子博图软件中无法连接PLC的解决方法

ModbusRTU/TCP/profinet网关在西门子博图软件中无法连接PLC的解决方法 在工业生产现场&#xff0c;ModbusRTU/TCP/profinet网关在与西门子PLC连接时&#xff0c;必须要使用西门子的博图软件来进行配置&#xff0c;博图v17是一个集成软件平台&#xff0c;专业版支持300、400、12…

下载 macOS 系统安装程序的方法

阅读信息&#xff1a; 版本&#xff1a;0.4.20231021 难度&#xff1a;1/10 到 4/10 阅读时间&#xff1a;5 分钟 适合操作系统&#xff1a;10.13, 10.14, 10.15, 11.x, 12.x&#xff0c;13.x, 14 更新2023-10-21 添加Mist的介绍支持版本的更新&#xff0c;13.x&#xff0…

JVM内存划分

一、运行时数据区域 堆、方法区&#xff08;元空间&#xff09;、虚拟机栈、本地方法栈、程序计数器。 Heap(堆)&#xff1a; 对象的实例以及数组的内存都是要在堆上进行分配的&#xff0c;堆是线程共享的一块区域&#xff0c;用来存放对象实例&#xff0c;也是垃圾回收&…

计算机服务器中了faust勒索病毒怎么办,faust勒索病毒解密工具流程

网络是一把利剑&#xff0c;可以方便企业开展各项工作业务&#xff0c;为企业提供极大的便利&#xff0c;但随着网络技术的不断发展与应用&#xff0c;网络数据安全威胁也在不断增加&#xff0c;给企业的正常生产运营带来了极大困扰&#xff0c;近日&#xff0c;云天数据恢复中…

element-ui实现证件照上传预览下载组件封装

element-ui实现证件照上传预览下载组件封装 效果&#xff1a; 参数说明 我只写了两个参数&#xff0c;后续有需求再对其组件进行丰富~ 参数说明fileListProp用来存储上传后后端返回的图片UR了uploadUrl图片上传反悔的URL后端接口地址 父组件调用&#xff1a; <au-upload…

报表生成器FastReport .Net用户指南:关于脚本(下)

FastReport的报表生成器&#xff08;无论VCL平台还是.NET平台&#xff09;&#xff0c;跨平台的多语言脚本引擎FastScript&#xff0c;桌面OLAP FastCube&#xff0c;如今都被世界各地的开发者所认可&#xff0c;这些名字被等价于“速度”、“可靠”和“品质”,在美国&#xff…

The plain HTTP request was sent to HTTPS port

异常信息 原因 错误信息 “The plain HTTP request was sent to HTTPS port” 表明客户端尝试使用未加密的HTTP协议发送请求到一个配置为使用加密的HTTPS协议的端口。 解决方案 要解决这个问题&#xff0c;需要确保使用正确的协议和端口号进行请求。应该使用的HTTPS前缀。例如…

官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会

摘要&#xff1a;本文整理自阿里云开源大数据平台徐榜江 (雪尽)&#xff0c;关于阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会&#xff0c;内容主要分为以下四部分&#xff1a; 1、Flink CDC 新仓库&#xff0c;新流程 2、Flink CDC 新定位&#xff0c;新玩法 3、Flin…

【嵌入式硬件】步进电机

1.步进电机简介 1.1步进电机基本原理 步进电机的英文是stepping motor。step的中文意思是行走、迈步。所以仅从字面上我们就可以得知,步进电机就是一步一步移动的电动机。说的官方一点儿,步进电机是一种将电脉冲信号转换成相应角位移或者线位移的电动机(直线电机)。下图为…

灵境矩阵平台x百度---智能体(一)

什么是数据插件 大模型插件:大语言模型插件是随着大语言模型发展而诞生的全新插件。大语言模型插件的核心是Web API独立于大语言模型&#xff0c;插件开发过程不受大语言模型的约束&#xff0c;同时没有开发语言的限制&#xff0c;更加通用&#xff0c;只要WebAPI遵循RESTfuI相…

html5cssjs代码 034 自定义字体

html5&css&js代码 034 自定义字体 一、代码二、解释 这是一个带有自定义字体的网页&#xff0c;设置了页面背景颜色、文字颜色以及全局样式。它定义了三种自定义字体并通过font-face规则引入外部字体文件&#xff0c;并通过CSS类&#xff08;.f1, .f2, .f3&#xff09;…

第十二届蓝桥杯省赛CC++ 研究生组-路径

记录到每个结点的最短距离&#xff0c;以此为基础计算后续结点最优值 #include<iostream> #include<algorithm> using namespace std; typedef long long ll;ll gcd(int a, int b){if(!b) return a;return gcd(b, a % b); }int main(){ll dp[2022] {0};//dp[i]记…

如何打破SAST代码审计工具的局限性?

关键词&#xff1a;白盒测试&#xff1b;代码分析工具&#xff1b;代码扫描工具&#xff1b;静态代码检测工具&#xff1b; 在代码的世界里&#xff0c;安全问题如同潜伏的暗礁&#xff0c;随时可能让航行中的软件项目触礁沉没。SAST代码审计工具如同雷达一样&#xff0c;以其独…