money-calculator
面向 browser 使用的 npm 包,使用 ts 开发,使用 rollup 构建
用于Gpos业务的算价引擎
在模型完成业务抽象之前,暂不保证适配其他业务
插件
注意:使用 Jest Runner 而非 Jest,Jest Runner 适用于单步调试
开发
@sm/max-dsl 为 peerDependency(optional):yarn install / CI 不会拉取私库;esbuild 构建不依赖它。本地跑 yarn test / Jest 前,在内网环境自行安装,例如:yarn add -D @sm/max-dsl@0.4.1-beta.11(并配置 registry.npm.sunmi.com 等)。
yarn bootstrap
yarn start
构建
yarn build
API
初始化实例
const MoneyCalculator = max.globalFn.MoneyCalculator();
const calculator = new MoneyCalculator({
orderInfo: {...},
activityList: [...],
couponList: [...],
memberLevel: {...},
memberActivityList: [...],
});
const MoneyCalculator = max.util.MoneyCalculator();
const calculator = new MoneyCalculator({
orderInfo: {...},
activityList: [...],
couponList: [...],
memberLevel: {...},
memberActivityList: [...],
});
MoneyCalculator类定义
declare class MoneyCalculator {
static quantity: {
PRECISION: string;
of: (quantity?: number, unit?: string) => QuantityObject;
toViewQuantity: (quantityInfo: QuantityObject) => number;
isQuantity: (quantityInfo: any) => any;
};
static calcItemOriginalPrice(product: any): MoneyObject;
static calcItemOriginalSubtotalAmount(product: any): MoneyObject;
static promotion: {
calcPromotion(order: OrderInfo, activityList: ActivityItem[], couponList: CouponItem[], memberLevel: MemberLevel, memberActivityList: ActivityItem[]): OrderInfo;
};
constructor(options: {
orderInfo: OrderInfo;
activityList?: ActivityItem[];
couponList?: CouponItem[];
memberActivityList?: ActivityItem[];
memberLevel?: MemberLevel;
});
private _analyze;
calcProductOriginalPrice(product: any): MoneyObject;
calcItemOriginalSubtotalAmount(product: any): MoneyObject;
calcItemTransactionSubtotalAmount(transactionPrice: MoneyObject, quantityInfo: QuantityObject): MoneyObject;
calcOriginalTotalAmount(): OrderInfo;
calcTransactionTotalAmount(): MoneyObject;
calcActualAmount(): OrderInfo;
calcTaxAmount(): OrderInfo;
calcPayableAmount(): OrderInfo;
calcAllAmount(): void;
result(): OrderInfo;
}
使用方式
算价实例计算
const MoneyCalculator = max.globalFn.MoneyCalculator();
const calculator = new MoneyCalculator({
orderInfo: {...},
activityList: [...],
couponList: [...],
memberLevel: {...},
memberActivityList: [...],
});
calculator.calcOriginalTotalAmount();
calculator.calcActualAmount();
calculator.calcTaxAmount();
calculator.calcPayableAmount();
const finalOrderInfo = calculator.result();
const MoneyCalculator = max.globalFn.MoneyCalculator();
const calculator = new MoneyCalculator({
orderInfo: {...},
activityList: [...],
couponList: [...],
memberLevel: {...},
memberActivityList: [...],
});
calculator.calcAllAmount();
const finalOrderInfo = calculator.result();
静态方法调用
const MoneyCalculator = max.globalFn.MoneyCalculator();
const quantityObj = MoneyCalculator.quantity.of(1, 'kg');
const price = MoneyCalculator.calcItemOriginalPrice(productObj)
const subtotalAmount = MoneyCalculator.calcItemOriginalSubtotalAmount(productObj)