导出excel按动态表头导出

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

java 复制代码
  /**
     * 导出查看发车明细
     * @param query
     * @return
     */
    @Override
    public 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);
    }

二、核心转换方法

java 复制代码
/**
     * @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;
    }

三、导出实体类

java 复制代码
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;
}

实体类属性明细类

java 复制代码
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;
}

四、展示效果

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

相关推荐
咯哦哦哦哦3 小时前
linux so库(arm)对比分析
linux·运维·arm开发
lengjingzju8 小时前
编译与调试完全指南—第10章 网络分析工具
linux
ltl9 小时前
新硬件对存储的影响:ZNS、CXL 与计算存储
linux
RisunJan9 小时前
Linux命令-xauth(X11 认证授权管理)
linux·服务器·microsoft
爱学习的小白柏11 小时前
【AI问数技术】多Agent协同架构:查询规划/SQL生成/洞察分析/报告生成
java·网络·人工智能·windows·sql·架构·llama
fb_1234513 小时前
Linux三剑客超全精讲(grep+sed+awk)零基础入门|正则+实战面试题
linux·运维·服务器
火车叼位14 小时前
Bash 实现 IDE 式补全的组件与配置
linux·运维
潘正翔14 小时前
k8s高级_调度器Deployment
linux·运维·云原生·容器·kubernetes·jenkins·devops
H_oRIZoN_14 小时前
Linux入门DAY27(文件IO(系统调用)详解|open/read/write/lseek)
java·linux·服务器
海兰14 小时前
【插件】Logbook 插件完全指南(适配 Ubuntu 24.04)
linux·运维·人工智能·ubuntu·agent·openclaw