buy-now-model.js 7.51 KB
/*
 * @Author: Targaryen
 * @Date: 2017-06-21 10:15:45
 * @Last Modified by: Targaryen
 */

class BuyNowModel extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);
    }

    /**
     * 获取用户可用的优惠券张数
     * @param {*} params
     */
    countUsableCoupon(params) {
        return this.post({
            data: {
                method: 'app.Buynow.countUsableCoupon',
                uid: params.uid,
                product_sku: params.product_sku,
                sku_type: params.sku_type || 'I',
                buy_number: params.buy_number
            },
            param: {
                cache: false
            }
        });
    }

    /**
     * 获取用户可用和不可用优惠券列表
     * @param {*} params
     */
    listCoupon(params) {
        return this.post({
            data: {
                method: 'app.Buynow.selectCoupon',
                uid: params.uid,
                delivery_way: params.delivery_way,
                coupon_code: params.coupon_code,
                product_sku: params.product_sku,
                buy_number: params.buy_number,
                sku_type: params.sku_type || 'I',
            }
        });
    }

    /**
     * 结算页面数据渲染
     * @param {*} params
     */
    payment(params) {
        let finalParams = {
            data: {
                method: 'app.Buynow.enhancedPayment',
                uid: params.uid,
                product_sku: params.product_sku,
                sku_type: params.sku_type || 'I',
                buy_number: params.buy_number,
                yoho_coin_mode: params.yoho_coin_mode || 0, // 是否使用有货币
                yoho_bill_term: 0, // H5 不支持分期
                is_support_apple_pay: 'N', // H5 不支持 APPLE PAY
                activity_id: params.activity_id || 0,
                enable_red_envelopes: 0 // H5 不支持使用红包
            },
            param: {
                cache: false
            }
        };

        return this.post(finalParams);
    }

    /**
     * 数据改变,重新计算结算数据
     * @param {*} params
     */
    compute(params) {
        let finalParams = {
            method: 'app.Buynow.compute',
            uid: params.uid,
            product_sku: params.product_sku,
            sku_type: params.sku_type || 'I',
            buy_number: params.buy_number,
            payment_type: params.payment_type || 1,
            delivery_way: params.delivery_way || 1,
            use_red_envelopes: 0,
            yoho_bill_term: 0,
            activity_id: params.activity_id || 0
        };

        // 有货币
        if (params.use_yoho_coin) {
            finalParams.use_yoho_coin = params.use_yoho_coin;
        }

        // 优惠券
        if (params.coupon_code) {
            finalParams.coupon_code = params.coupon_code;
        }

        // 优惠码
        if (params.promotion_code) {
            finalParams.promotion_code = params.promotion_code;
        }

        // 礼品卡
        if (params.gift_card_code) {
            finalParams.gift_card_code = params.gift_card_code;
        }

        if (params.coupon_code) {
            finalParams.coupon_code = params.coupon_code;
        }

        return this.post({
            data: finalParams,
            param: {
                cache: false
            }
        });
    }

    /**
     * 提交订单
     * @param {*} params
     */
    submit(params) {
        if (!params.address_id) {
            return Promise.resolve({ code: 401, message: '配送地址不能为空' });
        }

        if (!params.delivery_time) {
            return Promise.resolve({ code: 402, message: '请选择配送时间' });
        }

        if (!params.delivery_way) {
            return Promise.resolve({ code: 403, message: '请选择配送方式' });
        }

        let finalParams = {
            method: 'app.Buynow.submit',
            uid: params.uid,
            udid: params.udid,
            product_sku: params.product_sku,
            sku_type: params.sku_type || 'I',
            buy_number: params.buy_number,
            yoho_bill_term: 0,
            address_id: params.address_id,
            delivery_time: params.delivery_time,
            delivery_way: params.delivery_way,
            use_red_envelopes: 0,
            payment_id: params.payment_id,
            payment_type: params.payment_type || 1,
            activity_id: params.activity_id || 0,
            is_print_price: params.is_print_price || 'N'
        };

        // 发票类型:纸质 1,电子 2
        if (params.invoices_type) {
            finalParams.invoices_type = params.invoices_type;
        }

        // 发票类型:个人 1, 企业 2
        if (params.invoice_payable_type) {
            finalParams.invoice_payable_type = params.invoice_payable_type;
        }

        // 发票抬头
        if (params.invoices_title) {
            finalParams.invoices_title = params.invoices_title;
        }

        // 发票种类写死明细
        if (params.invoice) {
            finalParams.invoice_content = 12;
        }

        // 收票人手机号码
        if (params.receiverMobile) {
            finalParams.receiverMobile = params.receiverMobile;
        }

        // 购买方纳税人识别号,需要开具电子发票且发票抬头为单位信息时为必填项
        if (params.buyerTaxNumber) {
            finalParams.buyerTaxNumber = params.buyerTaxNumber;
        }

        // 留言
        if (params.remark) {
            finalParams.remark = params.remark;
        }

        // 有货币
        if (params.use_yoho_coin) {
            finalParams.use_yoho_coin = params.use_yoho_coin;
        }

        // 优惠券
        if (params.coupon_code) {
            finalParams.coupon_code = params.coupon_code;
        }

        // 优惠码
        if (params.promotion_code) {
            finalParams.promotion_code = params.promotion_code;
        }

        // 礼品卡
        if (params.gift_card_code) {
            finalParams.gift_card_code = params.gift_card_code;
        }

        if (params.qhy_union) {
            finalParams.qhy_union = params.qhy_union;
        }

        return this.post({
            data: finalParams,
            param: {
                headers: {
                    'X-Forwarded-For': params.ip || '',
                    'User-Agent': params.userAgent
                }
            }
        });
    }

    /**
     * 使用优惠券
     * @param {*} params
     */
    useCoupon(params) {
        let finalParams = {
            method: 'app.Buynow.useCoupon',
            uid: params.uid,
            product_sku: params.product_sku,
            sku_type: params.sku_type || 'I',
            buy_number: params.buy_number,
        };

        if (params.coupon_code) {
            finalParams.coupon_code = params.coupon_code;
        }
        return this.post({
            data: finalParams,
            param: {cache: false}
        });
    }

    /**
     * 使用优惠码
     * @param {*} params
     */
    usePromotionCode(params) {
        let finalParams = {
            method: 'app.Buynow.usePromotionCode',
            uid: params.uid,
            product_sku: params.product_sku,
            sku_type: params.sku_type || 'I',
            buy_number: params.buy_number
        };

        if (params.promotion_code) {
            finalParams.promotion_code = params.promotion_code;
        }

        return this.post({
            data: finalParams,
            param: {
                cache: false
            }
        });
    }
}

module.exports = BuyNowModel;