order.js 2.88 KB
/**
 * 订单 controller
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2016/07/04
 */

'use strict';

const orderModel = require('../models/order');

const _ = require('lodash');

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

// 结算页面
const index = (req, res, next) => {
    orderModel.index(req.user.uid).then(result => {
        let data = result.data;

        if (data.goods_list && data.goods_list.length > 0) {
            // 设置头部路径索引focus
            data.bcNavFocus = 2;

            data.delivery_way = _.concat(_.find(data.delivery_way, {delivery_way_id: 1}));

            // 发票抬头
            data.invoices.invoiceTitle = [
                {
                    name: '个人',
                    value: 1,
                    myClass: 'personal'
                },
                {
                    name: '单位',
                    value: 2
                }
            ];

            // 返回购物车链接
            data.goCartLink = helper.urlFormat('/shopping/cart');

            // 拆单是否显示左右切换
            _.forEach(data.shopping_cart_data.package_list, i => {
                if (i.goods_list.length > 4) {
                    i.showToggle = true;
                }
            });

            // 是否打印价格radio
            data.printPriceRadio = [
                {
                    value: '1',
                    name: '是'
                },
                {
                    value: '0',
                    name: '否',
                    checked: true
                }
            ];

            res.header('Cache-Control', 'no-store');

            res.display('order', {
                content: data,
                defaultHeader: false
            });
        } else {
            res.redirect('/shopping/cart');
        }

    }).catch(next);
};

// 订单金额计算
const compute = (req, res, next) => {
    orderModel.compute(req.user.uid, req.query.coin).then(result => {
        res.send(result);
    }).catch(next);
};

// 订单提交
const orderSub = (req, res, next) => {
    var other = req.body;

    // 参数校验
    if (!other.address_id) {
        res.send({
            code: 500,
            message: '配送地址不能为空'
        });
        return;
    } else {
        logger.info(`order submit, address_id decrypt. address_id = ${other.address_id}`);
        other.address_id = crypto.decrypt(config.crypto.common, other.address_id);
    }

    orderModel.submit(req.user.uid, other).then(result => {

        // 拼接地址
        if (result.code === 200) {
            result.data.payUrl = helper.urlFormat('/shopping/pay/online', {
                code: result.data.order_code
            });
        }
        res.send(result);
    }).catch(next);
};

module.exports = {
    index,
    compute,
    orderSub
};