BuySaleController.class.php 5.47 KB
<?php
/**
 * 购买业绩比拼接口
 * Created by PhpStorm.
 * User: yingcai
 * Date: 2018/2/28
 * Time: 上午10:42
 */

namespace Apicp\Controller\SaleOrder;

use Common\Common\Order;

class BuySaleController extends \Apicp\Controller\AbstractController
{
    // 企业是否有待支付的订单(1:有,2:无)
    const WAIT_PAY_ORDER_TRUE = 1;
    const WAIT_PAY_ORDER_FALSE = 2;

    // 订单类型:购买/续费业绩比拼
    const ORDER_TYPE_PRODUCT_SALE = 1;
    // 订单类型:扩充业绩比拼人数
    const ORDER_TYPE_PRODUCT_SALE_PEOPLE = 2;

    // 订单状态 (待支付)
    const ORDER_STATUS_WAIT_PAY = 1;

    /**
     * BuySale
     * @author houyingcai
     * @desc 购买业绩比拼接口
     * @param Int buy_type:false:1 购买的类型(购买类型(1=扩充人数,2=续费))
     * @return array|bool 购买规则
                array(
                    'is_wait_pay' => 1, // 企业是否有待支付订单(1=是,2=否)
                    'product_id' => '008474BE7F00000175505861C25D23D2', // 产品类型
                    'product_name' => '业绩比拼', // 购买产品名称
                    'current_people' => 100, // 当前应用授权使用人数
                    'buy_people_range' => '1000人及以下', // 已购买的人数范围(仅扩充使用人数和续费时存在)
                    'end_time' => 1517572194899, // 已购买的人数范围截止时间(仅扩充使用人数和续费时存在)
                    'surplus_days' => 15, // 剩余天数(仅扩充使用人数和续费时存在)
                    'buy_rule' => array(
                        rule => array(
                            'level' => 1,
                            'num' => '1000人及以下', // 人数范围
                            'price' => 1000, // 价格(单位:分)
                        ),
                        'unit' => '年', // 单位
                    ),
                )
     */
    public function Index_post()
    {
        // 购买的产品类型
        $buy_type = I('post.buy_type', 0, 'rintval');

        $orderServ = &Order::instance();

        // 获取当前应用授权使用人数
        $allow_users = $orderServ->GetAllowUserTotal(['plIdentifier' => 'performancerankings']);
        // 没有安装业绩比拼
        if (empty($allow_users)) {

            E('_ERR_NOT_INSTALL_SALE');
        }

        // 初始化待支付
        $is_wait_pay = self::WAIT_PAY_ORDER_TRUE;

        // 待支付的订单类型
        $ord_type = $buy_type == self::ORDER_TYPE_PRODUCT_SALE_PEOPLE ? self::ORDER_TYPE_PRODUCT_SALE_PEOPLE : self::ORDER_TYPE_PRODUCT_SALE ;

        // 获取是否有待支付的订单
        $result = $orderServ->fetchOrderList([
            'ordPayStatus' => self::ORDER_STATUS_WAIT_PAY,
            'ordType' => $ord_type,
        ]);

        // 获取业绩比拼有效的订单(注:数组第一个元素是当前使用的人数范围,之后的元素都是续费但未生效的人数范围)
        $valid_order = $orderServ->FetchAllSaleValidOrder();

        // 初始化已购买的人数范围截止时间
        $end_time = 0;
        // 初始化已购买的最大人数
        $max_amout = 0;

        // 如果是扩充人数
        if ($buy_type == self::ORDER_TYPE_PRODUCT_SALE_PEOPLE) {
            // 获取购买扩充人数规则
            $rule = $orderServ->fetchProductRule(['prCostKey' => 'compete_persons_rule']);
        } else {
            // 如果是购买业绩比拼或者是续费业绩比拼 , 获取购买业绩比拼规则
            $rule = $orderServ->fetchProductRule(['prCostKey' => 'compete_app_rule']);
            // 如果是续费,则截止日期为续费之后的日期
            // 有效订单为空时,获取业绩比拼(购买或续费的业绩比拼)失效订单
            if (empty($valid_order)) {

                $no_valid_order = $orderServ->fetchOrderLiveList(['ordType' => 1, 'isSearchAvailable' => 2], ['oauEnd' => 'DESC']);
                $no_valid_order = $no_valid_order['list'];

                // 已购买的人数范围截止时间
                $end_time = empty($no_valid_order) ? $end_time : $no_valid_order[0]['oauEnd'];
                // 已购买的最大人数
                $max_amout = empty($no_valid_order) ? $max_amout : $no_valid_order[0]['oauMaxAmout'];
            } else {

                $end_time = $valid_order[0]['oauEnd']; // 已购买的人数范围截止时间
                $max_amout = $valid_order[0]['oauMaxAmout']; // 已购买的最大人数

                if (count($valid_order) > 1) {
                    $last_order = end($valid_order);
                    $end_time = $last_order['oauEnd'];
                }
            }
        }

        // 剩余使用天数
        $surplus_days = floor(($end_time - MILLI_TIME)/1000/86400);

        if (!$result['total']) {

            $is_wait_pay = self::WAIT_PAY_ORDER_FALSE;
        }

        $this->_result = [
            'is_wait_pay' => $is_wait_pay,
            'product_id' => $result['total'] ? $result['list'][0]['prId'] : '',
            'product_name' => $rule['prName'],
            'order_id' => $result['list'][0]['ordId'],
            'current_people' => $allow_users['memberTotal'],
            'buy_rule' => json_decode($rule['prCostValue'], true),
            'max_amout' => $max_amout,
            'end_time' => $end_time,
            'surplus_days' => $surplus_days < 0 ? 0 : $surplus_days,
        ];
        
        return true;
    }

}