order-ensure-handle.js 3.29 KB
/**
 * 订单确认数据处理
 * @author: yyq<yanqing.yang@yoho.cn>
 * @date: 2016/11/28
 */
'use strict';

const _ = require('lodash');

const helper = global.yoho.helpers;
const crypto = global.yoho.crypto;

const handleViewPrice = list => {
    if (list) {
        _.forEach(list, val => {
            if (val.promotion === '商品金额') {
                val.promotion = '商品总价';
                val.promotion_amount = `+ ${val.promotion_amount}`;
            } else {
                val.promotion_amount = _.replace(val.promotion_amount, '+', '+ ');
                val.promotion_amount = _.replace(val.promotion_amount, '-', '- ');
            }
        });
    }
};

const handleUseYohoCoin = (info) => {
    let resData = {};
    let limitCoin = _.get(info, 'yoho_coin_pay_rule.num_limit', 0);

    if (info) {
        Object.assign(resData, {
            yoho_coin: info.yoho_coin.toFixed(2),
            use_yoho_coin: info.use_yoho_coin,
            total_yoho_coin_num: info.total_yoho_coin_num,
            yoho_coin_pay_rule: info.yoho_coin_pay_rule,
            canUseCoinNum: _.round(info.yoho_coin * 100),
            usedCoinNum: _.round(info.use_yoho_coin * 100)
        });

        if (!resData.canUseCoinNum) {
            let coinErrorTip = '';

            if (info.total_yoho_coin_num > limitCoin) {
                coinErrorTip = '抱歉,您的订单实付款不满足有货币使用条件';
            } else {
                coinErrorTip = `抱歉,您的有货币不足,有货币满${limitCoin}个方可使用`;
            }

            resData.coinErrorTip = coinErrorTip;
        }
    }

    return resData;
};

const handlePaymentInfo = (d, address) => {
    let resData = {};

    _.forEach(address, dd => {
        if (dd.is_default === 'Y') {
            dd.default = true;
        }

        // 地址加密
        let id = dd.address_id;

        dd.id = crypto.encryption('', `${id}`);

        // 删除uid,用户数据保密
        _.unset(dd, 'address_id');
        _.unset(dd, 'uid');
    });

    resData.deliveryAddress = address;

    d.shopping_cart_data.hasCoin = _.round(d.yoho_coin * 100); // 有货币稀释

    let pskn = [], psku = [];
    let pnum = 0;

    _.forEach(d.goods_list, g => {
        // link to goods
        g.linkToGoods = helper.urlFormat(`/product/pro_${g.product_id}_${g.goods_id}/${g.cn_alphabet}.html`,
            '', 'item');

        // yas 统计数据
        pskn.push(g.product_skn);
        psku.push(g.product_sku);
        pnum += g.buy_number * 1;
    });
    resData.goodsList = d.goods_list;

    if (d.shopping_cart_data && d.shopping_cart_data.promotion_formula_list) {
        handleViewPrice(d.shopping_cart_data.promotion_formula_list);
    }

    Object.assign(resData, {
        paymentWay: d.payment_way,
        deliveryTime: d.delivery_time,
        deliveryWay: d.delivery_way,
        shoppingCartData: Object.assign(d.shopping_cart_data, handleUseYohoCoin(d), {
            redEnvelopes: d.red_envelopes,
            useRedEnvelopes: d.use_red_envelopes
        }),
        invoices: d.invoices,
        countData: {
            pnum: pnum,
            pskn: pskn.join(','),
            psku: psku.join(',')
        }
    });

    return resData;
};


module.exports = {
    handleViewPrice,
    handleUseYohoCoin,
    handlePaymentInfo
};