ticketsConfirm.js 3.96 KB
'use strict';
const _ = require('lodash');
const co = Promise.coroutine;
const helpers = global.yoho.helpers;
const headerModel = require('../../../doraemon/models/header'); // 头部model
const ticketsConfirmModel = require('../models/ticketsConfirm');
const shoppingModel = require('../models/shopping');
const orderModel = require('../models/order');
const paymentProcess = require(global.utils + '/payment-process');

// cookie 参数
const actCkOpthn = {
    path: '/cart/index'
};

const ticketsConfirm = (req, res, next) => {
    let headerData = headerModel.setNav({
        navTitle: '确认订单',
        navBtn: false
    });

    let responseData = {
        pageHeader: headerData,
        module: 'cart',
        page: 'tickets-confirm',
        title: '确认订单',
        localCss: true,
        navBtn: false,
        width750: true
    };

    let orderInfo;

    try {
        orderInfo = JSON.parse(req.cookies['order-info']);
    } catch (e) {
        orderInfo = {};
        res.cookie('order-info', null, actCkOpthn);
    }

    let params = {
        uid: req.user.uid,
        productSku: req.query.productSku,
        buyNumber: req.query.buyNumber,
        useYohoCoin: orderInfo ? orderInfo.yohoCoin : 0,
        gift_card_code: orderInfo.gift_card_code || null,
        yohoCoinMode: true
    };

    co(function* () {
        let [result, validGiftCardCountData] = yield Promise.all([
            req.ctx(ticketsConfirmModel).ticketsConfirm(params),
            req.ctx(shoppingModel).countUsableGiftCard(req.user.uid) // 可用礼品卡数量
        ]);
        let validGiftCardCount = _.get(validGiftCardCountData, 'data.count', 0);

        res.render('ticketsConfirm', _.assign(responseData, result, {
            choseGiftCard: helpers.urlFormat('/cart/index/new/selectGiftcard'),
            giftCards: paymentProcess.handleGiftCards({
                validGiftCardCount: validGiftCardCount,
                orderCompute: result.orderCompute
            })
        }));
    })().catch(next);
};

const submitTicket = (req, res, next) => {
    let uid = req.user.uid;
    let udid = req.cookies.udid || 'yoho';
    let gift_card_code = req.body.gift_card_code;
    let verifyCode = req.body.verifyCode;
    let params = {
        uid: uid,
        udid: udid,
        productSku: req.body.productSku,
        buyNumber: req.body.buyNumber,
        mobile: req.body.mobile,
        useYohoCoin: req.body.useYohoCoin
    };

    if (gift_card_code) {
        _.assign(params, {
            gift_card_code: gift_card_code
        });
    }

    co(function* () {
        // 使用礼品卡,发送验证码
        if (gift_card_code) {
            if (!verifyCode) {
                yield req.ctx(orderModel).giftCardSendSms(uid);

                return res.json({
                    code: 411
                });
            } else {
                let verifyResult = yield req.ctx(orderModel).validRegCode({
                    uid, verifyCode, udid
                });

                if (verifyResult.code !== 200) {
                    return res.json(verifyResult);
                }
            }
        }

        let result = yield req.ctx(ticketsConfirmModel).submitTicket(params);

        if (result === {}) {
            result.message = '人太多啦,稍后再试!';
        }

        // 提交成功清除Cookie
        res.cookie('order-info', null, actCkOpthn);
        res.json(result);
    })().catch(next);
};

const checkTickets = (req, res) => {
    let params = {
        uid: req.user.uid,
        productSku: req.body.productSku,
        buyNumber: req.body.buyNumber,
        useYohoCoin: req.body.useYohoCoin
    };

    // 未登录
    if (!req.user.uid) {
        return res.json({
            code: 401,
            redirect: '/signin.html'
        });
    } else {
        req.ctx(ticketsConfirmModel).checkTickets(params).then(result => {
            res.json(result);
        });
    }
};

module.exports = {
    ticketsConfirm,
    submitTicket,
    checkTickets
};