/** * 立即购买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 };