package com.ruoyi.order.service; import com.ruoyi.common.core.web.page.PageInfo; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.R; import com.ruoyi.order.api.dto.DeviceStartChargingDTO; import com.ruoyi.order.api.model.TCardChargingOrder; import com.ruoyi.order.api.query.CardBalanceDetailQuery; import com.ruoyi.order.api.query.CardChargingOrderQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.CardBalanceDetailVO; import com.ruoyi.order.api.vo.ChargingOrderVO; import com.ruoyi.order.api.vo.DeviceStartChargingVO; import com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO; import com.ruoyi.order.api.vo.TransactionRecordMessageVO; import java.util.List; import java.util.Map; public interface TCardChargingOrderService extends IService { PageInfo pageList(CardChargingOrderQuery query); /** * 按查询条件导出全部刷卡充电订单(不分页) */ List exportList(CardChargingOrderQuery query); Map summary(CardChargingOrderQuery query); Map detail(Long chargingOrderId); List> balanceIncomeDetail(CardChargingOrderQuery query); List> accountingStrategyList(Long chargingOrderId); PageInfo balanceDetailPage(CardBalanceDetailQuery query); Map balanceDetailSummary(CardBalanceDetailQuery query); List balanceDetailExport(CardBalanceDetailQuery query); // ===== 设备侧刷卡充电链路(V0.2 刷卡充电) ===== /** * 设备主动发起刷卡充电:卡片鉴权 -> 建单(状态2) -> 策略快照 -> 锁卡; * 锁卡失败回滚删除订单并返回失败原因4。 */ DeviceStartChargingVO startCardCharging(DeviceStartChargingDTO dto); /** * 根据订单编号查询刷卡充电订单(SD前缀) */ TCardChargingOrder getCardOrderByCode(String code); /** * 刷卡订单收到桩启动应答:成功(结果1)置为充电中;失败置为启动失败并解锁卡片、复位枪 */ void cardStartChargeSuccessfully(PlatformStartChargingReplyMessageVO vo); /** * 刷卡订单充电握手处理:回写实际VIN;仅订单状态为启动中(2)时推进为充电中(3)、 * 补开始时间、置枪充电中并推监管(其余状态幂等跳过,不复活已关单) */ boolean handleHandshakeVin(String orderCode, String vin); /** * 刷卡订单实时监控数据更新(首次数据将订单置为充电中) */ void cardChargeMonitoring(UploadRealTimeMonitoringDataQuery query); /** * 刷卡订单充电结束(设备自动结束/异常终止时更新结束方式) */ void cardEndCharge(String orderCode, Integer endMode); /** * 刷卡订单最终结算(统一结算入口,SD): * 订单号结算锁 -> 幂等(状态5跳过) -> 分时电量按快照计价 -> 写计费明细 -> 更新订单(状态5,允许负余额) * -> 卡账户扣款(幂等) -> 解锁卡片 -> 复位枪 */ R cardEndChargeBillingCharge(TransactionRecordMessageVO vo); // ===== 定时补偿(文档13.3:异常断电/补账场景,走统一结算入口) ===== /** * 查询启动超时(状态2超过阈值未收到启动成功应答)的刷卡订单 */ List listTimeoutStartingOrders(); /** * 查询充电中的刷卡订单,由定时任务结合 Mongo 交易记录和实时数据判断是否补偿 */ List listTimeoutChargingOrders(); /** * 扫描已结束但没有充电扣款流水的刷卡订单,条件回退为停止中等待重新结算。 * * @return 本轮成功回退的订单数量 */ int recoverFinishedOrdersWithoutDeduct(); /** * 启动超时关单:仅当前状态仍为启动中时置为启动失败(-1),解锁卡片并复位充电枪 */ void closeTimeoutStartingOrder(TCardChargingOrder order); /** * 无完整设备交易记录且实时数据静默超时时,以订单累计电量构造平段账单,复用统一结算入口 */ void compensationSettle(TCardChargingOrder order); }