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.ScaleSplitTransport; import com.trafficaudit.dataimport.entity.TransportAuthVehicle; import com.trafficaudit.dataimport.entity.VehicleTrackMileage; import com.trafficaudit.dataimport.mapper.FreightTurnoverImportMapper; import com.trafficaudit.dataimport.mapper.H2032EnterpriseMonthlyMapper; import com.trafficaudit.dataimport.mapper.ScaleSplitTransportMapper; import com.trafficaudit.dataimport.mapper.TransportAuthVehicleMapper; import com.trafficaudit.dataimport.mapper.VehicleTrackMileageMapper; 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; @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); result.put("records", toMaps(r.getRecords(), propsOf(H2032_COLUMNS))); 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 "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; } default: result.put("records", new ArrayList<>()); result.put("total", 0L); result.put("current", safePage); result.put("size", safeSize); } return Result.ok(result); } 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; 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<>(); static { H2032_COLUMNS.add(col("reportPeriod", "报表期", 100)); H2032_COLUMNS.add(col("regionCode", "所属地区", 100)); 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", "标记吨位数合计", 130)); 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", "货运量合计", 110)); H2032_COLUMNS.add(col("turnoverTotal", "周转量合计", 110)); 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", "平均运距", 100)); 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", "规上货运量", 120)); SPLIT_COLUMNS.add(col("aboveScaleTurnover", "规上周转量", 120)); SPLIT_COLUMNS.add(col("aboveScaleRank", "规上排名", 100)); SPLIT_COLUMNS.add(col("aboveScaleYoy", "规上同比", 100)); SPLIT_COLUMNS.add(col("belowScaleFreight", "规下货运量", 120)); SPLIT_COLUMNS.add(col("belowScaleTurnover", "规下周转量", 120)); SPLIT_COLUMNS.add(col("belowScaleRank", "规下排名", 100)); SPLIT_COLUMNS.add(col("belowScaleYoy", "规下同比", 100)); SPLIT_COLUMNS.add(col("totalFreight", "合计货运量", 120)); SPLIT_COLUMNS.add(col("totalTurnover", "合计周转量", 120)); 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)); } } }