/** * 结算页 * @author: xuqi<qi.xu@yoho.cn> * @date: 2016/7/13 */ 'use strict'; const _ = require('lodash'); const api = global.yoho.API; const helper = global.yoho.helpers; /** * 结算页面api * @param uid 用户id */ const _orderApi = uid => api.get('', { method: 'app.Shopping.payment', 'cart_type': 'ordinary', // eslint-disable-line 'yoho_coin_mode': 0, // eslint-disable-line uid: uid }); /** * 计算有货币可用数量 * @param uid [int] user id */ const _yohoCoinPayRule = data => { if (!data.yoho_coin_pay_rule) { return data; } data.yoho_coin_num = _.round(data.yoho_coin * 100); data.yoho_coin = data.yoho_coin.toFixed(2); data.yoho_msg = ''; if (data.total_yoho_coin_num < 100) { data.yoho_msg = `抱歉,您的有货币不足,有货币满${data.yoho_coin_pay_rule.num_limit}个方可使用`; } else if (data.yoho_coin_num <= 0) { data.yoho_msg = '抱歉,您的订单实付款不满足有货币使用条件'; } return data; }; /** * 结算页面 * @param uid [int] user id */ const index = uid => { return _orderApi(uid).then(data => { if (data.code === 200) { // do data package let theData = data.data; let goods = theData.goods_list; let shopping = theData.shopping_cart_data; let packageList = shopping.package_list; _.forEach(goods, theGoods => { // format goods link theGoods.link = helper.urlFormat( `/product/pro_${theGoods.product_id}_${theGoods.goods_id}/${theGoods.cn_alphabet}.html`); // format brand url theGoods.brandUrl = helper.urlFormat(`/product/shop/${theGoods.brand_domain}`); // 处理商品是否是赠品 if (theGoods.goods_type === 'gift') { theGoods.isGift = true; } }); // 计算有货币使用 Object.assign(theData, _yohoCoinPayRule(theData)); shopping.balanceCoin = theData.use_yoho_coin; // 拆单后的邮费优惠计算 if (packageList) { let shippingOrigin = 0; let shippingCut = 0; _.forEach(packageList, i => { shippingOrigin += (i.shopping_orig_cost >>> 0); shippingCut += (i.shopping_cut_cost >>> 0); }); // 对运费的数据进行扩展 shippingCut === 0 || Object.assign( _.filter(shopping.promotion_formula_list, i => i.promotion === '运费'), { shippingCut: shippingCut, shippingOrigin: shippingOrigin } ); } return data; } return data; }); }; /** * 结算api调用 * @param number uid user id * @param number $deliveryWay 配送方式,1表示普通快递,2表示顺丰速运 * @param int $paymentType 支付方式,1表示在线支付,2表示货到付款 * @param number $yohoCoin 使用的有货币数量 * */ const _computeApi = (uid, deliveryWay, paymentType, yohoCoin) => api.get('', { method: 'app.Shopping.compute', uid: uid, delivery_way: deliveryWay, payment_type: paymentType, use_yoho_coin: yohoCoin }); /** * 结算 * @param uid [int] user id * @param yohoCoin [int] 使用的有货币 */ const compute = (uid, yohoCoin) => { // 目前仅支持普通快递和在线支付 let deliveryWay = 1; let paymentType = 1; let coin; // 有货币稀释 if (yohoCoin) { coin = yohoCoin / 100; } return _computeApi(uid, deliveryWay, paymentType, coin).then(result => { if (result.code === 200) { Object.assign(result.data, _yohoCoinPayRule(result.data)); } return result; }); }; /** * 提交订单api调用 * @param number uid user id * @param number address_id 地址id * @param number use_yoho_coin 使用的有货币(元) * @param string invoices_title 发票抬头 * @param int invoices_type_id 发票内容 * @param string remark 备注 * @param boolean isPrintPrice 是否打印价格 * @param number delivery_time 送货时间 * @param number delivery_way 送货方式(1-普通,2-顺丰) * @param number payment_id 支付id * @param number payment_type 支付类型 */ const _submit = (uid, other) => { let apiParms = { method: 'app.Shopping.submit', uid: uid, address_id: other.address_id, use_yoho_coin: other.use_yoho_coin, remark: other.remark, is_print_price: other.isPrintPrice, delivery_time: other.delivery_time, delivery_way: other.delivery_way, payment_id: other.payment_id, payment_type: other.payment_type }; if (other.invoices_type && parseInt(other.invoices_type, 10) === 2) { Object.assign(apiParms, { receiverMobile: other.invoices_mobile }); } if (other.invoices_title) { Object.assign(apiParms, { invoices_type: other.invoices_type, invoices_title: other.invoices_title, invoice_content: other.invoice_content }); } return api.get('', apiParms); }; /** * 订单提交 * @param uid [int] userid * @param other [object] contains some param */ const submit = (uid, other) => { let theOther = {}; Object.assign(theOther, other, { delivery_time: 2, // 平时和周末都送货 delivery_way: 1, // blk统一为普通垮堤 payment_id: 1, // 支付宝 payment_type: 1, // 在线支付 use_yoho_coin: other.use_yoho_coin / 100 // 有货币稀释 }); return _submit(uid, theOther).then(result => result); }; /** * 查询订单信息接口 * @param uid * @param code * @returns {*} */ const orderDetail = (uid, code) => { return api.get('', { method: 'app.SpaceOrders.detail', uid: uid, order_code: code }, {code: 200}); }; /** * 更新订单支付方式 * @param code * @param payment * @param uid * @returns {*} */ const updateOrderPayment = (code, payment, uid) => { return api.get('', { method: 'app.SpaceOrders.updateOrdersPaymentByCode', order_code: code, payment: payment, uid: uid }); }; module.exports = { index, compute, submit, orderDetail, updateOrderPayment };