ticket-service.js 2.42 KB
/**
 * Created by TaoHuang on 2017/6/22.
 */

const TicketApi = require('./ticket-api');
const _ = require('lodash');
const helpers = global.yoho.helpers;
const OrderEnsureHandle = require('./order-ensure-handle');

module.exports = class extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);
    }

    _handleGoodsList(list) {
        return list.map((i) => {
            i.linkToGoods = helpers.getUrlBySkc(i.product_skn);
            i.productPrice = i.sales_price;
            return i;
        });
    }

    _handleAmount(info) {
        return _.get(info, 'data.shopping_cart_data.last_order_amount', 0);
    }

    addTicket(uid, sku, count, yohoCoin, other) {
        return new TicketApi(this.ctx).add(uid, sku, count, yohoCoin, other).then(ticketInfo => {
            let result = {};

            if (_.isEmpty(ticketInfo)) {
                return {
                    last_order_amount: 0,
                    error: '人太多啦,稍后再试!'
                };
            }

            if (ticketInfo.code !== 200) {
                return {
                    last_order_amount: 0,
                    error: ticketInfo.message
                };
            }

            result.virtualGood = true;
            result.goodsList = this._handleGoodsList(_.get(ticketInfo, 'data.goods_list', []));
            result.last_order_amount = this._handleAmount(ticketInfo);

            Object.assign(result, new OrderEnsureHandle(this.ctx).handleUseYohoCoin(
                _.get(ticketInfo, 'data.shopping_cart_data', {}
            )));

            return result;
        });
    }

    submitTicket(uid, sku, count, mobile, yohoCoin, other) {
        return new TicketApi(this.ctx).submit(uid, sku, count, mobile, yohoCoin, other).then(result => {
            if (_.isEmpty(result)) {
                return {
                    code: 500,
                    message: '人太多啦,稍后再试!'
                };
            }

            if (result.code !== 200) {
                return {
                    code: result.code,
                    message: result.message
                };
            }

            return {
                code: 200,
                message: '提交成功',
                data: {
                    refer: helpers.urlFormat('/shopping/newpay', {
                        ordercode: result.data.order_code
                    })
                }
            };
        });
    }
};