package com.ruoyi.other.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.other.api.domain.TGroupCompany;
import java.math.BigDecimal;
/**
*
* 公司(企业)管理 服务类
*
*
* @author mxcd
* @since 2026-09-22
*/
public interface TGroupCompanyService extends IService {
/**
* 公司详情(企业概况附带车队数量、本月充值金额统计)
*
* @param id 公司ID
* @return 公司详情;公司不存在时返回 null
*/
TGroupCompany getDetail(Integer id);
/**
* 公司详情并聚合充电用户信息(VIN码/刷卡/白名单三类合并列表)。
* 仅供管理后台公司详情接口使用;远程 remoteGet 保持 getDetail 不聚合,避免跨服务循环调用。
*
* @param id 公司ID
* @return 公司详情(含充电用户信息列表)
*/
TGroupCompany getDetailWithChargingUsers(Integer id);
/**
* 添加公司并同步创建登录账号(sys_user,roleType=5)
*
* @param company 公司(含账号、密码)
* @return 操作结果
*/
AjaxResult addCompany(TGroupCompany company);
/**
* 编辑公司并同步登录账号资料(不修改密码)
*
* @param company 公司
* @return 操作结果
*/
AjaxResult editCompany(TGroupCompany company);
/**
* 删除公司并停用其登录账号(delFlag=2)
*
* @param id 公司ID
* @return 操作结果
*/
AjaxResult delCompany(Integer id);
/**
* 修改公司账户模式(公司管理-账户模式弹窗使用)
*
* @param id 公司ID
* @param accountMode 账户模式(1=共享模式,2=分配模式)
* @return 操作结果
*/
AjaxResult updateAccountMode(Integer id, Integer accountMode);
/**
* 结算公司余额(解锁锁定额并按实际消费扣减,允许扣成负数)
* 订单号非空时按订单号幂等:公司余额变更与账户侧消费流水配套写入,
* 结算失败回退订单状态后的补偿重试不会重复结算。
*
* @param companyId 公司ID
* @param lockedAmount 申请时锁定额(用于释放)
* @param actualAmount 实际消费金额
* @param orderCode 充电订单号(幂等键,可为空)
* @param userInfo 分配对象(共享模式为企业名称)
* @param userName 分配对象名称
* @param remark 备注
* @return 结算后可用余额
*/
BigDecimal settleBalance(Integer companyId, BigDecimal lockedAmount, BigDecimal actualAmount, String orderCode,
String userInfo, String userName, String remark);
}