package com.ruoyi.account.api.feignClient; import com.ruoyi.account.api.factory.CompanyAllocateRecordFallbackFactory; import com.ruoyi.account.api.vo.CompanyAllocateSummaryVO; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.math.BigDecimal; import java.util.List; /** * 公司额度分配记录服务(VIN码充电结算写入消费流水使用) * * @author mxcd */ @FeignClient(contextId = "CompanyAllocateRecordClient", value = ServiceNameConstants.ACCOUNT_SERVICE, fallbackFactory = CompanyAllocateRecordFallbackFactory.class) public interface CompanyAllocateRecordClient { /** * 写入消费流水(change_type=2,按订单号+类型幂等,已存在返回 true) * * @param companyId 所属公司ID * @param userType 分配对象类型:1=VIN码,2=刷卡,3=白名单手机号 * @param userInfo 分配对象信息(VIN码/卡号/手机号) * @param userName 分配对象名称 * @param beforeBalance 消费前账户余额 * @param amount 本次变更金额(消费传负数) * @param chargingOrderCode 充电订单号(幂等键之一) * @param remark 备注 * @return 是否写入成功(已存在视为成功) */ @PostMapping("/company-allocate-record/inner/record-consume") R recordConsume(@RequestParam("companyId") Integer companyId, @RequestParam("userType") Integer userType, @RequestParam("userInfo") String userInfo, @RequestParam(value = "userName", required = false) String userName, @RequestParam("beforeBalance") BigDecimal beforeBalance, @RequestParam("amount") BigDecimal amount, @RequestParam("chargingOrderCode") String chargingOrderCode, @RequestParam(value = "remark", required = false) String remark); /** * 查询已在账户侧落消费流水(change_type=2)的订单号集合(结算幂等判定、订单侧兜底扫描使用) * * @param orderCodes 待判定的充电订单号 * @return 已存在消费流水的订单号集合(无匹配返回空集合) */ @PostMapping("/company-allocate-record/inner/list-consumed-order-codes") R> listConsumedOrderCodes(@RequestBody List orderCodes); /** * 统计公司名下三类主体(VIN码/刷卡/白名单手机号)可用余额与充电锁定金额合计(只读, * 分配模式切换为共享模式前的校验使用)。 * * @param companyId 所属公司ID */ @PostMapping("/company-allocate-record/inner/sum-allocated-balance") R sumAllocatedBalance(@RequestParam("companyId") Integer companyId); /** * 回收公司名下三类主体全部分配余额至公司账户(分配模式切换为共享模式时调用)。 * 幂等:余额已清零的主体不重复回收、不重复写流水;返回本次实际回收总额。 * * @param companyId 所属公司ID * @param operatorName 操作人账号 * @param companyName 公司名称(企业账户流水 userInfo 使用,可为空) * @param companyBalanceBefore 回退前公司可用余额(企业账户正数流水 beforeBalance 使用) * @return 本次实际回收总额(元,无余额时返回 0) */ @PostMapping("/company-allocate-record/inner/recycle-allocated-balance") R recycleAllocatedBalance(@RequestParam("companyId") Integer companyId, @RequestParam("operatorName") String operatorName, @RequestParam(value = "companyName", required = false) String companyName, @RequestParam("companyBalanceBefore") BigDecimal companyBalanceBefore); }