| | |
| | | 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.CityBusMonthly; |
| | | import com.trafficaudit.dataimport.entity.CityTaxiMonthly; |
| | | import com.trafficaudit.dataimport.entity.H2032EnterpriseMonthly; |
| | | import com.trafficaudit.dataimport.entity.PassengerEnterpriseMonthly; |
| | | import com.trafficaudit.dataimport.mapper.CityBusMonthlyMapper; |
| | | import com.trafficaudit.dataimport.mapper.CityTaxiMonthlyMapper; |
| | | import com.trafficaudit.dataimport.mapper.H2032EnterpriseMonthlyMapper; |
| | | import com.trafficaudit.dataimport.mapper.PassengerEnterpriseMonthlyMapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 企业解释:独立于审核结果的解释列表与 AI 分析入口 |
| | | * 企业解释:独立于审核结果的解释列表与 AI 分析入口。 |
| | | * 支持多报表类型:H2032 货运、H2031 公路旅客、CITY_BUS 城市公交、CITY_TAXI 巡游出租。 |
| | | */ |
| | | @Slf4j |
| | | @RestController |
| | |
| | | |
| | | @Resource |
| | | private H2032EnterpriseMonthlyMapper h2032Mapper; |
| | | @Resource |
| | | private PassengerEnterpriseMonthlyMapper passengerMapper; |
| | | @Resource |
| | | private CityBusMonthlyMapper cityBusMapper; |
| | | @Resource |
| | | private CityTaxiMonthlyMapper cityTaxiMapper; |
| | | |
| | | @GetMapping("/list") |
| | | public Result<Map<String, Object>> list(@RequestParam(value = "period", required = false) String period, |
| | | public Result<Map<String, Object>> list(@RequestParam(value = "reportType", defaultValue = "H2032") String reportType, |
| | | @RequestParam(value = "period", required = false) String period, |
| | | @RequestParam(value = "keyword", required = false) String keyword, |
| | | @RequestParam(value = "hasExplanation", defaultValue = "false") boolean hasExplanation, |
| | | @RequestParam(value = "page", defaultValue = "1") long page, |
| | | @RequestParam(value = "size", defaultValue = "20") long size) { |
| | | String kw = keyword == null ? "" : keyword.trim(); |
| | | boolean hasPeriod = period != null && !period.trim().isEmpty(); |
| | | |
| | | LambdaQueryWrapper<H2032EnterpriseMonthly> w = new LambdaQueryWrapper<H2032EnterpriseMonthly>() |
| | | .eq(hasPeriod, H2032EnterpriseMonthly::getReportPeriod, period) |
| | | .isNotNull(H2032EnterpriseMonthly::getVerifyExplanation) |
| | | .ne(H2032EnterpriseMonthly::getVerifyExplanation, "") |
| | | .like(!kw.isEmpty(), H2032EnterpriseMonthly::getEnterpriseName, kw) |
| | | .orderByDesc(H2032EnterpriseMonthly::getId); |
| | | |
| | | Page<H2032EnterpriseMonthly> p = new Page<>(Math.max(page, 1), Math.min(Math.max(size, 1), 200)); |
| | | Page<H2032EnterpriseMonthly> r = h2032Mapper.selectPage(p, w); |
| | | long p = Math.max(page, 1); |
| | | long s = Math.min(Math.max(size, 1), 200); |
| | | |
| | | List<Map<String, Object>> records = new ArrayList<>(); |
| | | long total = 0; |
| | | |
| | | if ("H2031".equals(reportType)) { |
| | | LambdaQueryWrapper<PassengerEnterpriseMonthly> w = new LambdaQueryWrapper<PassengerEnterpriseMonthly>() |
| | | .eq(hasPeriod, PassengerEnterpriseMonthly::getReportPeriod, period) |
| | | .isNotNull(hasExplanation, PassengerEnterpriseMonthly::getVerifyExplanation) |
| | | .ne(hasExplanation, PassengerEnterpriseMonthly::getVerifyExplanation, "") |
| | | .like(!kw.isEmpty(), PassengerEnterpriseMonthly::getEnterpriseName, kw) |
| | | .orderByDesc(PassengerEnterpriseMonthly::getId); |
| | | Page<PassengerEnterpriseMonthly> r = passengerMapper.selectPage(new Page<>(p, s), w); |
| | | for (PassengerEnterpriseMonthly e : r.getRecords()) { |
| | | Map<String, Object> row = baseRow(e.getId(), e.getReportPeriod(), e.getRegionCode(), |
| | | e.getEnterpriseCode(), e.getEnterpriseName(), e.getVerifyExplanation()); |
| | | row.put("vehicleTotal", e.getVehicleTotal()); |
| | | row.put("seatTotal", e.getSeatTotal()); |
| | | row.put("passengerTotal", e.getPassengerTotal()); |
| | | row.put("turnoverTotal", e.getTurnoverTotal()); |
| | | row.put("avgDistance", e.getAvgDistanceTotal()); |
| | | records.add(row); |
| | | } |
| | | total = r.getTotal(); |
| | | } else if ("CITY_BUS".equals(reportType)) { |
| | | LambdaQueryWrapper<CityBusMonthly> w = new LambdaQueryWrapper<CityBusMonthly>() |
| | | .eq(hasPeriod, CityBusMonthly::getReportPeriod, period) |
| | | .isNotNull(hasExplanation, CityBusMonthly::getVerifyExplanation) |
| | | .ne(hasExplanation, CityBusMonthly::getVerifyExplanation, "") |
| | | .like(!kw.isEmpty(), CityBusMonthly::getEnterpriseName, kw) |
| | | .orderByDesc(CityBusMonthly::getId); |
| | | Page<CityBusMonthly> r = cityBusMapper.selectPage(new Page<>(p, s), w); |
| | | for (CityBusMonthly e : r.getRecords()) { |
| | | Map<String, Object> row = baseRow(e.getId(), e.getReportPeriod(), e.getRegionCode(), |
| | | e.getEnterpriseCode(), e.getEnterpriseName(), e.getVerifyExplanation()); |
| | | row.put("city", e.getCity()); |
| | | row.put("opVehicles", e.getOpVehicles()); |
| | | row.put("passengerVolume", e.getPassengerVolume()); |
| | | row.put("turnover", e.getTurnover()); |
| | | row.put("avgDistance", e.getAvgDistance()); |
| | | records.add(row); |
| | | } |
| | | total = r.getTotal(); |
| | | } else if ("CITY_TAXI".equals(reportType)) { |
| | | LambdaQueryWrapper<CityTaxiMonthly> w = new LambdaQueryWrapper<CityTaxiMonthly>() |
| | | .eq(hasPeriod, CityTaxiMonthly::getReportPeriod, period) |
| | | .isNotNull(hasExplanation, CityTaxiMonthly::getVerifyExplanation) |
| | | .ne(hasExplanation, CityTaxiMonthly::getVerifyExplanation, "") |
| | | .like(!kw.isEmpty(), CityTaxiMonthly::getCity, kw) |
| | | .orderByDesc(CityTaxiMonthly::getId); |
| | | Page<CityTaxiMonthly> r = cityTaxiMapper.selectPage(new Page<>(p, s), w); |
| | | for (CityTaxiMonthly e : r.getRecords()) { |
| | | Map<String, Object> row = baseRow(e.getId(), e.getReportPeriod(), e.getRegionCode(), |
| | | null, e.getCity(), e.getVerifyExplanation()); |
| | | row.put("city", e.getCity()); |
| | | row.put("opVehicles", e.getOpVehicles()); |
| | | row.put("tripTotal", e.getTripTotal()); |
| | | row.put("passengerVolume", e.getPassengerVolume()); |
| | | row.put("turnover", e.getTurnover()); |
| | | row.put("avgDistance", e.getAvgDistance()); |
| | | records.add(row); |
| | | } |
| | | total = r.getTotal(); |
| | | } else { |
| | | LambdaQueryWrapper<H2032EnterpriseMonthly> w = new LambdaQueryWrapper<H2032EnterpriseMonthly>() |
| | | .eq(hasPeriod, H2032EnterpriseMonthly::getReportPeriod, period) |
| | | .isNotNull(hasExplanation, H2032EnterpriseMonthly::getVerifyExplanation) |
| | | .ne(hasExplanation, H2032EnterpriseMonthly::getVerifyExplanation, "") |
| | | .like(!kw.isEmpty(), H2032EnterpriseMonthly::getEnterpriseName, kw) |
| | | .orderByDesc(H2032EnterpriseMonthly::getId); |
| | | Page<H2032EnterpriseMonthly> r = h2032Mapper.selectPage(new Page<>(p, s), w); |
| | | for (H2032EnterpriseMonthly e : r.getRecords()) { |
| | | Map<String, Object> row = new LinkedHashMap<>(); |
| | | row.put("id", e.getId()); |
| | | row.put("reportPeriod", e.getReportPeriod()); |
| | | row.put("regionCode", e.getRegionCode()); |
| | | row.put("enterpriseCode", e.getEnterpriseCode()); |
| | | row.put("enterpriseName", e.getEnterpriseName()); |
| | | Map<String, Object> row = baseRow(e.getId(), e.getReportPeriod(), e.getRegionCode(), |
| | | e.getEnterpriseCode(), e.getEnterpriseName(), e.getVerifyExplanation()); |
| | | row.put("vehicleTotal", e.getVehicleTotal()); |
| | | row.put("tonsTotal", e.getTonsTotal()); |
| | | row.put("freightTotal", e.getFreightTotal()); |
| | | row.put("turnoverTotal", e.getTurnoverTotal()); |
| | | row.put("avgDistance", e.getAvgDistance()); |
| | | row.put("verifyExplanation", e.getVerifyExplanation()); |
| | | records.add(row); |
| | | } |
| | | total = r.getTotal(); |
| | | } |
| | | |
| | | Map<String, Object> result = new LinkedHashMap<>(); |
| | | result.put("reportType", reportType); |
| | | result.put("records", records); |
| | | result.put("total", r.getTotal()); |
| | | result.put("current", r.getCurrent()); |
| | | result.put("size", r.getSize()); |
| | | result.put("total", total); |
| | | result.put("current", p); |
| | | result.put("size", s); |
| | | return Result.ok(result); |
| | | } |
| | | |
| | | /** |
| | | * 保存企业解释:更新对应来源表(H2032/H2031/CITY_BUS/CITY_TAXI)行的 verifyExplanation。 |
| | | * 审核结果页内嵌解释模块与「企业解释」页共用此接口。 |
| | | */ |
| | | @PostMapping("/save") |
| | | public Result<String> save(@RequestParam("reportType") String reportType, |
| | | @RequestParam("reportId") Long reportId, |
| | | @RequestParam(value = "explanation", required = false) String explanation) { |
| | | String exp = explanation == null ? "" : explanation.trim(); |
| | | boolean ok = false; |
| | | String t = reportType == null ? "" : reportType; |
| | | try { |
| | | switch (t) { |
| | | case "H2032": { |
| | | H2032EnterpriseMonthly e = h2032Mapper.selectById(reportId); |
| | | if (e != null) { e.setVerifyExplanation(exp); h2032Mapper.updateById(e); ok = true; } |
| | | break; |
| | | } |
| | | case "H2031": { |
| | | PassengerEnterpriseMonthly e = passengerMapper.selectById(reportId); |
| | | if (e != null) { e.setVerifyExplanation(exp); passengerMapper.updateById(e); ok = true; } |
| | | break; |
| | | } |
| | | case "CITY_BUS": { |
| | | CityBusMonthly e = cityBusMapper.selectById(reportId); |
| | | if (e != null) { e.setVerifyExplanation(exp); cityBusMapper.updateById(e); ok = true; } |
| | | break; |
| | | } |
| | | case "CITY_TAXI": { |
| | | CityTaxiMonthly e = cityTaxiMapper.selectById(reportId); |
| | | if (e != null) { e.setVerifyExplanation(exp); cityTaxiMapper.updateById(e); ok = true; } |
| | | break; |
| | | } |
| | | default: |
| | | throw new RuntimeException("不支持的报表类型:" + reportType); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("explain save error", e); |
| | | return Result.error("保存失败: " + e.getMessage()); |
| | | } |
| | | if (!ok) { |
| | | return Result.error("未找到对应的数据行(reportId=" + reportId + ")"); |
| | | } |
| | | return Result.ok(exp); |
| | | } |
| | | |
| | | private Map<String, Object> baseRow(Long id, String reportPeriod, String regionCode, |
| | | String enterpriseCode, String enterpriseName, String verifyExplanation) { |
| | | Map<String, Object> row = new LinkedHashMap<>(); |
| | | row.put("id", id); |
| | | row.put("reportPeriod", reportPeriod); |
| | | row.put("regionCode", regionCode); |
| | | row.put("enterpriseCode", enterpriseCode); |
| | | row.put("enterpriseName", enterpriseName); |
| | | row.put("verifyExplanation", verifyExplanation); |
| | | return row; |
| | | } |
| | | } |