| | |
| | | package com.ruoyi.order.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.order.api.dto.DeviceStartChargingDTO; |
| | | import com.ruoyi.order.api.model.TVinChargingOrder; |
| | | import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; |
| | | import com.ruoyi.order.api.query.VinChargingOrderQuery; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | 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.PlatformStopChargingReplyVO; |
| | | import com.ruoyi.order.api.vo.TransactionRecordMessageVO; |
| | | import com.ruoyi.order.api.vo.VinChargingStatusVO; |
| | | import com.ruoyi.order.dto.MyVinChargingOrderList; |
| | | |
| | |
| | | |
| | | PageInfo<MyVinChargingOrderList> pageAppletOrders(Integer pageCurr, Integer pageSize); |
| | | |
| | | Map<String, Object> appletDetail(Long chargingOrderId); |
| | | |
| | | List<VinChargingStatusVO> getChargingVinStatus(List<Long> vinIds); |
| | | |
| | | List<ChargingOrderVO> exportList(VinChargingOrderQuery query); |
| | |
| | | |
| | | AjaxResult stopCharging(String chargingOrderId, Integer chargingGunId); |
| | | |
| | | /** |
| | | * 小程序端停止VIN码充电订单(正在充电界面调用): |
| | | * 复用 getAuthorizedAppletOrder 鉴权(VIN当前归属+下单用户一致),仅状态3允许停止, |
| | | * 置状态4/结束方式1/结束时间并下发平台停机指令 |
| | | */ |
| | | AjaxResult stopChargingByApplet(String chargingOrderId); |
| | | |
| | | List<Map<String, Object>> accountingStrategyList(Long chargingOrderId); |
| | | |
| | | // ===== 设备侧VIN码充电链路(V0.2 VIN码充电) ===== |
| | | |
| | | /** |
| | | * 设备主动发起VIN码充电:VIN反序解析 -> 绑定关系校验 -> 建单(状态2) -> 策略快照 |
| | | */ |
| | | DeviceStartChargingVO startVinCharging(DeviceStartChargingDTO dto); |
| | | |
| | | /** |
| | | * 根据订单编号查询VIN码充电订单(VD前缀) |
| | | */ |
| | | TVinChargingOrder getVinOrderByCode(String code); |
| | | |
| | | /** |
| | | * VIN订单收到桩启动应答:成功置为充电中;失败置为启动失败并复位枪 |
| | | */ |
| | | void vinStartChargeSuccessfully(PlatformStartChargingReplyMessageVO vo); |
| | | |
| | | /** |
| | | * VIN订单充电握手处理:回写实际VIN;仅订单状态为启动中(2)时推进为充电中(3)、 |
| | | * 补开始时间、置枪充电中并推监管(其余状态幂等跳过,不复活已关单) |
| | | */ |
| | | boolean handleHandshakeVin(String orderCode, String vin); |
| | | |
| | | /** |
| | | * VIN订单实时监控数据更新(首次数据将订单置为充电中) |
| | | */ |
| | | void vinChargeMonitoring(UploadRealTimeMonitoringDataQuery query); |
| | | |
| | | /** |
| | | * VIN订单充电结束(设备自动结束/异常终止时更新结束方式) |
| | | */ |
| | | void vinEndCharge(String orderCode, Integer endMode); |
| | | |
| | | /** |
| | | * VIN订单最终结算(统一结算入口,VD):订单号结算锁 -> 幂等(状态5跳过) -> 分时电量按快照计价 |
| | | * -> 写计费明细 -> 更新订单(状态5);不做任何账户扣款操作(后付记账模式) |
| | | */ |
| | | R vinEndChargeBillingCharge(TransactionRecordMessageVO vo); |
| | | |
| | | /** |
| | | * 查询充电枪最新停止中(状态4)的VIN订单(平台停止应答兜底处理) |
| | | */ |
| | | TVinChargingOrder getLatestStoppingByGunId(Integer gunId); |
| | | |
| | | /** |
| | | * 平台停止充电应答兜底:确认结束方式为主动终止(与stopCharging前置更新幂等合并) |
| | | */ |
| | | void vinTerminateStopByReply(PlatformStopChargingReplyVO vo); |
| | | |
| | | // ===== 定时补偿(文档13.3:异常断电/补账场景,走统一结算入口) ===== |
| | | |
| | | /** |
| | | * 查询启动超时(状态2超过阈值未收到启动成功应答)的VIN订单 |
| | | */ |
| | | List<TVinChargingOrder> listTimeoutStartingOrders(); |
| | | |
| | | /** |
| | | * 查询充电中/停止中的VIN订单,由定时任务结合 Mongo 交易记录和实时数据判断是否补偿 |
| | | */ |
| | | List<TVinChargingOrder> listTimeoutChargingOrders(); |
| | | |
| | | /** |
| | | * 启动超时关单:仅当前状态仍为启动中时置为启动失败(-1)并复位充电枪 |
| | | */ |
| | | void closeTimeoutStartingOrder(TVinChargingOrder order); |
| | | |
| | | /** |
| | | * 无完整设备交易记录且实时数据静默超时时,以订单累计电量构造平段账单,复用统一结算入口 |
| | | */ |
| | | void compensationSettle(TVinChargingOrder order); |
| | | |
| | | /** |
| | | * 结算失败重试队列扫描(1分钟主触发):处理账户结算失败回退的状态4订单, |
| | | * 成功/订单终态/重试超次后出队,超次订单交由10分钟补偿任务做 DB 兜底 |
| | | * |
| | | * @return 本轮处理的到期成员数量 |
| | | */ |
| | | int retryPendingVinSettle(); |
| | | } |