traffic-audit-server/src/main/java/com/trafficaudit/dataimport/controller/DataViewController.java
@@ -24,6 +24,8 @@
import com.trafficaudit.dataimport.entity.WycTotalMonthly;
import com.trafficaudit.common.util.RegionUtil;
import com.trafficaudit.reportexport.calc.WycSplitCalc;
import com.trafficaudit.dataimport.service.CityRollupService;
import javax.servlet.http.HttpServletResponse;
import com.trafficaudit.dataimport.mapper.FreightTurnoverImportMapper;
import com.trafficaudit.dataimport.mapper.H2032EnterpriseMonthlyMapper;
import com.trafficaudit.dataimport.mapper.PassengerAuthVehicleMapper;
@@ -100,11 +102,14 @@
    private WycTotalMonthlyMapper wycTotalMapper;
    @Resource
    private WycSplitCalc wycSplitCalc;
    @Resource
    private CityRollupService cityRollupService;
    @GetMapping("/list")
    public Result<Map<String, Object>> list(@RequestParam("type") String type,
                                            @RequestParam(value = "period", required = false) String period,
                                            @RequestParam(value = "keyword", required = false) String keyword,
                                            @RequestParam(value = "periodType", required = false) String periodType,
                                            @RequestParam(value = "page", defaultValue = "1") long page,
                                            @RequestParam(value = "size", defaultValue = "20") long size) {
        String kw = keyword == null ? "" : keyword.trim();
@@ -154,6 +159,7 @@
            case "scaleSplit": {
                LambdaQueryWrapper<ScaleSplitTransport> w = new LambdaQueryWrapper<ScaleSplitTransport>()
                        .eq(notEmpty(period), ScaleSplitTransport::getReportPeriod, period)
                        .eq(notEmpty(periodType), ScaleSplitTransport::getPeriodType, periodType)
                        .like(!kw.isEmpty(), ScaleSplitTransport::getRegionName, kw)
                        .orderByDesc(ScaleSplitTransport::getId);
                Page<ScaleSplitTransport> p = new Page<>(safePage, safeSize);
@@ -449,6 +455,39 @@
        return rows;
    }
    /** 支持按市州汇总的数据类型 */
    @GetMapping("/rollupTypes")
    public Result<List<Map<String, Object>>> rollupTypes() {
        return Result.ok(cityRollupService.supportedTypes());
    }
    /** 按市州汇总(任意起止月) */
    @GetMapping("/summary")
    public Result<Map<String, Object>> summary(@RequestParam("type") String type,
                                               @RequestParam("from") String from,
                                               @RequestParam("to") String to,
                                               @RequestParam(value = "rankMode", defaultValue = "blank") String rankMode) {
        return Result.ok(cityRollupService.summary(type, from, to, "recompute".equalsIgnoreCase(rankMode)));
    }
    /** 按市州汇总导出 Excel(数值全精度,显示 2 位小数 / 百分比) */
    @GetMapping("/export")
    public void export(@RequestParam("type") String type,
                       @RequestParam("from") String from,
                       @RequestParam("to") String to,
                       @RequestParam(value = "rankMode", defaultValue = "blank") String rankMode,
                       HttpServletResponse response) throws Exception {
        byte[] bytes = cityRollupService.exportExcel(type, from, to, "recompute".equalsIgnoreCase(rankMode));
        String fileName = "按市州汇总_" + type + "_" + from + "_" + to + ".xlsx";
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Disposition",
                "attachment; filename=\"" + java.net.URLEncoder.encode(fileName, "UTF-8") + "\"");
        response.setContentLength(bytes.length);
        response.getOutputStream().write(bytes);
        response.getOutputStream().flush();
    }
    private boolean notEmpty(String s) {
        return s != null && !s.trim().isEmpty();
    }
@@ -540,26 +579,26 @@
        H2032_COLUMNS.add(col("enterpriseName", "企业名称", 220));
        H2032_COLUMNS.add(col("unifiedCreditCode", "统一社会信用代码", 180));
        H2032_COLUMNS.add(col("reportUnit", "填报单位", 160));
        H2032_COLUMNS.add(col("vehicleTotal", "车辆数合计", 110));
        H2032_COLUMNS.add(col("vehicleTotal", "车辆数合计(辆)", 130));
        H2032_COLUMNS.add(col("tonsTotal", "标记吨位数合计(吨)", 150));
        H2032_COLUMNS.add(col("vehicleTractor", "牵引车", 90));
        H2032_COLUMNS.add(col("vehicleTrailer", "挂车", 90));
        H2032_COLUMNS.add(col("tonsTrailer", "吨位-挂车", 110));
        H2032_COLUMNS.add(col("vehicleContainer", "集装箱车", 110));
        H2032_COLUMNS.add(col("tonsContainer", "吨位-集装箱", 120));
        H2032_COLUMNS.add(col("vehicleWhole", "整车", 90));
        H2032_COLUMNS.add(col("tonsWhole", "吨位-整车", 110));
        H2032_COLUMNS.add(col("vehicleTractor", "牵引车(辆)", 110));
        H2032_COLUMNS.add(col("vehicleTrailer", "挂车(辆)", 110));
        H2032_COLUMNS.add(col("tonsTrailer", "吨位-挂车(吨)", 130));
        H2032_COLUMNS.add(col("vehicleContainer", "集装箱车(辆)", 120));
        H2032_COLUMNS.add(col("tonsContainer", "吨位-集装箱(吨)", 140));
        H2032_COLUMNS.add(col("vehicleWhole", "整车(辆)", 110));
        H2032_COLUMNS.add(col("tonsWhole", "吨位-整车(吨)", 130));
        H2032_COLUMNS.add(col("freightTotal", "货运量合计(吨)", 130));
        H2032_COLUMNS.add(col("turnoverTotal", "周转量合计(吨公里)", 150));
        H2032_COLUMNS.add(col("freightContainer", "货运量-集装箱", 130));
        H2032_COLUMNS.add(col("freightCoal", "货运量-煤炭", 120));
        H2032_COLUMNS.add(col("freightOilGas", "货运量-油气", 120));
        H2032_COLUMNS.add(col("freightCrudeOil", "货运量-原油", 120));
        H2032_COLUMNS.add(col("freightMetalOre", "货运量-金属矿石", 140));
        H2032_COLUMNS.add(col("freightIronOre", "货运量-铁矿石", 130));
        H2032_COLUMNS.add(col("freightBuilding", "货运量-建材", 120));
        H2032_COLUMNS.add(col("freightGrain", "货运量-粮食", 120));
        H2032_COLUMNS.add(col("avgTonnage", "平均吨位", 100));
        H2032_COLUMNS.add(col("freightContainer", "货运量-集装箱(吨)", 140));
        H2032_COLUMNS.add(col("freightCoal", "货运量-煤炭(吨)", 140));
        H2032_COLUMNS.add(col("freightOilGas", "货运量-油气(吨)", 140));
        H2032_COLUMNS.add(col("freightCrudeOil", "货运量-原油(吨)", 140));
        H2032_COLUMNS.add(col("freightMetalOre", "货运量-金属矿石(吨)", 140));
        H2032_COLUMNS.add(col("freightIronOre", "货运量-铁矿石(吨)", 140));
        H2032_COLUMNS.add(col("freightBuilding", "货运量-建材(吨)", 140));
        H2032_COLUMNS.add(col("freightGrain", "货运量-粮食(吨)", 140));
        H2032_COLUMNS.add(col("avgTonnage", "平均吨位(吨)", 120));
        H2032_COLUMNS.add(col("avgDistance", "平均运距(公里)", 120));
        H2032_COLUMNS.add(col("unitLeader", "单位负责人", 110));
        H2032_COLUMNS.add(col("statsLeader", "统计负责人", 110));
@@ -571,46 +610,46 @@
        AUTH_COLUMNS.add(col("reportPeriod", "报表期", 100));
        AUTH_COLUMNS.add(col("enterpriseName", "企业名称", 240));
        AUTH_COLUMNS.add(col("tractorCount", "牵引车数", 100));
        AUTH_COLUMNS.add(col("trailerCount", "挂车数", 100));
        AUTH_COLUMNS.add(col("otherCount", "其他车数", 100));
        AUTH_COLUMNS.add(col("trailerTons", "挂车吨位", 110));
        AUTH_COLUMNS.add(col("otherTons", "其他吨位", 110));
        AUTH_COLUMNS.add(col("tractorCount", "牵引车数(辆)", 110));
        AUTH_COLUMNS.add(col("trailerCount", "挂车数(辆)", 110));
        AUTH_COLUMNS.add(col("otherCount", "其他车数(辆)", 110));
        AUTH_COLUMNS.add(col("trailerTons", "挂车吨位(吨)", 120));
        AUTH_COLUMNS.add(col("otherTons", "其他吨位(吨)", 120));
        TRACK_COLUMNS.add(col("reportPeriod", "报表期", 100));
        TRACK_COLUMNS.add(col("enterpriseName", "企业名称", 240));
        TRACK_COLUMNS.add(col("monthlyMileage", "月度里程", 120));
        TRACK_COLUMNS.add(col("trackedVehicles", "轨迹车辆数", 120));
        TRACK_COLUMNS.add(col("monthlyMileage", "月度里程(公里)", 130));
        TRACK_COLUMNS.add(col("trackedVehicles", "轨迹车辆数(辆)", 130));
        SPLIT_COLUMNS.add(col("reportPeriod", "报表期", 100));
        SPLIT_COLUMNS.add(col("periodType", "口径", 90));
        SPLIT_COLUMNS.add(col("regionName", "市州", 130));
        SPLIT_COLUMNS.add(col("aboveScaleFreight", "规上货运量(来源文件未提供该列)", 220));
        SPLIT_COLUMNS.add(col("aboveScaleFreight", "规上货运量(万吨)", 140));
        SPLIT_COLUMNS.add(col("aboveScaleTurnover", "规上周转量(万吨公里)", 170));
        SPLIT_COLUMNS.add(col("aboveScaleRank", "规上排名", 100));
        SPLIT_COLUMNS.add(col("aboveScaleYoy", "规上同比", 100));
        SPLIT_COLUMNS.add(col("belowScaleFreight", "规下货运量(来源文件未提供该列)", 220));
        SPLIT_COLUMNS.add(col("aboveScaleRank", "规上排名(名)", 110));
        SPLIT_COLUMNS.add(col("aboveScaleYoy", "规上同比(%)", 110));
        SPLIT_COLUMNS.add(col("belowScaleFreight", "规下货运量(万吨)", 140));
        SPLIT_COLUMNS.add(col("belowScaleTurnover", "规下周转量(万吨公里)", 170));
        SPLIT_COLUMNS.add(col("belowScaleRank", "规下排名", 100));
        SPLIT_COLUMNS.add(col("belowScaleYoy", "规下同比", 100));
        SPLIT_COLUMNS.add(col("totalFreight", "合计货运量(来源文件未提供该列)", 220));
        SPLIT_COLUMNS.add(col("belowScaleRank", "规下排名(名)", 110));
        SPLIT_COLUMNS.add(col("belowScaleYoy", "规下同比(%)", 110));
        SPLIT_COLUMNS.add(col("totalFreight", "合计货运量(万吨)", 140));
        SPLIT_COLUMNS.add(col("totalTurnover", "合计周转量(万吨公里)", 170));
        SPLIT_COLUMNS.add(col("totalRank", "合计排名", 100));
        SPLIT_COLUMNS.add(col("totalYoy", "合计同比", 100));
        SPLIT_COLUMNS.add(col("totalRank", "合计排名(名)", 110));
        SPLIT_COLUMNS.add(col("totalYoy", "合计同比(%)", 110));
        FREIGHT_COLUMNS.add(col("reportPeriod", "报表期", 100));
        FREIGHT_COLUMNS.add(col("regionName", "市州", 130));
        for (int m = 1; m <= 12; m++) {
            FREIGHT_COLUMNS.add(col(String.format("freightM%02d", m), "货运量" + m + "月", 110));
            FREIGHT_COLUMNS.add(col(String.format("freightM%02d", m), "货运量" + m + "月(万吨)", 140));
        }
        for (int m = 1; m <= 12; m++) {
            FREIGHT_COLUMNS.add(col(String.format("lastFreightM%02d", m), "去年货运量" + m + "月", 130));
            FREIGHT_COLUMNS.add(col(String.format("lastFreightM%02d", m), "去年货运量" + m + "月(万吨)", 160));
        }
        for (int m = 1; m <= 12; m++) {
            FREIGHT_COLUMNS.add(col(String.format("turnoverM%02d", m), "周转量" + m + "月", 120));
            FREIGHT_COLUMNS.add(col(String.format("turnoverM%02d", m), "周转量" + m + "月(万吨公里)", 160));
        }
        for (int m = 1; m <= 12; m++) {
            FREIGHT_COLUMNS.add(col(String.format("lastTurnoverM%02d", m), "去年周转量" + m + "月", 140));
            FREIGHT_COLUMNS.add(col(String.format("lastTurnoverM%02d", m), "去年周转量" + m + "月(万吨公里)", 180));
        }
        H2031_COLUMNS.add(col("reportPeriod", "报表期", 100));
@@ -620,37 +659,37 @@
        H2031_COLUMNS.add(col("enterpriseName", "企业名称", 220));
        H2031_COLUMNS.add(col("unifiedCreditCode", "统一社会信用代码", 180));
        H2031_COLUMNS.add(col("reportUnit", "填报单位", 160));
        H2031_COLUMNS.add(col("vehicleTotal", "客运车辆合计", 110));
        H2031_COLUMNS.add(col("seatTotal", "核定载客位合计", 130));
        H2031_COLUMNS.add(col("vehicleSchedule", "班线车辆数", 110));
        H2031_COLUMNS.add(col("seatSchedule", "班线载客位", 110));
        H2031_COLUMNS.add(col("vehicleCharter", "包车车辆数", 110));
        H2031_COLUMNS.add(col("seatCharter", "包车载客位", 110));
        H2031_COLUMNS.add(col("vehicleTotal", "客运车辆合计(辆)", 130));
        H2031_COLUMNS.add(col("seatTotal", "核定载客位合计(座)", 150));
        H2031_COLUMNS.add(col("vehicleSchedule", "班线车辆数(辆)", 130));
        H2031_COLUMNS.add(col("seatSchedule", "班线载客位(座)", 130));
        H2031_COLUMNS.add(col("vehicleCharter", "包车车辆数(辆)", 130));
        H2031_COLUMNS.add(col("seatCharter", "包车载客位(座)", 130));
        H2031_COLUMNS.add(col("passengerTotal", "客运量合计(人)", 130));
        H2031_COLUMNS.add(col("turnoverTotal", "周转量合计", 110));
        H2031_COLUMNS.add(col("passengerClass1", "客运量一类", 110));
        H2031_COLUMNS.add(col("passengerClass2", "客运量二类", 110));
        H2031_COLUMNS.add(col("passengerClass3", "客运量三类", 110));
        H2031_COLUMNS.add(col("passengerClass4", "客运量四类", 110));
        H2031_COLUMNS.add(col("passengerCharter", "客运量包车", 110));
        H2031_COLUMNS.add(col("turnoverClass1", "周转量一类", 110));
        H2031_COLUMNS.add(col("turnoverClass2", "周转量二类", 110));
        H2031_COLUMNS.add(col("turnoverClass3", "周转量三类", 110));
        H2031_COLUMNS.add(col("turnoverClass4", "周转量四类", 110));
        H2031_COLUMNS.add(col("turnoverCharter", "周转量包车", 110));
        H2031_COLUMNS.add(col("avgDistanceTotal", "平均运距合计", 120));
        H2031_COLUMNS.add(col("avgDistanceClass1", "一类平均运距", 120));
        H2031_COLUMNS.add(col("avgDistanceClass2", "二类平均运距", 120));
        H2031_COLUMNS.add(col("avgDistanceClass3", "三类平均运距", 120));
        H2031_COLUMNS.add(col("avgDistanceClass4", "四类平均运距", 120));
        H2031_COLUMNS.add(col("avgDistanceCharter", "包车平均运距", 120));
        H2031_COLUMNS.add(col("turnoverTotal", "周转量合计(人公里)", 140));
        H2031_COLUMNS.add(col("passengerClass1", "客运量一类(人)", 120));
        H2031_COLUMNS.add(col("passengerClass2", "客运量二类(人)", 120));
        H2031_COLUMNS.add(col("passengerClass3", "客运量三类(人)", 120));
        H2031_COLUMNS.add(col("passengerClass4", "客运量四类(人)", 120));
        H2031_COLUMNS.add(col("passengerCharter", "客运量包车(人)", 130));
        H2031_COLUMNS.add(col("turnoverClass1", "周转量一类(人公里)", 140));
        H2031_COLUMNS.add(col("turnoverClass2", "周转量二类(人公里)", 140));
        H2031_COLUMNS.add(col("turnoverClass3", "周转量三类(人公里)", 140));
        H2031_COLUMNS.add(col("turnoverClass4", "周转量四类(人公里)", 140));
        H2031_COLUMNS.add(col("turnoverCharter", "周转量包车(人公里)", 150));
        H2031_COLUMNS.add(col("avgDistanceTotal", "平均运距合计(公里)", 140));
        H2031_COLUMNS.add(col("avgDistanceClass1", "一类平均运距(公里)", 140));
        H2031_COLUMNS.add(col("avgDistanceClass2", "二类平均运距(公里)", 140));
        H2031_COLUMNS.add(col("avgDistanceClass3", "三类平均运距(公里)", 140));
        H2031_COLUMNS.add(col("avgDistanceClass4", "四类平均运距(公里)", 140));
        H2031_COLUMNS.add(col("avgDistanceCharter", "包车平均运距(公里)", 140));
        BUS_COLUMNS.add(col("reportPeriod", "报表期", 100));
        BUS_COLUMNS.add(col("regionCode", "所属地区", 100));
        BUS_COLUMNS.add(col("city", "市州", 110));
        BUS_COLUMNS.add(col("enterpriseName", "企业名称", 220));
        BUS_COLUMNS.add(col("opVehicles", "运营车数", 100));
        BUS_COLUMNS.add(col("stopTotal", "站点总个数", 110));
        BUS_COLUMNS.add(col("stopCity", "城市内站点", 110));
        BUS_COLUMNS.add(col("opVehicles", "运营车数(辆)", 120));
        BUS_COLUMNS.add(col("stopTotal", "站点总个数(个)", 130));
        BUS_COLUMNS.add(col("stopCity", "城市内站点(个)", 130));
        BUS_COLUMNS.add(col("passengerVolume", "客运量(万人次)", 120));
        BUS_COLUMNS.add(col("passengerCity", "城市内客运量(万人次)", 150));
        BUS_COLUMNS.add(col("turnover", "旅客周转量(万人公里)", 170));
@@ -672,16 +711,16 @@
        TAXI_COLUMNS.add(col("reportPeriod", "报表期", 100));
        TAXI_COLUMNS.add(col("regionCode", "所属地区", 100));
        TAXI_COLUMNS.add(col("city", "市州", 110));
        TAXI_COLUMNS.add(col("tripTotal", "载客车次总数", 120));
        TAXI_COLUMNS.add(col("tripCity", "载客车次_城市内", 130));
        TAXI_COLUMNS.add(col("tripTotal", "载客车次总数(车次)", 150));
        TAXI_COLUMNS.add(col("tripCity", "载客车次_城市内(车次)", 160));
        TAXI_COLUMNS.add(col("passengerVolume", "客运量(万人次)", 120));
        TAXI_COLUMNS.add(col("passengerCity", "城市内客运量(万人次)", 150));
        TAXI_COLUMNS.add(col("turnover", "旅客周转量(万人公里)", 170));
        TAXI_COLUMNS.add(col("turnoverCity", "城市内周转量(万人公里)", 180));
        TAXI_COLUMNS.add(col("opVehicles", "运营车辆数", 110));
        TAXI_COLUMNS.add(col("opVehicles", "运营车辆数(辆)", 130));
        TAXI_COLUMNS.add(col("avgDistance", "平均运距(公里)", 120));
        TAXI_COLUMNS.add(col("avgDistanceCity", "城市内平均运距(公里)", 150));
        TAXI_COLUMNS.add(col("passengersPerTrip", "单车次载客人数", 130));
        TAXI_COLUMNS.add(col("passengersPerTrip", "单车次载客人数(人/车次)", 170));
        TAXI_COLUMNS.add(col("rateTripMom", "载客车次环比", 110));
        TAXI_COLUMNS.add(col("rateTripYoy", "载客车次同比", 110));
        TAXI_COLUMNS.add(col("ratePassengerMom", "客运量环比", 100));
@@ -704,8 +743,8 @@
        PAUTH_COLUMNS.add(col("reportPeriod", "报表期", 100));
        PAUTH_COLUMNS.add(col("enterpriseCode", "企业代码", 130));
        PAUTH_COLUMNS.add(col("enterpriseName", "企业名称", 240));
        PAUTH_COLUMNS.add(col("vehicleCount", "车辆数", 100));
        PAUTH_COLUMNS.add(col("seatCount", "载客位数", 100));
        PAUTH_COLUMNS.add(col("vehicleCount", "车辆数(辆)", 110));
        PAUTH_COLUMNS.add(col("seatCount", "载客位数(座)", 120));
        INVEST_MONTHLY_COLUMNS.add(col("reportPeriod", "报表期", 100));
        INVEST_MONTHLY_COLUMNS.add(col("projectId", "项目ID", 80));
        INVEST_MONTHLY_COLUMNS.add(col("projectName", "项目名称", 280));
@@ -716,7 +755,7 @@
        INVEST_MONTHLY_COLUMNS.add(col("startCum", "自开始建设累计完成(万元)", 180));
        INVEST_MONTHLY_COLUMNS.add(col("progressStage", "建设阶段", 120));
        INVEST_MONTHLY_COLUMNS.add(col("progressDesc", "形象进度", 320));
        INVEST_MONTHLY_COLUMNS.add(col("buildingArea", "建筑面积", 110));
        INVEST_MONTHLY_COLUMNS.add(col("buildingArea", "建筑面积(平方米)", 140));
        INVEST_PROJECT_COLUMNS.add(col("projectName", "项目名称", 260));
        INVEST_PROJECT_COLUMNS.add(col("category", "类别", 100));
        INVEST_PROJECT_COLUMNS.add(col("city", "市州", 90));
@@ -726,7 +765,7 @@
        INVEST_PROJECT_COLUMNS.add(col("startTime", "开工年", 90));
        INVEST_PROJECT_COLUMNS.add(col("endTime", "完工年", 90));
        INVEST_PROJECT_COLUMNS.add(col("totalInvestment", "总投资(万元)", 130));
        INVEST_PROJECT_COLUMNS.add(col("buildingArea", "建筑面积", 110));
        INVEST_PROJECT_COLUMNS.add(col("buildingArea", "建筑面积(平方米)", 140));
        INVEST_PROJECT_COLUMNS.add(col("approvalGk", "工可或核准批复文号", 200));
        INVEST_PROJECT_COLUMNS.add(col("approvalCs", "初设或施工图批复文号", 200));
        INVEST_PROJECT_COLUMNS.add(col("source", "来源", 100));
@@ -745,34 +784,34 @@
        ENERGY_VEHICLE_COLUMNS.add(col("vehicleType", "车辆类型", 130));
        ENERGY_VEHICLE_COLUMNS.add(col("fuelType", "燃料类型", 110));
        ENERGY_VEHICLE_COLUMNS.add(col("manufactureYear", "出厂年份", 100));
        ENERGY_VEHICLE_COLUMNS.add(col("markedTonnage", "标记吨位", 100));
        ENERGY_VEHICLE_COLUMNS.add(col("markedTonnage", "标记吨位(吨)", 120));
        ENERGY_VEHICLE_COLUMNS.add(col("totalMileage", "总行驶里程(公里)", 150));
        ENERGY_VEHICLE_COLUMNS.add(col("loadedMileage", "重载里程(公里)", 140));
        ENERGY_VEHICLE_COLUMNS.add(col("emptyMileage", "空载里程(公里)", 140));
        ENERGY_VEHICLE_COLUMNS.add(col("freight", "货运量(吨)", 120));
        ENERGY_VEHICLE_COLUMNS.add(col("turnover", "周转量(吨公里)", 140));
        ENERGY_VEHICLE_COLUMNS.add(col("tripCount", "车次", 90));
        ENERGY_VEHICLE_COLUMNS.add(col("tripCount", "车次(次)", 100));
        ENERGY_VEHICLE_COLUMNS.add(col("fuelUnit", "燃料单位", 100));
        ENERGY_VEHICLE_COLUMNS.add(col("fuelConsumption", "燃料消耗量", 120));
        ENERGY_VEHICLE_COLUMNS.add(col("avgDistance", "平均运距", 110));
        ENERGY_VEHICLE_COLUMNS.add(col("avgLoadedTonnage", "平均载重吨位", 130));
        ENERGY_VEHICLE_COLUMNS.add(col("avgTripMileage", "平均车次里程", 130));
        ENERGY_VEHICLE_COLUMNS.add(col("fuelPer100km", "百公里油耗", 120));
        ENERGY_VEHICLE_COLUMNS.add(col("turnoverFuel", "周转量油耗", 120));
        ENERGY_VEHICLE_COLUMNS.add(col("fuelConsumption", "燃料消耗量(按燃料单位)", 170));
        ENERGY_VEHICLE_COLUMNS.add(col("avgDistance", "平均运距(公里)", 130));
        ENERGY_VEHICLE_COLUMNS.add(col("avgLoadedTonnage", "平均载重吨位(吨)", 150));
        ENERGY_VEHICLE_COLUMNS.add(col("avgTripMileage", "平均车次里程(公里)", 150));
        ENERGY_VEHICLE_COLUMNS.add(col("fuelPer100km", "百公里油耗(按燃料单位)", 170));
        ENERGY_VEHICLE_COLUMNS.add(col("turnoverFuel", "周转量油耗(按燃料单位)", 170));
        ENERGY_AUTH_COLUMNS.add(col("reportPeriod", "报表期", 100));
        ENERGY_AUTH_COLUMNS.add(col("plateNo", "车牌号", 110));
        ENERGY_AUTH_COLUMNS.add(col("vehicleType", "车辆类型", 130));
        ENERGY_AUTH_COLUMNS.add(col("fuelType", "燃料类型", 110));
        ENERGY_AUTH_COLUMNS.add(col("markedTonnage", "标记吨位", 100));
        ENERGY_AUTH_COLUMNS.add(col("tractionQuality", "牵引质量", 110));
        ENERGY_AUTH_COLUMNS.add(col("markedTonnage", "标记吨位(吨)", 120));
        ENERGY_AUTH_COLUMNS.add(col("tractionQuality", "牵引质量(吨)", 130));
        PAX_INDIVIDUAL_COLUMNS.add(col("reportPeriod", "报表期", 100));
        PAX_INDIVIDUAL_COLUMNS.add(col("regionCode", "所属地区", 110));
        PAX_INDIVIDUAL_COLUMNS.add(col("city", "市州", 110));
        PAX_INDIVIDUAL_COLUMNS.add(col("enterpriseCode", "企业代码", 130));
        PAX_INDIVIDUAL_COLUMNS.add(col("enterpriseName", "企业名称", 220));
        PAX_INDIVIDUAL_COLUMNS.add(col("passengerCount", "个体客运量", 130));
        PAX_INDIVIDUAL_COLUMNS.add(col("turnover", "个体旅客周转量", 150));
        PAX_INDIVIDUAL_COLUMNS.add(col("passengerCount", "个体客运量(人)", 140));
        PAX_INDIVIDUAL_COLUMNS.add(col("turnover", "个体旅客周转量(人公里)", 180));
        WYC_TOTAL_COLUMNS.add(col("reportPeriod", "报表期", 100));
        WYC_TOTAL_COLUMNS.add(col("pinK", "全省网约车客运量(万人次)", 210));