easypay.js 3.45 KB
/**
 * 立即购买controller
 * @author: yyq<yanqing.yang@yoho.cn>
 * @date: 2016/9/23
 */
'use strict';

const _ = require('lodash');

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

const easypayApi = require('./easypay-api');
const addressApi = require('./address-api');
const ensureApi = require('./order-ensure-api');

const ensureHandle = require('./order-ensure-handle');

const _getLimitProductData = (params) => {
    let resList = [];

    if (params.limitcode && params.sku && params.skn) {
        resList.push({
            type: 'limitcode',
            buy_number: 1,
            sku: params.sku,
            skn: params.skn,
            limitproductcode: params.limitcode
        });
    } else if (params.bundle && params.sku) {
        resList = [];

        _.forEach(_.split(params.sku, ',', 10), val => {
            resList.push({
                type: 'bundle',
                sku: parseInt(val, 10),
                buy_number: 1
            });
        });
    }

    return resList.length ? JSON.stringify(resList) : false;
};

// 获取结算信息
const getEasypayOrderData = (params, uid) => {
    let resData = {};
    let strInfo = _getLimitProductData(params);
    let bundle = params.bundle ? parseInt(params.bundle, 10) : false;

    return Promise.all([
        easypayApi.getEasyPaymentAsync(uid, strInfo, bundle),
        addressApi.getAddressListAsync(uid),
        ensureApi.getUserProfileAsync(uid)
    ]).then(result => {
        let data = _.get(result, '[0].data', false);
        let address = _.get(result, '[1].data', []);
        let receiver = _.get(result, '[2].data.mobile', '');

        if (data) {
            Object.assign(resData, ensureHandle.handlePaymentInfo(data, address), {
                receiverMobile: receiver,
                hideReceiverMobile: _.replace(receiver, /(\d{3})\d{4}(\d{4,9})/, '$1****$2')
            });
        }

        return resData;
    });
};

// 价格计算
const getOrderComputeData = (uid, cartType, params) => {
    params.productSkuList = _getLimitProductData(params);

    return easypayApi.getEasypayComputeAsync(uid, cartType, params.paymentType, params.deliveryWay, params).then(result => { // eslint-disable-line
        if (result.code === 200) {
            if (_.has(result, 'data.last_order_amount')) {
                result.data.last_order_amount = (result.data.last_order_amount).toFixed(2);
            }

            if (_.has(result, 'data.promotion_formula_list')) {
                ensureHandle.handleViewPrice(result.data.promotion_formula_list);
            }

            result.data = Object.assign(result.data, ensureHandle.handleUseYohoCoin(result.data));
        }
        return result;
    });
};

// 订单提交
const easypayOrderSubmit = (uid, cartType, params, remoteIp) => {
    params.addressId = crypto.decrypt('', params.addressId);
    params.productSkuList = _getLimitProductData(params);

    return easypayApi.easypayOrderSubmitAsync(uid, cartType, params.addressId, params.deliveryTime,
        params.deliveryWay, params.paymentType, params.paymentId, params.printPrice, params, remoteIp).then(result => {
            if (result.code === 200) {
                let d = result.data;

                d.url = helper.urlFormat('/shopping/newpay', {
                    ordercode: d.order_code
                });
            }
            return result;
        }
    );
};

module.exports = {
    getEasypayOrderData,
    getOrderComputeData,
    easypayOrderSubmit
};