package com.ruoyi.order.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ChargingOrderGroup; import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.dto.SettlementConfirmAdd; import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.ChargingOrderQuery; import com.ruoyi.order.api.query.SettlementListQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.*; import com.ruoyi.order.dto.*; import com.ruoyi.order.vo.ChargingOrderListInfoVO; import com.ruoyi.order.vo.ChargingSimulationVO; import com.ruoyi.order.vo.IcbcAdminSubOrderVO; import com.ruoyi.order.vo.EndOfChargePageInfo; import com.ruoyi.order.vo.StatisticsOfBatteryVO; import com.ruoyi.order.vo.LargeChargingPowerVo; import com.ruoyi.order.vo.ReservationRecommendationVO; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import java.util.Map; import com.ruoyi.payment.api.vo.IcbcPaymentResp; import com.ruoyi.payment.api.vo.IcbcRefundResp; import com.ruoyi.payment.api.vo.IcbcSubOrderRefundResp; /** *

* 服务类 *

* * @author xiaochen * @since 2024-08-07 */ public interface TChargingOrderService extends IService { ReservationRecommendationVO getReservationRecommendation(Integer siteId); /** * 获取小程序充电记录列表数据 * @param query * @return */ Map getMyChargingOrderList(GetMyChargingOrderList query); /** * 获取小程序充电记录明细 * @param id * @return */ MyChargingOrderInfo getMyChargingOrderInfo(String id); /** * 获取待开票订单列表 * @param query * @return */ List getNoInvoicedOrder(GetNoInvoicedOrder query); /** * 充电支付 * @param addChargingOrder * @return */ AjaxResult paymentChargingOrder(AddChargingOrder addChargingOrder); AjaxResult confirmIcbcPayment(String orderCode); ChargingSimulationVO getCurrentSimulationOrder(Integer gunId); ChargingSimulationVO completeSimulation(ChargingSimulationReq request); IcbcPaymentResp queryIcbcAdminPayment(String orderCode); IcbcRefundResp refundIcbcAdminPayment(IcbcAdminFundOperationReq request); List queryIcbcAdminSubOrders(String orderCode); IcbcSubOrderRefundResp refundIcbcAdminSubOrder(IcbcAdminFundOperationReq request); /** * 支付成功后的回调处理逻辑 * @param paymentType 支付方式:1=微信,2=支付宝 * @param out_trade_no 业务流水号 * @param transaction_id 三方支付流水号 * @param attach 附加数据 * @return */ AjaxResult chargingOrderCallback(Integer paymentType, String out_trade_no, String transaction_id, String attach); /** * 安全检测数据 * @param securityDetection */ void securityDetection(SecurityDetectionVO securityDetection); /** * 启动充电应发 * @param message */ void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message); /** * 充电启动失败后的退款回调处理 * @param out_refund_no * @param refund_id * @param tradeState * @param success_time * @return */ AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time); /** * 启动失败退款操作 * @param code */ void refund(String code); void refund1(String code, BigDecimal money); /** * 获取充电中的详情 * @param id * @return */ ChargingDetails getChargingDetails(Integer id); /** * 停止充电 * @param id * @return */ AjaxResult stopCharging(String id); void editUserTag(TChargingOrder chargingOrder); void referralReward(TChargingOrder chargingOrder); /** * 停止充电应答结果处理 * @param platformStopChargingReply */ void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply); TCharingOrderVO chargingOrder(ChargingOrderQuery dto); PageInfo chargingOrderList(ChargingOrderQuery dto); TCharingOrderVO chargingOrderSummary(ChargingOrderQuery dto); List balanceIncomeDetail(ChargingOrderQuery dto); R> payOrderQuery(PayOrderQueryDto payOrderQueryDto); R> enterpriseChargingAnalysis(EnterpriseChargingAnalysisQuery query); R> enterpriseChargingDetail(EnterpriseChargingAnalysisQuery query); List enterpriseChargingDetailExport(EnterpriseChargingAnalysisQuery query); R> getRefundList(ChargingRefundDto chargingRefundDto); List chargingOrderGroup(ChargingPercentProvinceDto chargingPercentProvinceDto); List charge(LocalDate sixBefore, List siteIds, Boolean partnerView); List circle(List siteIds,LocalDate sixBefore, Boolean partnerView); Map countAll(List siteIds, Boolean partnerView, LocalDate sixBefore); List payTypeCircle(LocalDate sixBefore, List siteIds, Boolean partnerView); List> getSumByType(LocalDate start,LocalDate end,List siteIds); List> getDateData(LocalDate start,LocalDate end,List siteIds); List> getWeekData(LocalDate start,LocalDate end,List siteIds); List> getMonthData(LocalDate start,LocalDate end,List siteIds); List> getYearData(LocalDate start,LocalDate end,List siteIds); ChargingOrderTimeVO chargingList(ChargingListQuery dto); PageInfo chargingListPage(ChargingListQuery dto); ChargingOrderTimeVO chargingListSummary(ChargingListQuery dto); List export(ChargingListQuery dto); R payRefund(PayOrderRefundDto payOrderQueryDto); R getSpecialRefundOrder(PayOrderRefundDto payOrderQueryDto); R specialRefund(PayOrderRefundDto payOrderQueryDto); BigDecimal getManualRefundableAmount(Long chargingOrderId); ChargingOrderListInfoVO chargingInfo(String uid); /** * 处理充电订单实时监控数据相关的业务逻辑 * @param query */ void chargeMonitoring(UploadRealTimeMonitoringDataQuery query); /** * 自动结束充电后的处理逻辑 * @param code */ void endCharge(String code, Integer endMode); /** * 停止充电返回账单后计算费用 * @param vo */ R endChargeBillingCharge(TransactionRecordMessageVO vo); /** * 异常结束充电处理逻辑 * @param orderCode */ void excelEndCharge(String orderCode); List> getByDate(LocalDate start,LocalDate end, List siteIds); List> queryPower(List siteIds); Map qureryPowerLevel(List siteIds, ChargingStatisticsQueryDto statisticsQueryDto); List> usersDay(ChargingStatisticsQueryDto statisticsQueryDto); List> usersDay1(); List> usersByQuery(ChargingStatisticsQueryDto statisticsQueryDto); List> usersByQuery1(ChargingStatisticsQueryDto statisticsQueryDto); List> getUserTagCount(); List> getVipCount(); List> unitConsumption(ChargingStatisticsQueryDto statisticsQueryDto); List> carUserMethod(); List> carUserBrand(); Map countLocalCar(); Double getAver(List siteIds); List> getLevelEvaluate(List siteIds); /** * 根据车牌号和开始时间查询充电数据 * @param query * @return */ TChargingOrder getChargingOrderByLicensePlate(GetChargingOrderByLicensePlate query); TSettlementConfirm settlementAdd(SettlementConfirmAdd dto); PageInfo settlementList(SettlementListQuery dto); SettlementTotalVO settlementTotal(String time); SettlementTotalVO settlementTotalR(String time,Long userId); List> countBySource(List siteIds,ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentUserType1(List siteIds, ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentUserType2(List siteIds, ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentMapbroke1(List siteIds, ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentMapbroke2(List siteIds, ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentMapOut1(List siteIds, ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentMapOut2(List siteIds, ChargingStatisticsQueryDto statisticsQueryDto); List> needElec(List siteIds, ChargingStatisticsQueryDto statisticsQueryDto); Map getChargingOrderCount(List siteIds, String time); Map getLargeScreenSummary(List siteIds); List getLargeScreenIncomeTrend(List siteIds, LocalDate sixBefore); List getLargeScreenChargingPower(List siteIds, LocalDateTime startTime, LocalDateTime endTime); /** * 大屏累计充电量(与 /large-screen/summary 同口径: 已结束+已支付订单, 读预聚合表 M 行) */ BigDecimal getLargeScreenTotalCapacity(List siteIds); /** * 重建大屏预聚合表(每日全量: 全部月份切片 + 近90天日切片 + 全局注册用户数) */ void rebuildLargeScreenStat(); /** * 刷新大屏预聚合表(每10分钟: 当月切片 + 今日日切片 + 全局注册用户数) */ void refreshLargeScreenStat(); List> getHourType(List siteIds, ChargingDetailQueryDto statisticsQueryDto); List> getDateType(List siteIds, ChargingDetailQueryDto statisticsQueryDto); List> getMonthType(List siteIds, ChargingDetailQueryDto statisticsQueryDto); List> getchargingCapacity(List siteIds, ChargingDetailQueryDto statisticsQueryDto); List> countAllUserData(); List> needElec1(List siteIds, ChargingStatisticsQueryDto statisticsQueryDto); /** * 获取充电结束页面详情 * @param id * @return */ EndOfChargePageInfo getEndOfChargePageInfo(String id); Long countNoTag(); /** * 获取订单数据 * @param order * @return */ List getChargingOrder(TChargingOrderVo order); Long countCar(List brands); /** * 添加三方平台充电订单数据 * @param query */ R addTripartitePlatformOrder(AddTripartitePlatformOrder query); /** * 三方平台停止充电操作 * @param startChargeSeq * @return */ R tripartitePlatformStopCharge(@RequestParam("startChargeSeq") String startChargeSeq); /** * 获取充电后没有扣除费用的数据 * @return */ R getNotPaymentChargingOrder(); /** * * 手动推送订单给第三方平台 * @param code * @return */ R pushOrderInfo(String code); R addChargingOrderSummaryData(); /** * 大屏-新能源汽车电池安全检测次数统计 */ R getStatisticsOfBattery(List siteIds); Double getSumDegreeBySiteIds(List siteIds); /** * 查询指定站点中实际发生过充电的用户ID */ List getAppUserIdsBySiteIds(List siteIds); /** * 获取启动失败且时间超过1小时的订单 * @return */ List findFailedStartupOrder(); /** * 获取停止中的数据 * @return */ List findStoppedOrder(); /** * 获取充电中的数据 * @return */ List findChargingOrder(); /** * 获取已结束的数据 * @return */ List findEndChargingOrder(); /** * 获取需要手动修改订单状态的数据 * @return */ List findUpStatusChargingOrder(); /** * 查询充电算账单数据 * @param startTime * @param endTime * @param dateType */ List> getChargingSettlementBill(String startTime, String endTime, Integer dateType); /** * 查询账户结算账单数据 * @param startTime * @param endTime * @return */ List> getAccountSettlementStatement(String startTime, String endTime); /** * 手动处理退款数据 * @param refund_out_trade_no 退款商户单号 */ void orderQueryRefund(Long orderId, String refund_out_trade_no); /** * 手动添加完善订单费用明细 * @param orderId */ void addOrderExpenseBreakdown(Long orderId); /** * 判断订单是否为白名单企业账户订单(企业优惠与额度结算的统一判定口径): * 白名单订单且已写入账户模式(共享/分配)时为企业账户流程订单,历史权益订单与第三方支付白名单订单返回false。 * * @param chargingOrder 充电订单 * @return true=白名单企业账户订单 */ boolean isWhitelistEnterpriseOrder(TChargingOrder chargingOrder); /** * 结算白名单企业账户订单的锁定额度(按实际消费扣减、差额退回原账户并写消费流水): * 共享模式结算公司余额,分配模式结算白名单账户余额;结算失败返回false,由调用方回滚订单状态等待补偿重试。 * * @param chargingOrder 充电订单(含companyId/accountMode/lockedAmount/whitelistId) * @param actualAmount 实际消费金额 * @return true=结算成功或非企业账户订单 */ boolean settleWhitelistEnterpriseAccount(TChargingOrder chargingOrder, BigDecimal actualAmount); /** * 释放白名单企业账户订单的锁定额度(订单未结算/关单时调用,失败仅记录日志不影响主流程) * * @param chargingOrder 充电订单 * @param scene 调用场景(日志用) */ void unlockWhitelistEnterpriseAmountQuietly(TChargingOrder chargingOrder, String scene); /** * 企业账户订单无任何设备数据/账单时的兜底关单:释放锁定额度并终结订单(金额0、状态5、结算完成标记), * 保证订单不被任何补偿任务重复扫描重跑;非企业账户订单或状态不在(启动中/充电中/停止中)时直接跳过(幂等)。 * * @param chargingOrder 充电订单(含companyId/accountMode/lockedAmount/whitelistId) */ void closeEnterpriseOrderWithoutData(TChargingOrder chargingOrder); }