Order.php 7.96 KB
<?php

namespace Home;

use LibModels\Wap\Home\OrderData;
use Plugin\Helpers;

/**
 * Description of Order
 * 
 */
class OrderModel
{

    const CODE_PAYMENT = '04cf5abaa7c20178325a07c4a833782c'; //支付订单资源码
    const CODE_STROLL = 'a7989369aa86681c678bc40f171b8f1d'; //随便逛逛url地址资源码

    /**
     * 订单相关数据处理
     * 
     * payment_type:
      '1' => array(//在线支付
      0 => '待付款',
      1 => '已付款',
      2 => '已付款',
      3 => '已付款',
      4 => '已发货',
      5 => '已发货',
      6 => '交易成功'
      ),
      '2' => array(//货到付款
      0 => '备货中',
      1 => '已付款',
      2 => '已付款',
      3 => '已付款',
      4 => '已发货',
      5 => '已发货',
      6 => '交易成功'
      ),
      '3' => array(//现金支付
      0 => '待付款',
      1 => '已付款',
      2 => '已付款',
      3 => '已付款',
      4 => '已发货',
      5 => '已发货',
      6 => '交易成功'
      ),
      '4' => array(//抵消支付
      0 => '待付款',
      1 => '已付款',
      2 => '已付款',
      3 => '已付款',
      4 => '已发货',
      5 => '已发货',
      6 => '交易成功'
      )
     */

    public static function getOrder($type, $page, $limit, $gender, $yh_channel, $uid)
    {
        $result = array();
        //调用接口获得数据
        $data = OrderData::getOrderData($type, $page, $limit, $gender, $yh_channel, $uid); 
        // 判断是否还有数据, 没有数据则返回空
        if (isset($data['data']['page_total']) && $page > $data['data']['page_total']) {
            return $result;
        }
        //检查数据返回是否正常,正常则处理数据
        if (!empty($data['data']['order_list'])) {
            // 订单的状态列表
            $orderStatus = Helpers::getOrderStatus();
            
            foreach ($data['data']['order_list'] as $key => $vo) {
                if ($vo['payment_status'] == 'Y' && $vo['status'] == 0) {
                    $vo['status'] = 1;
                }
                //订单号,支付状态,订单商品数量,订单总价格
                $result[$key]['orderNum'] = $vo['order_code'];
                $result[$key]['orderStatus'] = ($vo['is_cancel'] === 'Y') ? '已取消' : $orderStatus[ $vo['payment_type'] ][ $vo['status'] ];
                $result[$key]['count'] = count($vo['order_goods']);
                $result[$key]['sumCost'] = $vo['amount'];
                //类内调用格式化订单商品数据方法
                $result[$key]['goods'] = Helpers::formatOrderGoods($vo['order_goods']);
                $result[$key]['detailUrl'] = Helpers::url('/home/orders/detail', array('order_code' => $vo['order_code'], 't' => time()));
                //根据订单status判断订单处于什么状态。
                do {
                    //订单取消状态 = Y 时,跳出判断订单状态循环,并设置订单状态为已取消。
                    if ($vo['is_cancel'] === 'Y') {
                        $result[$key]['canceled'] = true;
                        break;
                    }
                    /* 先判断订单付款方式,根据不同的付款方式计算订单状态。(注:货到付款没有待付款状态)
                     * 付款方式:1 => 在线支付,2 => 货到付款,3 => 现金支付,4 => 抵消支付;
                     */
                    //支付方式为非货到付款时,计算订单状态。
                    if ($vo['payment_type'] != 2) {
                        switch ($vo['status']) {
                            case 0: // 待付款
                                $result[$key]['unpaid'] = true;
                                $result[$key]['payUrl'] = Helpers::url('/home/pay', array('order_code' => $vo['order_code']));
                                break;
                            //未发货&未收货 状态,统一合并到待收货状态。
                            case 1:
                            case 2:
                            case 3:
                                //已付款状态不给查看物流URL
                                $result[$key]['unreceived'] = true;
                                break;
                            case 4:
                            case 5:
                                //已发货状态,给查看物流URL
                                $result[$key]['unreceived'] = true;
                                $result[$key]['logisticsUrl'] = Helpers::url('/home/logistic', array('order_code' => $vo['order_code']));
                                break;
                            case 6:
                                $result[$key]['completed'] = true;
                                break;
                            default:
                                break;
                        }
                        break;
                    }

                    //订单为货到付款订单时,计算订单状态。(货到付款没有待付款状态)
                    switch ($vo['status']) {
                        case 0: // 备货中
                            $result[$key]['unpaid'] = true;
                            break;
                        case 1:
                        case 2:
                        case 3:
                            //备货中、已付款状态不给查看物流链接
                            $result[$key]['unreceived'] = true;
                            break;
                        case 4:
                        case 5:
                            //待收货状态,给查看物流url
                            $result[$key]['unreceived'] = true;
                            $result[$key]['logisticsUrl'] = Helpers::url('/home/logistic', array('order_code' => $vo['order_code']));
                            break;
                        case 6:
                            $result[$key]['completed'] = true;
                            break;
                        default:
                            break;
                    }
                } while (false);
            }
        }

        return $result;
    }

    /**
     * 获得支付链接
     */
    public static function payment($gender, $yh_channel)
    {
        $code = self::CODE_PAYMENT;
        $data = OrderData::paymentData($gender, $yh_channel, $code);
        return $data;
    }

    /**
     * 查看物流
     * 
     * @param int $orderCode 订单编号
     * @param int $uid 用户ID
     * @return array
     */
    public static function Logistics($orderCode, $uid)
    {
        $result = array();

        if (isset($orderCode) && is_numeric($uid)) {
            $logistics = OrderData::LogisticsData($orderCode, $uid);
            if (!empty($logistics['data'])) {
                $result['logisticUrl'] = $logistics['data']['url'];
                $result['logisticImg'] = $logistics['data']['logo'];
                $result['logisticCompany'] = $logistics['data']['caption'];
                $result['logisticNumber'] = $logistics['data']['express_number'];

                $build = array();
                foreach ($logistics['data']['express_detail'] as $value) {
                    $build['status'] = $value['accept_address'];
                    $build['date'] = $value['acceptTime'];
                    $result['logisticDetail'][] = $build;
                }
            }
        }

        return $result;
    }

    /**
     * 根据type值设置nav属性
     */
    public static function getNavs($type)
    {
        $navType = array(1 => '全部', 2 => '待付款', 3 => '待发货', 4 => '待收货');
        $nav = array();
        foreach ($navType as $key => $value) {
            $act = false;
            if ($type == $key) {
                $act = true;
            }
            $nav[] = array(
                'name' => $value,
                'typeId' => $key,
                'active' => $act,
                'url' => Helpers::url('/home/orders', array('type' => $key))
            );
        }

        return $nav;
    }

}