@pisell/pisellos
Version:
一个可扩展的前端模块化SDK框架,支持插件系统
197 lines (196 loc) • 6.75 kB
TypeScript
import { Module, PisellCore, ModuleOptions } from '../../types';
import { RequestPlugin, WindowPlugin } from '../../plugins';
import { BaseModule } from '../BaseModule';
import { PaymentModuleAPI, PaymentMethod, PaymentOrder, PaymentItem, PaymentItemInput, PaymentUpdateFields, PushOrderParams, CashPayment, EftposPayment, WalletPassPayment, RoundingRule, RoundingInterval, RoundingResult } from './types';
export * from './types';
export { generateRequestUniqueId };
/**
* 生成请求唯一ID
* 格式: 年月日时分秒毫秒+4位随机数
* 示例: 20241201143025123456
*/
declare function generateRequestUniqueId(): string;
/**
* 支付模块实现
*
* 负责处理支付相关的数据管理和本地存储
*/
export declare class PaymentModule extends BaseModule implements Module, PaymentModuleAPI {
protected defaultName: string;
protected defaultVersion: string;
request: RequestPlugin;
private app;
private store;
window: WindowPlugin;
private dbManager;
private logger;
private voucherUpdateLockByOrderUuid;
protected otherParams: any;
cash: CashPayment;
eftpos: EftposPayment;
wallet: WalletPassPayment;
constructor(name?: string, version?: string);
private runVoucherUpdateLocked;
private normalizeVoucherPaymentItems;
initialize(core: PisellCore, options: ModuleOptions): Promise<void>;
/**
* 记录信息日志
*/
logInfo(title: string, metadata?: any): void;
/**
* 记录警告日志
*/
logWarning(title: string, metadata?: any): void;
/**
* 记录错误日志
*/
logError(title: string, error?: any, metadata?: any): void;
/**
* 记录调试日志
*/
logDebug(title: string, metadata?: any): void;
/**
* 网络恢复以后,尝试执行队列
*
*/
private registerNetworkHandlers;
private filterPayMethods;
/**
* 获取支付方式列表
*/
getPayMethodListAsync(): Promise<PaymentMethod[]>;
/**
* 后台刷新支付方式列表
*/
private refreshPaymentMethodsInBackground;
/**
* 检查支付方式列表是否有变化
*/
private hasPaymentMethodsChanged;
/**
* 获取订单列表
*/
getOrderListAsync(): Promise<PaymentOrder[]>;
/**
* 根据订单UUID获取支付订单(新方法)
*/
getPaymentOrderByUuidAsync(orderUuid: string): Promise<PaymentOrder | null>;
/**
* 创建支付订单(新方法,专注支付数据)
*/
createPaymentOrderAsync(params: PushOrderParams): Promise<PaymentOrder>;
/**
* 删除支付订单(新方法)
*/
deletePaymentOrderAsync(orderUuid: string): Promise<void>;
/**
* 更新订单
*/
updateOrderAsync(orderUuid: string, params: Partial<PaymentOrder>): Promise<void>;
/**
* 基于UUID替换订单ID
*
* 此方法用于将本地虚拟订单ID替换为真实的订单ID。
* 当前端模拟下单流程完成后,后端返回真实订单ID时调用此方法。
*
* @param orderUuid 订单的UUID
* @param newOrderId 新的订单ID (来自后端)
* @returns 更新后的订单对象,如果订单不存在则返回null
*/
replaceOrderIdByUuidAsync(orderUuid: string, newOrderId: string): Promise<PaymentOrder | null>;
/**
* 获取支付项(新方法)
*
* @param orderUuid 订单UUID
* @param includeVoided 是否包含已撤销的支付项,默认为false
* @returns 支付项数组
*/
getPaymentItemsAsync(orderUuid: string, includeVoided?: boolean): Promise<PaymentItem[]>;
/**
* 获取所有支付项(包括已撤销的)
*
* @param orderUuid 订单UUID
* @returns 所有支付项数组(包括撤销的)
*/
getAllPaymentItemsAsync(orderUuid: string): Promise<PaymentItem[]>;
/**
* 为某个订单添加支付项(新方法)
*/
addPaymentItemAsync(orderUuid: string, paymentItem: PaymentItemInput): Promise<void>;
/**
* 删除一个支付项 - 标记删除而非物理删除
*/
deletePaymentAsync(orderUuid: string, paymentUuid: string): Promise<void>;
/**
* 批量更新代金券类支付项(覆盖更新)
*
* 删除所有现有的带 voucher_id 的支付项,然后添加新的代金券支付项
* 这是一个覆盖式更新,确保代金券支付项的一致性
*/
updateVoucherPaymentItemsAsync(orderUuid: string, voucherPaymentItems: PaymentItemInput[]): Promise<void>;
/**
* 更新一个支付项
*/
updatePaymentAsync(orderUuid: string, paymentUuid: string, params: PaymentUpdateFields): Promise<void>;
/**
* 提交支付
*/
submitPayAsync(orderUuid?: string): Promise<{
status: 'success' | 'failed';
}>;
/**
* 提交单个订单的支付(推送到任务队列)
*/
private submitSingleOrderPayment;
/**
* 获取订单剩余待付金额
*/
getRemainingOrderAmountAsync(orderUuid: string): Promise<number>;
/**
* 在比如现金支付界面的地方,用户输入了一个金额,在下方显示剩余多少金额,通过此方法获取
*/
getRemainingOrderAmountWithInputAsync(inputAmount: string | number, orderUuid: string): Promise<number>;
/**
* 重新计算订单金额
*/
private recalculateOrderAmount;
/**
* 获取现金支付方式
*/
getCashPaymentMethod(): Promise<PaymentMethod | null>;
/**
* 获取Eftpos支付方式
*/
getEftposPaymentMethod(): Promise<PaymentMethod | null>;
/**
* 获取钱包支付方式
*/
getWalletPaymentMethod(): Promise<PaymentMethod | null>;
/**
* 确保支付模块所需的数据库表已创建
*/
private ensurePaymentTables;
/**
* 获取部分支付的订单
*/
getPartiallyPaidOrdersAsync(): Promise<PaymentOrder[]>;
/**
* 智能金额舍入
*
* 根据指定的舍入间隔和规则对金额进行舍入处理
*
* @param originalAmount 原始金额
* @param interval 舍入间隔 (0.05, 0.1, 0.5, 1)
* @param rule 舍入规则 (standard, standard_down, always_up, always_down)
* @returns 舍入结果详情(包含原始金额、舍入后金额和舍入差额)
*/
roundAmountAsync(originalAmount: number | string, interval: RoundingInterval | number, rule: RoundingRule | string): Promise<RoundingResult>;
/**
* 标准舍入处理(处理中点情况)
*
* @param value 要舍入的值
* @param midpointUp 中点是否向上舍入
* @returns 舍入后的值
*/
private standardRound;
}