<?php
/**
 * OrderLogic.php UTF-8
 * 订单逻辑
 *
 * @date    : 2018/1/19 22:43
 *
 * @license 这不是一个自由软件,未经授权不许任何使用和传播。
 * @author  : wuyonghong <wyh@huosdk.com>
 * @version : HUOSDK 8.0
 */

namespace huo\logic\order;

use huo\model\common\CommonModel;
use huo\model\game\GameModel;
use huo\model\member\MemberModel;
use huo\model\member\MemGameModel;
use huo\model\order\PayAppleModel;
use huolib\constant\CommonConst;

class AppleOrderLogic extends CommonModel {
    /**
     * @param array $param
     *
     * @return array
     */
    public function getListWhere($param) {
        $_map = [];
        if (!empty($param['start_time']) && !empty($param['start_time'])) {
            $_map['create_time'] = ['between',
                                    [strtotime($param['start_time']),
                                     CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time'])]];
        } else if (!empty($param['start_time'])) {
            $_map['create_time'] = ['gt', strtotime($param['start_time'])];
        } else if (!empty($param['end_time'])) {
            $_map['create_time'] = ['lt',
                                    CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time'])];
        }
        if (!empty($param['trans_id'])) {
            $_map['trans_id'] = $param['trans_id'];
        }
        if (!empty($param['username'])) {
            $_id = (new MemberModel())->getIdByUsername($param['username']);
            $_map['mem_id'] = $_id;
        }
        if (!empty($param['mem_id'])) {
            $_map['mem_id'] = $param['mem_id'];
        }
        if (!empty($param['order_id'])) {
            $_map['order_id'] = $param['order_id'];
        }
        if (!empty($param['app_id'])) {
            $_apple_id = (new GameModel())->getAppleIdById($param['app_id']);
            $_map['apple_id'] = $_apple_id;
        }
        if (!empty($param['status'])) {
            $_map['status'] = $param['status'];
        }
        /*小号昵称搜索*/
        if (!empty($param['nickname'])) {
            $_mg_mem_ids = (new MemGameModel())->getIdsByNickname($param['nickname']);
            $_map['mg_mem_id'] = ['in', $_mg_mem_ids];
        }

        return $_map;
    }

    /**
     * @param        $param
     * @param string $page
     * @param string $order
     *
     * @return array
     */
    public function getOrderList($param, $page = '1,10', $order = '-create_time') {
        $_map = $this->getListWhere($param);
        $_field = [
            'id'              => 'id',
            'order_id'        => 'order_id',
            'mem_id'          => 'mem_id',
            'trans_id'        => 'trans_id',
            'currency'        => 'currency',
            'status'          => 'status',
            'pay_time'        => 'pay_time',
            'create_time'     => 'create_time',
            'check_cnt'       => 'check_cnt',
            'last_check_time' => 'last_check_time',
        ];

        return $this->getList($_field, $_map, $page, $order);
    }

    /**
     * 获取订单列表
     *
     * @param array  $field
     * @param        $where
     * @param string $page
     * @param string $order
     *
     * @return array
     */
    public function getList($field = [], $where, $page = '1,10', $order = '-create_time') {
        $_map = $where;
        $_model = new PayAppleModel();
        $_count = $_model->where($_map)->count();
        if (empty($_count)) {
            return [
                'count' => 0,
                'list'  => []
            ];
        }
        $_field = $field;
        if (empty($field)) {
            $_field = [];
        }
        $_order = $_model->orderFilter($order);
        $_datas = $_model
            ->with('mem,pay')
            ->where($_map)
            ->field($_field)
            ->order($_order)
            ->page($page)
            ->select();
        if (is_object($_datas)) {
            $_datas = $_datas->toArray();
        }
        if (empty($_datas)) {
            return [
                'count' => $_count,
                'list'  => []
            ];
        }
        $_list = $_datas;
        $_mem_game_model = new MemGameModel();
        $_game_model = new GameModel();
        foreach ($_datas as $_k => $_v) {
            $_list[$_k]['app_id'] = !empty($_v['pay']) ? $_v['pay']['app_id'] : 0;
            $_list[$_k]['mg_mem_id'] = !empty($_v['pay']) ? $_v['pay']['mg_mem_id'] : 0;
            $_list[$_k]['username'] = !empty($_v['mem']) ? $_v['mem']['username'] : '';
            $_list[$_k]['nickname'] = $_mem_game_model->getNicknameById($_list[$_k]['mg_mem_id']);
            $_list[$_k]['game_name'] = $_game_model->getNameById($_list[$_k]['app_id']);
            unset($_v['mem']);
            unset($_v['pay']);
        }

        return [
            'count' => $_count,
            'list'  => $_list
        ];
    }
}