package com.trafficaudit.dataimport.controller; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.trafficaudit.common.Result; import com.trafficaudit.dataimport.entity.FreightTurnoverImport; import com.trafficaudit.dataimport.entity.H2032EnterpriseMonthly; import com.trafficaudit.dataimport.entity.PassengerAuthVehicle; import com.trafficaudit.dataimport.entity.CityBusMonthly; import com.trafficaudit.dataimport.entity.CityTaxiAuth; import com.trafficaudit.dataimport.entity.CityTaxiMonthly; import com.trafficaudit.dataimport.entity.PassengerEnterpriseMonthly; import com.trafficaudit.dataimport.entity.ScaleSplitTransport; import com.trafficaudit.dataimport.entity.TransportAuthVehicle; import com.trafficaudit.dataimport.entity.VehicleTrackMileage; import com.trafficaudit.dataimport.entity.InvestmentMonthly; import com.trafficaudit.dataimport.entity.InvestmentProject; import com.trafficaudit.dataimport.entity.InvestmentSystem; import com.trafficaudit.dataimport.entity.EnergyVehicleQuarterly; import com.trafficaudit.dataimport.entity.EnergyAuthVehicle; import com.trafficaudit.dataimport.entity.PassengerIndividualMonthly; import com.trafficaudit.dataimport.entity.WycOrderMonthly; import com.trafficaudit.dataimport.entity.WycTotalMonthly; import com.trafficaudit.common.util.RegionUtil; import com.trafficaudit.reportexport.calc.WycSplitCalc; import com.trafficaudit.dataimport.mapper.FreightTurnoverImportMapper; import com.trafficaudit.dataimport.mapper.H2032EnterpriseMonthlyMapper; import com.trafficaudit.dataimport.mapper.PassengerAuthVehicleMapper; import com.trafficaudit.dataimport.mapper.CityBusMonthlyMapper; import com.trafficaudit.dataimport.mapper.CityTaxiAuthMapper; import com.trafficaudit.dataimport.mapper.CityTaxiMonthlyMapper; import com.trafficaudit.dataimport.mapper.PassengerEnterpriseMonthlyMapper; import com.trafficaudit.dataimport.mapper.ScaleSplitTransportMapper; import com.trafficaudit.dataimport.mapper.TransportAuthVehicleMapper; import com.trafficaudit.dataimport.mapper.VehicleTrackMileageMapper; import com.trafficaudit.dataimport.mapper.InvestmentMonthlyMapper; import com.trafficaudit.dataimport.mapper.InvestmentProjectMapper; import com.trafficaudit.dataimport.mapper.InvestmentSystemMapper; import com.trafficaudit.dataimport.mapper.EnergyVehicleQuarterlyMapper; import com.trafficaudit.dataimport.mapper.EnergyAuthVehicleMapper; import com.trafficaudit.dataimport.mapper.PassengerIndividualMonthlyMapper; import com.trafficaudit.dataimport.mapper.WycOrderMonthlyMapper; import com.trafficaudit.dataimport.mapper.WycTotalMonthlyMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * 导入数据查看:分页查询各类型导入的业务数据,供页面展示 */ @Slf4j @RestController @RequestMapping("/api/data") public class DataViewController { @Resource private H2032EnterpriseMonthlyMapper h2032Mapper; @Resource private TransportAuthVehicleMapper transportAuthMapper; @Resource private VehicleTrackMileageMapper trackMileageMapper; @Resource private ScaleSplitTransportMapper scaleSplitMapper; @Resource private FreightTurnoverImportMapper freightTurnoverMapper; @Resource private PassengerEnterpriseMonthlyMapper passengerMapper; @Resource private PassengerAuthVehicleMapper passengerAuthMapper; @Resource private CityBusMonthlyMapper cityBusMapper; @Resource private CityTaxiMonthlyMapper cityTaxiMapper; @Resource private CityTaxiAuthMapper cityTaxiAuthMapper; @Resource private InvestmentMonthlyMapper investmentMonthlyMapper; @Resource private InvestmentProjectMapper investmentProjectMapper; @Resource private InvestmentSystemMapper investmentSystemMapper; @Resource private EnergyVehicleQuarterlyMapper energyVehicleMapper; @Resource private EnergyAuthVehicleMapper energyAuthMapper; @Resource private PassengerIndividualMonthlyMapper passengerIndividualMapper; @Resource private WycOrderMonthlyMapper wycOrderMapper; @Resource private WycTotalMonthlyMapper wycTotalMapper; @Resource private WycSplitCalc wycSplitCalc; @GetMapping("/list") public Result> list(@RequestParam("type") String type, @RequestParam(value = "period", required = false) String period, @RequestParam(value = "keyword", required = false) String keyword, @RequestParam(value = "page", defaultValue = "1") long page, @RequestParam(value = "size", defaultValue = "20") long size) { String kw = keyword == null ? "" : keyword.trim(); long safePage = Math.max(page, 1); long safeSize = Math.min(Math.max(size, 1), 200); Map result = new LinkedHashMap<>(); result.put("type", type); result.put("columns", columnsOf(type)); switch (type) { case "h2032": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), H2032EnterpriseMonthly::getReportPeriod, period) .like(!kw.isEmpty(), H2032EnterpriseMonthly::getEnterpriseName, kw) .orderByDesc(H2032EnterpriseMonthly::getId); Page p = new Page<>(safePage, safeSize); Page r = h2032Mapper.selectPage(p, w); List> rows = toMaps(r.getRecords(), propsOf(H2032_COLUMNS)); fillCity(rows); result.put("records", rows); fillPage(result, r); break; } case "transportAuth": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), TransportAuthVehicle::getReportPeriod, period) .like(!kw.isEmpty(), TransportAuthVehicle::getEnterpriseName, kw) .orderByDesc(TransportAuthVehicle::getId); Page p = new Page<>(safePage, safeSize); Page r = transportAuthMapper.selectPage(p, w); result.put("records", toMaps(r.getRecords(), propsOf(AUTH_COLUMNS))); fillPage(result, r); break; } case "trackMileage": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), VehicleTrackMileage::getReportPeriod, period) .like(!kw.isEmpty(), VehicleTrackMileage::getEnterpriseName, kw) .orderByDesc(VehicleTrackMileage::getId); Page p = new Page<>(safePage, safeSize); Page r = trackMileageMapper.selectPage(p, w); result.put("records", toMaps(r.getRecords(), propsOf(TRACK_COLUMNS))); fillPage(result, r); break; } case "scaleSplit": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), ScaleSplitTransport::getReportPeriod, period) .like(!kw.isEmpty(), ScaleSplitTransport::getRegionName, kw) .orderByDesc(ScaleSplitTransport::getId); Page p = new Page<>(safePage, safeSize); Page r = scaleSplitMapper.selectPage(p, w); List> rows = toMaps(r.getRecords(), propsOf(SPLIT_COLUMNS)); for (Map row : rows) { Object pt = row.get("periodType"); if ("MONTH".equals(pt)) { row.put("periodType", "当月"); } else if ("CUMULATIVE".equals(pt)) { row.put("periodType", "累计"); } } result.put("records", rows); fillPage(result, r); break; } case "h2031": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), PassengerEnterpriseMonthly::getReportPeriod, period) .like(!kw.isEmpty(), PassengerEnterpriseMonthly::getEnterpriseName, kw) .orderByDesc(PassengerEnterpriseMonthly::getId); Page p = new Page<>(safePage, safeSize); Page r = passengerMapper.selectPage(p, w); List> rows = toMaps(r.getRecords(), propsOf(H2031_COLUMNS)); fillCity(rows); result.put("records", rows); fillPage(result, r); break; } case "cityBus": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), CityBusMonthly::getReportPeriod, period) .like(!kw.isEmpty(), CityBusMonthly::getEnterpriseName, kw) .orderByDesc(CityBusMonthly::getId); Page p = new Page<>(safePage, safeSize); Page r = cityBusMapper.selectPage(p, w); result.put("records", toMaps(r.getRecords(), propsOf(BUS_COLUMNS))); fillPage(result, r); break; } case "cityTaxi": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), CityTaxiMonthly::getReportPeriod, period) .like(!kw.isEmpty(), CityTaxiMonthly::getCity, kw) .orderByAsc(CityTaxiMonthly::getId); Page p = new Page<>(safePage, safeSize); Page r = cityTaxiMapper.selectPage(p, w); result.put("records", toMaps(r.getRecords(), propsOf(TAXI_COLUMNS))); fillPage(result, r); break; } case "cityTaxiAuth": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), CityTaxiAuth::getReportPeriod, period) .like(!kw.isEmpty(), CityTaxiAuth::getCity, kw) .orderByDesc(CityTaxiAuth::getId); Page p = new Page<>(safePage, safeSize); Page r = cityTaxiAuthMapper.selectPage(p, w); result.put("records", toMaps(r.getRecords(), propsOf(TAXI_AUTH_COLUMNS))); fillPage(result, r); break; } case "passengerAuth": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), PassengerAuthVehicle::getReportPeriod, period) .like(!kw.isEmpty(), PassengerAuthVehicle::getEnterpriseName, kw) .orderByDesc(PassengerAuthVehicle::getId); Page p = new Page<>(safePage, safeSize); Page r = passengerAuthMapper.selectPage(p, w); result.put("records", toMaps(r.getRecords(), propsOf(PAUTH_COLUMNS))); fillPage(result, r); break; } case "freightTurnover": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), FreightTurnoverImport::getReportPeriod, period) .like(!kw.isEmpty(), FreightTurnoverImport::getRegionName, kw) .orderByDesc(FreightTurnoverImport::getId); Page p = new Page<>(safePage, safeSize); Page r = freightTurnoverMapper.selectPage(p, w); result.put("records", toMaps(r.getRecords(), propsOf(FREIGHT_COLUMNS))); fillPage(result, r); break; } case "investmentMonthly": { java.util.List pids = new ArrayList<>(); if (!kw.isEmpty()) { for (InvestmentProject ip : investmentProjectMapper.selectList( new LambdaQueryWrapper().like(InvestmentProject::getProjectName, kw))) { pids.add(ip.getId()); } if (pids.isEmpty()) { result.put("records", new ArrayList<>()); result.put("total", 0L); result.put("current", safePage); result.put("size", safeSize); break; } } LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), InvestmentMonthly::getReportPeriod, period) .in(!pids.isEmpty(), InvestmentMonthly::getProjectId, pids) .orderByAsc(InvestmentMonthly::getProjectId) .orderByAsc(InvestmentMonthly::getId); Page p = new Page<>(safePage, safeSize); Page r = investmentMonthlyMapper.selectPage(p, w); List> rows = toMaps(r.getRecords(), propsOf(INVEST_MONTHLY_COLUMNS)); fillProjectInfo(rows); result.put("records", rows); fillPage(result, r); break; } case "investmentProject": { LambdaQueryWrapper w = new LambdaQueryWrapper() .like(!kw.isEmpty(), InvestmentProject::getProjectName, kw) .orderByAsc(InvestmentProject::getCity) .orderByAsc(InvestmentProject::getId); Page p = new Page<>(safePage, safeSize); Page r = investmentProjectMapper.selectPage(p, w); result.put("records", toMaps(r.getRecords(), propsOf(INVEST_PROJECT_COLUMNS))); fillPage(result, r); break; } case "investmentSystem": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), InvestmentSystem::getReportPeriod, period) .like(!kw.isEmpty(), InvestmentSystem::getProjectName, kw) .orderByDesc(InvestmentSystem::getId); Page p = new Page<>(safePage, safeSize); Page r = investmentSystemMapper.selectPage(p, w); result.put("records", toMaps(r.getRecords(), propsOf(INVEST_SYSTEM_COLUMNS))); fillPage(result, r); break; } case "energyVehicle": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), EnergyVehicleQuarterly::getReportPeriod, period) .like(!kw.isEmpty(), EnergyVehicleQuarterly::getEnterpriseName, kw) .orderByDesc(EnergyVehicleQuarterly::getId); Page p = new Page<>(safePage, safeSize); Page r = energyVehicleMapper.selectPage(p, w); List> rows = toMaps(r.getRecords(), propsOf(ENERGY_VEHICLE_COLUMNS)); fillCity(rows); result.put("records", rows); fillPage(result, r); break; } case "energyAuth": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), EnergyAuthVehicle::getReportPeriod, period) .like(!kw.isEmpty(), EnergyAuthVehicle::getPlateNo, kw) .orderByDesc(EnergyAuthVehicle::getId); Page p = new Page<>(safePage, safeSize); Page r = energyAuthMapper.selectPage(p, w); result.put("records", toMaps(r.getRecords(), propsOf(ENERGY_AUTH_COLUMNS))); fillPage(result, r); break; } case "passengerIndividual": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), PassengerIndividualMonthly::getReportPeriod, period) .like(!kw.isEmpty(), PassengerIndividualMonthly::getEnterpriseName, kw) .orderByDesc(PassengerIndividualMonthly::getId); Page p = new Page<>(safePage, safeSize); Page r = passengerIndividualMapper.selectPage(p, w); List> rows = toMaps(r.getRecords(), propsOf(PAX_INDIVIDUAL_COLUMNS)); fillCity(rows); result.put("records", rows); fillPage(result, r); break; } case "wycTotal": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), WycTotalMonthly::getReportPeriod, period) .orderByDesc(WycTotalMonthly::getId); Page p = new Page<>(safePage, safeSize); Page r = wycTotalMapper.selectPage(p, w); result.put("records", toMaps(r.getRecords(), propsOf(WYC_TOTAL_COLUMNS))); fillPage(result, r); break; } case "wycOrder": { LambdaQueryWrapper w = new LambdaQueryWrapper() .eq(notEmpty(period), WycOrderMonthly::getReportPeriod, period) .orderByDesc(WycOrderMonthly::getReportPeriod); List list = wycOrderMapper.selectList(w); List> rows = new ArrayList<>(); for (WycOrderMonthly o : list) { rows.addAll(wycOrderCityRows(o)); } result.put("records", rows); result.put("total", (long) rows.size()); result.put("current", 1L); result.put("size", (long) rows.size()); break; } default: result.put("records", new ArrayList<>()); result.put("total", 0L); result.put("current", safePage); result.put("size", safeSize); } return Result.ok(result); } /** 区划代码 -> 市州名(无法识别返回空串) */ private String cityOf(String regionCode) { if (regionCode == null || regionCode.trim().isEmpty()) return ""; String city = RegionUtil.cityByCode(regionCode.trim()); return city == null ? "" : city; } /** 按 regionCode 派生"市州"列(企业类表通用) */ private void fillCity(List> rows) { for (Map row : rows) { Object rc = row.get("regionCode"); row.put("city", cityOf(rc == null ? null : String.valueOf(rc))); } } /** 投资月报:补项目名称与市州(原表只有 projectId,页面无法辨识项目) */ private void fillProjectInfo(List> rows) { java.util.Set ids = new java.util.LinkedHashSet<>(); for (Map row : rows) { Object pid = row.get("projectId"); if (pid instanceof Number) ids.add(((Number) pid).longValue()); } if (ids.isEmpty()) return; Map byId = new LinkedHashMap<>(); for (InvestmentProject ip : investmentProjectMapper.selectBatchIds(ids)) { byId.put(ip.getId(), ip); } for (Map row : rows) { Object pid = row.get("projectId"); InvestmentProject ip = pid instanceof Number ? byId.get(((Number) pid).longValue()) : null; row.put("projectName", ip == null ? null : ip.getProjectName()); row.put("city", ip == null ? null : ip.getCity()); } } private static double nz(Double v) { return v == null ? 0.0 : v; } /** 网约车订单台账 -> 按市州竖排:全省 + 17 市州 × 指标(客运量/周转量由 WycSplitCalc 拆分口径计算) */ private List> wycOrderCityRows(WycOrderMonthly o) { List> rows = new ArrayList<>(); List cities = RegionUtil.cityList(); double orderSum = nz(o.getOrderSum()); double[] orders = { nz(o.getOrderWuhan()), nz(o.getOrderHuangshi()), nz(o.getOrderShiyan()), nz(o.getOrderYichang()), nz(o.getOrderXiangyang()), nz(o.getOrderEzhou()), nz(o.getOrderJingmen()), nz(o.getOrderXiaogan()), nz(o.getOrderJingzhou()), nz(o.getOrderHuanggang()), nz(o.getOrderXianning()), nz(o.getOrderSuizhou()), nz(o.getOrderEnshi()), nz(o.getOrderXiantao()), nz(o.getOrderQianjiang()), nz(o.getOrderTianmen()), nz(o.getOrderShennong()) }; Map province = new LinkedHashMap<>(); province.put("reportPeriod", o.getReportPeriod()); province.put("period", o.getReportPeriod()); province.put("region", "全省"); province.put("orderCount", orderSum); province.put("orderShare", orderSum > 0 ? 1.0 : null); province.put("pax", o.getPinK()); province.put("turnover", o.getPinZ()); province.put("cityPax", o.getPinCK()); province.put("cityTurnover", o.getPinCZ()); province.put("note", "全省口径直接取台账 pin 值"); rows.add(province); Map byCity = null; String calcError = null; try { byCity = wycSplitCalc.calc(o.getReportPeriod()).getByCity(); } catch (Exception e) { calcError = e.getMessage() == null ? "拆分计算失败" : e.getMessage(); } for (int i = 0; i < cities.size() && i < orders.length; i++) { String city = cities.get(i); Map row = new LinkedHashMap<>(); row.put("reportPeriod", o.getReportPeriod()); row.put("period", o.getReportPeriod()); row.put("region", city); row.put("orderCount", orders[i]); row.put("orderShare", orderSum > 0 ? orders[i] / orderSum : null); WycSplitCalc.WycMetrics m = byCity == null ? null : byCity.get(city); row.put("pax", m == null ? null : m.getTotalPax()); row.put("turnover", m == null ? null : m.getTotalTurnover()); row.put("cityPax", m == null ? null : m.getCityPax()); row.put("cityTurnover", m == null ? null : m.getCityTurnover()); row.put("note", m == null ? (calcError == null ? "拆分未计算" : calcError) : ""); rows.add(row); } return rows; } private boolean notEmpty(String s) { return s != null && !s.trim().isEmpty(); } private void fillPage(Map result, Page r) { result.put("total", r.getTotal()); result.put("current", r.getCurrent()); result.put("size", r.getSize()); } private List> toMaps(List records, String[] props) { List> list = new ArrayList<>(); for (Object rec : records) { Map bean = BeanUtil.beanToMap(rec); Map row = new LinkedHashMap<>(); for (String p : props) { row.put(p, bean.get(p)); } list.add(row); } return list; } private static String[] propsOf(List> columns) { String[] props = new String[columns.size()]; for (int i = 0; i < columns.size(); i++) { props[i] = String.valueOf(columns.get(i).get("prop")); } return props; } private List> columnsOf(String type) { switch (type) { case "h2032": return H2032_COLUMNS; case "transportAuth": return AUTH_COLUMNS; case "trackMileage": return TRACK_COLUMNS; case "scaleSplit": return SPLIT_COLUMNS; case "freightTurnover": return FREIGHT_COLUMNS; case "h2031": return H2031_COLUMNS; case "cityBus": return BUS_COLUMNS; case "cityTaxi": return TAXI_COLUMNS; case "cityTaxiAuth": return TAXI_AUTH_COLUMNS; case "passengerAuth": return PAUTH_COLUMNS; case "investmentMonthly": return INVEST_MONTHLY_COLUMNS; case "investmentProject": return INVEST_PROJECT_COLUMNS; case "investmentSystem": return INVEST_SYSTEM_COLUMNS; case "energyVehicle": return ENERGY_VEHICLE_COLUMNS; case "energyAuth": return ENERGY_AUTH_COLUMNS; case "passengerIndividual": return PAX_INDIVIDUAL_COLUMNS; case "wycTotal": return WYC_TOTAL_COLUMNS; case "wycOrder": return WYC_ORDER_COLUMNS; default: return new ArrayList<>(); } } private static Map col(String prop, String label, int width) { Map m = new LinkedHashMap<>(); m.put("prop", prop); m.put("label", label); m.put("width", width); return m; } private static final List> H2032_COLUMNS = new ArrayList<>(); private static final List> AUTH_COLUMNS = new ArrayList<>(); private static final List> TRACK_COLUMNS = new ArrayList<>(); private static final List> SPLIT_COLUMNS = new ArrayList<>(); private static final List> FREIGHT_COLUMNS = new ArrayList<>(); private static final List> H2031_COLUMNS = new ArrayList<>(); private static final List> PAUTH_COLUMNS = new ArrayList<>(); private static final List> BUS_COLUMNS = new ArrayList<>(); private static final List> TAXI_COLUMNS = new ArrayList<>(); private static final List> TAXI_AUTH_COLUMNS = new ArrayList<>(); private static final List> INVEST_MONTHLY_COLUMNS = new ArrayList<>(); private static final List> INVEST_PROJECT_COLUMNS = new ArrayList<>(); private static final List> INVEST_SYSTEM_COLUMNS = new ArrayList<>(); private static final List> ENERGY_VEHICLE_COLUMNS = new ArrayList<>(); private static final List> ENERGY_AUTH_COLUMNS = new ArrayList<>(); private static final List> PAX_INDIVIDUAL_COLUMNS = new ArrayList<>(); private static final List> WYC_TOTAL_COLUMNS = new ArrayList<>(); private static final List> WYC_ORDER_COLUMNS = new ArrayList<>(); static { H2032_COLUMNS.add(col("reportPeriod", "报表期", 100)); H2032_COLUMNS.add(col("regionCode", "所属地区", 100)); H2032_COLUMNS.add(col("city", "市州", 110)); H2032_COLUMNS.add(col("enterpriseCode", "企业代码", 130)); 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("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("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("avgDistance", "平均运距(公里)", 120)); H2032_COLUMNS.add(col("unitLeader", "单位负责人", 110)); H2032_COLUMNS.add(col("statsLeader", "统计负责人", 110)); H2032_COLUMNS.add(col("contactPerson", "填表人", 100)); H2032_COLUMNS.add(col("contactPhone", "联系电话", 120)); H2032_COLUMNS.add(col("reportDate", "报出日期", 110)); H2032_COLUMNS.add(col("verifyExplanation", "核实解释", 200)); H2032_COLUMNS.add(col("reportNotes", "备注", 160)); 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)); TRACK_COLUMNS.add(col("reportPeriod", "报表期", 100)); TRACK_COLUMNS.add(col("enterpriseName", "企业名称", 240)); TRACK_COLUMNS.add(col("monthlyMileage", "月度里程", 120)); TRACK_COLUMNS.add(col("trackedVehicles", "轨迹车辆数", 120)); 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("aboveScaleTurnover", "规上周转量(万吨公里)", 170)); SPLIT_COLUMNS.add(col("aboveScaleRank", "规上排名", 100)); SPLIT_COLUMNS.add(col("aboveScaleYoy", "规上同比", 100)); SPLIT_COLUMNS.add(col("belowScaleFreight", "规下货运量(来源文件未提供该列)", 220)); 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("totalTurnover", "合计周转量(万吨公里)", 170)); SPLIT_COLUMNS.add(col("totalRank", "合计排名", 100)); SPLIT_COLUMNS.add(col("totalYoy", "合计同比", 100)); 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)); } for (int m = 1; m <= 12; m++) { FREIGHT_COLUMNS.add(col(String.format("lastFreightM%02d", m), "去年货运量" + m + "月", 130)); } for (int m = 1; m <= 12; m++) { FREIGHT_COLUMNS.add(col(String.format("turnoverM%02d", m), "周转量" + m + "月", 120)); } for (int m = 1; m <= 12; m++) { FREIGHT_COLUMNS.add(col(String.format("lastTurnoverM%02d", m), "去年周转量" + m + "月", 140)); } H2031_COLUMNS.add(col("reportPeriod", "报表期", 100)); H2031_COLUMNS.add(col("regionCode", "所属地区", 100)); H2031_COLUMNS.add(col("city", "市州", 110)); H2031_COLUMNS.add(col("enterpriseCode", "企业代码", 130)); 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("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)); 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("passengerVolume", "客运量(万人次)", 120)); BUS_COLUMNS.add(col("passengerCity", "城市内客运量(万人次)", 150)); BUS_COLUMNS.add(col("turnover", "旅客周转量(万人公里)", 170)); BUS_COLUMNS.add(col("turnoverCity", "城市内周转量(万人公里)", 180)); BUS_COLUMNS.add(col("avgDistance", "平均运距(公里)", 120)); BUS_COLUMNS.add(col("avgDistanceCity", "城市内平均运距(公里)", 150)); BUS_COLUMNS.add(col("passengerChengxiang", "城际城乡客运量(万人次)", 160)); BUS_COLUMNS.add(col("turnoverChengxiang", "城际城乡周转量(万人公里)", 190)); BUS_COLUMNS.add(col("avgDistanceChengxiang", "城际城乡平均运距(公里)", 160)); BUS_COLUMNS.add(col("ratePassengerMom", "客运量环比", 100)); BUS_COLUMNS.add(col("ratePassengerCityMom", "城市内环比", 100)); BUS_COLUMNS.add(col("rateChengxiangMom", "城际城乡环比", 110)); BUS_COLUMNS.add(col("ratePassengerYoy", "客运量同比", 100)); BUS_COLUMNS.add(col("passengerCityRatio", "城市内占比", 100)); BUS_COLUMNS.add(col("chengxiangRatio", "城际城乡占比", 110)); BUS_COLUMNS.add(col("contactPerson", "填表人", 100)); BUS_COLUMNS.add(col("reportDate", "报出日期", 110)); BUS_COLUMNS.add(col("verifyExplanation", "核实解释", 220)); 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("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("avgDistance", "平均运距(公里)", 120)); TAXI_COLUMNS.add(col("avgDistanceCity", "城市内平均运距(公里)", 150)); TAXI_COLUMNS.add(col("passengersPerTrip", "单车次载客人数", 130)); TAXI_COLUMNS.add(col("rateTripMom", "载客车次环比", 110)); TAXI_COLUMNS.add(col("rateTripYoy", "载客车次同比", 110)); TAXI_COLUMNS.add(col("ratePassengerMom", "客运量环比", 100)); TAXI_COLUMNS.add(col("ratePassengerYoy", "客运量同比", 100)); TAXI_COLUMNS.add(col("passengerCityRatio", "城市内客运量占比", 140)); TAXI_COLUMNS.add(col("avgDistanceChengxiang", "城际城乡平均运距(公里)", 160)); TAXI_COLUMNS.add(col("verifyExplanation", "核实解释", 220)); TAXI_AUTH_COLUMNS.add(col("reportPeriod", "报表期", 100)); TAXI_AUTH_COLUMNS.add(col("city", "市州", 110)); TAXI_AUTH_COLUMNS.add(col("plateNo", "车牌号码", 120)); TAXI_AUTH_COLUMNS.add(col("vehicleType", "车辆类型", 110)); TAXI_AUTH_COLUMNS.add(col("fuelType", "燃料类型", 100)); TAXI_AUTH_COLUMNS.add(col("opStatus", "营运状态", 100)); TAXI_AUTH_COLUMNS.add(col("certStatus", "证件状态", 100)); TAXI_AUTH_COLUMNS.add(col("licenseNo", "经营权号", 130)); TAXI_AUTH_COLUMNS.add(col("archiveNo", "档案号", 130)); TAXI_AUTH_COLUMNS.add(col("roadCertNo", "道路运输证字号", 150)); TAXI_AUTH_COLUMNS.add(col("operatorName", "业户名称", 240)); TAXI_AUTH_COLUMNS.add(col("operatorAddr", "业户地址", 280)); 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)); INVEST_MONTHLY_COLUMNS.add(col("reportPeriod", "报表期", 100)); INVEST_MONTHLY_COLUMNS.add(col("projectId", "项目ID", 80)); INVEST_MONTHLY_COLUMNS.add(col("projectName", "项目名称", 280)); INVEST_MONTHLY_COLUMNS.add(col("city", "市州", 90)); INVEST_MONTHLY_COLUMNS.add(col("yearPlan", "本年计划投资(万元)", 140)); INVEST_MONTHLY_COLUMNS.add(col("yearCum", "自年初累计完成(万元)", 160)); INVEST_MONTHLY_COLUMNS.add(col("monthDone", "本月完成投资(万元)", 150)); 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_PROJECT_COLUMNS.add(col("projectName", "项目名称", 260)); INVEST_PROJECT_COLUMNS.add(col("category", "类别", 100)); INVEST_PROJECT_COLUMNS.add(col("city", "市州", 90)); INVEST_PROJECT_COLUMNS.add(col("county", "县(市、区)", 120)); INVEST_PROJECT_COLUMNS.add(col("builderName", "建设单位", 200)); INVEST_PROJECT_COLUMNS.add(col("constructNature", "建设性质", 100)); 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("approvalGk", "工可或核准批复文号", 200)); INVEST_PROJECT_COLUMNS.add(col("approvalCs", "初设或施工图批复文号", 200)); INVEST_PROJECT_COLUMNS.add(col("source", "来源", 100)); INVEST_SYSTEM_COLUMNS.add(col("reportPeriod", "报表期", 100)); INVEST_SYSTEM_COLUMNS.add(col("projectName", "项目名称", 260)); INVEST_SYSTEM_COLUMNS.add(col("totalInvestment", "总投资(万元)", 130)); INVEST_SYSTEM_COLUMNS.add(col("startCum", "自开始建设累计完成(万元)", 180)); INVEST_SYSTEM_COLUMNS.add(col("yearPlan", "本年计划投资(万元)", 140)); INVEST_SYSTEM_COLUMNS.add(col("yearCum", "自年初累计完成(万元)", 160)); INVEST_SYSTEM_COLUMNS.add(col("monthDone", "本月完成投资(万元)", 150)); ENERGY_VEHICLE_COLUMNS.add(col("reportPeriod", "报表期", 100)); ENERGY_VEHICLE_COLUMNS.add(col("regionCode", "所属地区", 100)); ENERGY_VEHICLE_COLUMNS.add(col("city", "市州", 110)); ENERGY_VEHICLE_COLUMNS.add(col("enterpriseName", "企业名称", 220)); ENERGY_VEHICLE_COLUMNS.add(col("plateNo", "车牌号", 110)); 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("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("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_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)); 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)); WYC_TOTAL_COLUMNS.add(col("reportPeriod", "报表期", 100)); WYC_TOTAL_COLUMNS.add(col("pinK", "全省网约车客运量(万人次)", 210)); WYC_TOTAL_COLUMNS.add(col("pinCK", "其中城市内客运量(万人次)", 210)); WYC_TOTAL_COLUMNS.add(col("pinZ", "全省网约车周转量(万人公里)", 220)); WYC_TOTAL_COLUMNS.add(col("pinCZ", "其中城市内周转量(万人公里)", 220)); WYC_ORDER_COLUMNS.add(col("region", "地区", 110)); WYC_ORDER_COLUMNS.add(col("period", "期间", 100)); WYC_ORDER_COLUMNS.add(col("orderCount", "订单数(单)", 130)); WYC_ORDER_COLUMNS.add(col("orderShare", "订单占比", 100)); WYC_ORDER_COLUMNS.add(col("pax", "客运量(万人次)", 140)); WYC_ORDER_COLUMNS.add(col("turnover", "旅客周转量(万人公里)", 180)); WYC_ORDER_COLUMNS.add(col("cityPax", "其中城市内客运量(万人次)", 190)); WYC_ORDER_COLUMNS.add(col("cityTurnover", "其中城市内旅客周转量(万人公里)", 230)); WYC_ORDER_COLUMNS.add(col("note", "说明", 200)); } }