| | |
| | | public TCharingOrderVO chargingOrderSummary(ChargingOrderQuery dto) { |
| | | TCharingOrderVO tCharingOrderVO = new TCharingOrderVO(); |
| | | fillEmptyChargingOrderSummary(tCharingOrderVO); |
| | | if (isChargingOrderFullSweep(dto)) { |
| | | // 无任何筛选即全量扫描:汇总聚合跨分片 JOIN(accounting_strategy,分片键 charging_order_id 与 t_charging_order 不一致) |
| | | // 且需把全量订单 id 反查 share/balance,MyCat 只能全量拉回代理层,必然超时。汇总没有 LIMIT 可下推,直接返回空汇总。 |
| | | return tCharingOrderVO; |
| | | } |
| | | String[] timeRange = parseChargingOrderTimeRange(dto); |
| | | String startTime1 = timeRange[0]; |
| | | String startTime2 = timeRange[1]; |
| | |
| | | endTime2 = split[1]; |
| | | } |
| | | return new String[]{startTime1, startTime2, endTime1, endTime2}; |
| | | } |
| | | |
| | | /** 是否全量扫描:用户未提供任何可收窄的筛选条件(时间/订单号/手机号/站点/桩/枪/状态等),无界聚合无法下推。 */ |
| | | private boolean isChargingOrderFullSweep(ChargingOrderQuery dto) { |
| | | return !StringUtils.hasLength(dto.getStartTime()) |
| | | && !StringUtils.hasLength(dto.getEndTime()) |
| | | && !StringUtils.hasLength(dto.getCode()) |
| | | && !StringUtils.hasLength(dto.getPhone()) |
| | | && dto.getSiteId() == null |
| | | && dto.getPileId() == null |
| | | && dto.getGunId() == null |
| | | && dto.getOrderType() == null |
| | | && dto.getStatus() == null |
| | | && dto.getIsWhitelist() == null |
| | | && dto.getPaymentType() == null |
| | | && dto.getOrderSource() == null |
| | | && (dto.getUserIds() == null || dto.getUserIds().isEmpty()); |
| | | } |
| | | |
| | | private void fillChargingOrderPageExtra(List<ChargingOrderVO> list, List<Integer> siteIds, SysUser sysUser, Integer roleType) { |
| | |
| | | */ |
| | | @Override |
| | | public List<ChargingOrderBalanceIncomeDetailVO> balanceIncomeDetail(ChargingOrderQuery dto) { |
| | | if (isChargingOrderFullSweep(dto)) { |
| | | // 与汇总同根因:全量扫描会把全量订单 id 反查 exchange_code_use_record,MyCat 超时,直接返回空明细 |
| | | return new ArrayList<>(); |
| | | } |
| | | String startTime1 = null; |
| | | String startTime2 = null; |
| | | String endTime1 = null; |