| | |
| | | .eq(TChargingOrder::getDelFlag, 0) |
| | | .orderByDesc(TChargingOrder::getCreateTime) |
| | | .last(" limit 0, 1")); |
| | | if (null == one || !one.getAppUserId().equals(userId)) { |
| | | if (null != one && !userId.equals(one.getAppUserId())) { |
| | | one = null; |
| | | } |
| | | // 普通订单在充电中(2=启动中/3=充电中/4=停止中)时直接返回,保持原快路径不变; |
| | | // 普通订单已结束(5)或不存在时才与 VIN 码订单比较:未结束订单优先,其次取创建时间更近的一笔。 |
| | | // 避免同一把枪先有普通订单完成、随后 VIN 码充电时,充电页被历史完成订单抢占而误入 |
| | | // 「充电完成」弹窗,导致用户无法停止充电。 |
| | | if (null == one || !isActiveStatus(one.getStatus())) { |
| | | // VIN 码充电订单兜底:VD 订单存于 t_vin_charging_order,且后付模式无支付动作, |
| | | // 不按 rechargePaymentStatus 过滤;TVinChargingOrder 继承 TChargingOrder,后续组装原样复用 |
| | | // 状态同样包含已结束(5),保证 VIN 订单结束后前端仍能拿到完成态 |
| | |
| | | .eq(TVinChargingOrder::getDelFlag, 0) |
| | | .orderByDesc(TVinChargingOrder::getCreateTime) |
| | | .last(" limit 0, 1")); |
| | | if (null == vinOrder) { |
| | | return null; |
| | | if (null != vinOrder && (isActiveStatus(vinOrder.getStatus()) || null == one || isNewerOrder(vinOrder, one))) { |
| | | one = vinOrder; |
| | | } |
| | | one = vinOrder; |
| | | } |
| | | if (null == one) { |
| | | return null; |
| | | } |
| | | ChargingDetails chargingDetails = new ChargingDetails(); |
| | | chargingDetails.setId(one.getId().toString()); |
| | |
| | | } |
| | | |
| | | |
| | | /** 订单是否为未结束状态:2=启动中、3=充电中、4=停止中(5=已结束 不算未结束) */ |
| | | private boolean isActiveStatus(Integer status) { |
| | | return null != status && status >= 2 && status <= 4; |
| | | } |
| | | |
| | | /** candidate 订单创建时间是否晚于 current(createTime 缺失时按“不更晚”处理,保持普通订单优先的历史行为) */ |
| | | private boolean isNewerOrder(TChargingOrder candidate, TChargingOrder current) { |
| | | return null != candidate.getCreateTime() |
| | | && (null == current.getCreateTime() || candidate.getCreateTime().isAfter(current.getCreateTime())); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 停止充电操作 |
| | | * |