<?php

class Table_Orders
{
    protected $_table = null;

    public function __construct()
    {
        $this->_table = new DbTable_Orders();
    }

    public function getAdapter()
    {
        return $this->_table->getAdapter();
    }

    public static function getInstance()
    {
        return new Table_Orders();
    }

    /**
     * @param $row
     * @return mixed
     */
    public function add($row)
    {
        return $this->_table->insert($row);
    }


    /**
     * @param $row
     * @param $value
     * @param string $field
     * @return mixed
     */
    public function update($row, $value, $field = "order_id")
    {
        $where = $this->_table->getAdapter()->quoteInto("{$field}= ?", $value);
        return $this->_table->update($row, $where);
    }

    /**
     * @param array $row
     * @param array $values
     * @param string $field
     */
    public function updateIn($row, $values, $field = "order_code")
    {
        $where = $this->_table->getAdapter()->quoteInto("{$field} IN(?)", $values);
        return $this->_table->update($row, $where);
    }

    /**
     * @param $value
     * @param string $field
     * @return mixed
     */
    public function delete($value, $field = "order_id")
    {
        $where = $this->_table->getAdapter()->quoteInto("{$field}= ?", $value);
        return $this->_table->delete($where);
    }

    /**
     * @param $value
     * @param string $field
     * @param string $colums
     * @return mixed
     */
    public function getByField($value, $field = 'order_id', $colums = "*")
    {
        $select = $this->_table->getAdapter()->select();
        $table = $this->_table->info('name');
        $select->from($table, $colums);
        $select->where("{$field} = ?", $value);
        return $this->_table->getAdapter()->fetchRow($select);
    }

    public function getAll()
    {
        $select = $this->_table->getAdapter()->select();
        $table = $this->_table->info('name');
        $select->from($table, "*");
        return $this->_table->getAdapter()->fetchAll($select);
    }

    /**
     * @param array $condition
     * @param string $type
     * @param int $pageSize
     * @param int $page
     * @param string $orderBy
     * @return array|string
     */
    public function getByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $orderBy = "")
    {
        $select = $this->_table->getAdapter()->select();
        $table = $this->_table->info('name');
        $select->from($table, $type);
        $select->where("1 =?", 1);
        /*CONDITION_START*/

        if (isset($condition["order_id_gt"]) && $condition["order_id_gt"] != "") {
            $select->where("order_id > ?", $condition["order_id_gt"]);
        }
        if (isset($condition["order_code"]) && $condition["order_code"] != "") {
            $select->where("order_code = ?", $condition["order_code"]);
        }
        if (isset($condition["order_code_neq"]) && $condition["order_code_neq"] != "") {
            $select->where("order_code = ?", $condition["order_code_neq"]);
        }
        if (isset($condition["customer_id"]) && $condition["customer_id"] != "") {
            $select->where("customer_id = ?", $condition["customer_id"]);
        }
        if (isset($condition["customer_code"]) && $condition["customer_code"] != "") {
            $select->where("customer_code = ?", $condition["customer_code"]);
        }
        if (isset($condition["customer_code_Arr"]) && $condition["customer_code_Arr"] != "" && is_array($condition["customer_code_Arr"])) {
            $select->where("customer_code in (?)", $condition["customer_code_Arr"]);
        }
        if (isset($condition["warehouse_id"]) && $condition["warehouse_id"] !== "") {
            $select->where("warehouse_id = ?", $condition["warehouse_id"]);
        }
        if (isset($condition["order_type"]) && $condition["order_type"] !== "") {
            $select->where("order_type = ?", $condition["order_type"]);
        }
        if (isset($condition["sm_code"]) && $condition["sm_code"] != "") {
            $select->where("sm_code = ?", $condition["sm_code"]);
        }
        if (isset($condition['sm_code_Arr']) && $condition["sm_code_Arr"] != "" && is_array($condition['sm_code_Arr'])) {
            $select->where("sm_code IN (?)", $condition["sm_code_Arr"]);
        }
        if (isset($condition["order_mode_type"]) && $condition["order_mode_type"] != "") {
            $select->where("order_mode_type = ?", $condition["order_mode_type"]);
        }
        if (isset($condition["order_status_neq"]) && $condition["order_status_neq"] !== "") {
            $select->where("order_status != ?", $condition["order_status_neq"]);
        }
        if (isset($condition["order_status"]) && $condition["order_status"] != "") {
            $select->where("order_status = ?", $condition["order_status"]);
        }
        if (isset($condition["order_status_Arr"]) && $condition["order_status_Arr"] != "") {
            $select->where("order_status IN (?)", $condition["order_status_Arr"]);
        }
        if (isset($condition["problem_status"]) && $condition["problem_status"] != "") {
            $select->where("problem_status = ?", $condition["problem_status"]);
        }
        if (isset($condition["underreview_status"]) && $condition["underreview_status"] !== "") {
            $select->where("underreview_status = ?", $condition["underreview_status"]);
        }
        if (isset($condition["intercept_status"]) && $condition["intercept_status"] !== "") {
            $select->where("intercept_status = ?", $condition["intercept_status"]);
        }
        if (isset($condition["order_pick_type"]) && $condition["order_pick_type"] !== "") {
            $select->where("order_pick_type = ?", $condition["order_pick_type"]);
        }
        if (isset($condition["reference_no"]) && $condition["reference_no"] != "") {
            $select->where("reference_no = ?", $condition["reference_no"]);
        }
        if (isset($condition["picker_id"]) && $condition["picker_id"] !== "") {
            $select->where("picker_id = ?", $condition["picker_id"]);
        }
        if (isset($condition['receiving_code']) && $condition['receiving_code'] !== "") {
            $select->where(" receiving_code = ? ", $condition['receiving_code']);
        }
        if (isset($condition['ref_tracking_number']) && $condition['ref_tracking_number'] != "") {
            $select->where(" ref_tracking_number = ?", $condition['ref_tracking_number']);
        }
        if (isset($condition['EUB_ref_tracking_number'])) {
            $select->where(" ref_tracking_number = ?", $condition['EUB_ref_tracking_number']);
        }
        // NOTNULL_ref_tracking_number
        if (isset($condition['994_ref_tracking_number'])) {
            $select->where(" ref_tracking_number LIKE '994%'");
        }
        if (isset($condition['empty_ref_tracking_number']) && $condition['empty_ref_tracking_number'] != "") {
            $select->where(" ref_tracking_number = ?", "");
        }
        if (isset($condition['order_mode_type']) && $condition['order_mode_type'] != "") {
            $select->where(" order_mode_type = ? ", $condition['order_mode_type']);
        }
        if (isset($condition['platform']) && $condition['platform'] != "") {
            $select->where(" platform = ?", $condition['platform']);
        }
        if (isset($condition['trade_mode']) && $condition['trade_mode'] != "") {
            $select->where(" trade_mode = ?", $condition['trade_mode']);
        }
        if (isset($condition['tracking_status']) && $condition['tracking_status'] != "") {
            $select->where(" tracking_status = ?", $condition['tracking_status']);
        }
        if (isset($condition['add_time_start']) && $condition['add_time_start'] != "") {
            $select->where(" add_time >= ?", $condition['add_time_start']);
        }
        if (isset($condition['track_status']) && $condition['track_status'] != "") {
            $select->where(" track_status = ?", $condition['track_status']);
        }
        if (isset($condition['sync_status']) && $condition['sync_status'] !== "") {
            $select->where(" sync_status = ?", $condition['sync_status']);
        }
        if (isset($condition['no_empty_ref_tracking_number']) && $condition['no_empty_ref_tracking_number'] == "1") {
            $select->where(" ref_tracking_number <> ?", '');
        }
        if (isset($condition['order_code_arr']) && $condition['order_code_arr'] !== "") {
            $select->where(" order_code in(?)", $condition['order_code_arr']);
        }
        if (isset($condition["dateFor"]) && $condition["dateFor"] != "") {
            $select->where("add_time >=?", $condition["dateFor"]);
        }
        if (isset($condition["dateTo"]) && $condition["dateTo"] != "") {
            $select->where("add_time <=?", $condition["dateTo"]);
        }
        if (isset($condition["order_status_lt"]) && $condition["order_status_lt"] != "") {
            $select->where("order_status >=?", $condition["order_status_lt"]);
        }
        if (isset($condition['empty_agent_mailno']) && $condition['empty_agent_mailno'] != "") {
            if ($condition['empty_agent_mailno'] == "1") {
                $select->where("agent_mailno IS NULL");
            }
            if ($condition['empty_agent_mailno'] == "0") {
                $select->where("agent_mailno IS NOT NULL");
            }
        }

        /*CONDITION_END*/
        if ('count(*)' == $type) {
            return $this->_table->getAdapter()->fetchOne($select);
        } else {
            if (!empty($orderBy)) {
                $select->order($orderBy);
            }
            if ($pageSize > 0 and $page > 0) {
                $start = ($page - 1) * $pageSize;
                $select->limit($pageSize, $start);
            }
            $sql = $select->__toString();
            return $this->_table->getAdapter()->fetchAll($sql);
        }
    }

    /*
     * @已提交订单
     * @处理待下架
     */
    public function getShipmentByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $orderBy = "")
    {
        $select = $this->_table->getAdapter()->select();
        $table = $this->_table->info('name');
        $select->from($table, $type);
        $select->where("1 =?", 1);
        /*CONDITION_START*/

        $select->where("order_status = 4");
        if (isset($condition["order_code"]) && $condition["order_code"] != "") {
            $select->where("order_code = ?", $condition["order_code"]);
        }

        if (isset($condition["dateFor"]) && $condition["dateFor"] != "") {
            $select->where("add_time >=?", $condition["dateFor"]);
        }

        if (isset($condition["dateTo"]) && $condition["dateTo"] != "") {
            $select->where("add_time <=?", $condition["dateTo"]);
        }

        if (isset($condition["customer_id"]) && $condition["customer_id"] != "") {
            $select->where("customer_id = ?", $condition["customer_id"]);
        }
        if (isset($condition["customer_code"]) && $condition["customer_code"] != "") {
            $select->where("customer_code = ?", $condition["customer_code"]);
        }
        if (isset($condition["warehouse_id"]) && $condition["warehouse_id"] != "") {
            $select->where("warehouse_id = ?", $condition["warehouse_id"]);
        }
        if (isset($condition["order_type"]) && $condition["order_type"] != "") {
            $select->where("order_type = ?", $condition["order_type"]);
        }

        if (isset($condition["sm_code"]) && $condition["sm_code"] != "") {
            $select->where("sm_code = ?", $condition["sm_code"]);
        }

        if (isset($condition["order_pick_type"]) && is_array($condition["order_pick_type"])) {
            $select->where("order_pick_type in(?) ", $condition["order_pick_type"]);
        }
        if (isset($condition["reference_no"]) && $condition["reference_no"] != "") {
            $select->where("reference_no = ?", $condition["reference_no"]);
        }
        if (isset($condition['order_mode_type']) && $condition['order_mode_type'] != "") {
            $select->where(" order_mode_type = ? ", $condition['order_mode_type']);
        }
        if (isset($condition['platform']) && $condition['platform'] != "") {
            $select->where(" platform = ?", $condition['platform']);
        }
        if (isset($condition['tracking_status']) && $condition['tracking_status'] != "") {
            $select->where(" tracking_status = ?", $condition['tracking_status']);
        }
        if (isset($condition['track_status']) && $condition['track_status'] != "") {
            $select->where(" track_status = ?", $condition['track_status']);
        }
        if (isset($condition['has_ref_tracking_number']) && $condition['has_ref_tracking_number'] != "") {
            $select->where(" ref_tracking_number != ?", '');
        }

        /*CONDITION_END*/
        if ('count(*)' == $type) {
            $sql = $select->__toString();
            return $this->_table->getAdapter()->fetchOne($select);
        } else {
            if (!empty($orderBy)) {
                $select->order($orderBy);
            }
            if ($pageSize > 0 and $page > 0) {
                $start = ($page - 1) * $pageSize;
                $select->limit($pageSize, $start);
            }
            $sql = $select->__toString();
            return $this->_table->getAdapter()->fetchAll($sql);
        }
    }

    /*
     * @已提交订单
    * @处理待下架
    */
    public function getShipmentInnerJoinProductByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $orderBy = "")
    {
        if ((isset($condition['product_sku']) && !empty($condition['product_sku'])) || (isset($condition['product_category']) && !empty($condition['product_category']))) {
            $select = $this->_table->getAdapter()->select();
            $table = $this->_table->info('name');
            if ('count(*)' == $type) {
                //统计总数
                $select->from($table, 'count(DISTINCT(orders.order_code))');
            } else {
                $select->from($table, $type);
            }
            $select->joinInner('order_product', 'order_product.order_code=' . $table . ".order_code");
            $select->where("1 =?", 1);
            /*CONDITION_START*/

            $select->where("order_status = 4");
            if (isset($condition["order_code"]) && $condition["order_code"] != "") {
                $select->where("order_code = ?", $condition["order_code"]);
            }

            if (isset($condition["dateFor"]) && $condition["dateFor"] != "") {
                $select->where("add_time >=?", $condition["dateFor"]);
            }

            if (isset($condition["dateTo"]) && $condition["dateTo"] != "") {
                $select->where("add_time <=?", $condition["dateTo"]);
            }

            if (isset($condition["customer_id"]) && $condition["customer_id"] != "") {
                $select->where("customer_id = ?", $condition["customer_id"]);
            }
            if (isset($condition["customer_code"]) && $condition["customer_code"] != "") {
                $select->where("customer_code = ?", $condition["customer_code"]);
            }
            if (isset($condition["warehouse_id"]) && $condition["warehouse_id"] != "") {
                $select->where("warehouse_id = ?", $condition["warehouse_id"]);
            }
            if (isset($condition["order_type"]) && $condition["order_type"] != "") {
                $select->where("order_type = ?", $condition["order_type"]);
            }

            if (isset($condition["sm_code"]) && $condition["sm_code"] != "") {
                $select->where("sm_code = ?", $condition["sm_code"]);
            }

            if (isset($condition["order_pick_type"]) && is_array($condition["order_pick_type"])) {
                $select->where("order_pick_type in(?) ", $condition["order_pick_type"]);
            }
            if (isset($condition["reference_no"]) && $condition["reference_no"] != "") {
                $select->where("reference_no = ?", $condition["reference_no"]);
            }
            if (isset($condition["product_sku"]) && $condition["product_sku"] != "") {
                $select->where("product_barcode = ?", $condition["product_sku"]);
            }
            if (isset($condition["product_category"]) && $condition["product_category"] != "") {
                $select->where("op_category = ?", $condition["product_category"]);
            }
            if (isset($condition['order_mode_type']) && $condition['order_mode_type'] != "") {
                $select->where(" order_mode_type = ? ", $condition['order_mode_type']);
            }
            if (isset($condition['platform']) && $condition['platform'] !== "") {
                $select->where("platform = ? ", $condition['platform']);
            }
            if (isset($condition['tracking_status']) && $condition['tracking_status'] != "") {
                $select->where(" tracking_status = ?", $condition['tracking_status']);
            }
            if (isset($condition['track_status']) && $condition['track_status'] != "") {
                $select->where(" track_status = ?", $condition['track_status']);
            }
            /*CONDITION_END*/
            if ('count(*)' == $type) {
                $sql = $select->__toString();
                //     		echo $sql;exit;
                return $this->_table->getAdapter()->fetchOne($select);
            } else {
                //清除重复
                $select->group($table . '.order_code');
                if (!empty($orderBy)) {
                    $select->order($orderBy);
                }
                if ($pageSize > 0 and $page > 0) {
                    $start = ($page - 1) * $pageSize;
                    $select->limit($pageSize, $start);
                }
                $sql = $select->__toString();
                return $this->_table->getAdapter()->fetchAll($sql);
            }
        } else {
            return $this->getShipmentByCondition($condition, $type, $pageSize, $page, $orderBy);
        }


    }


    public function getLeftJoinAllByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $orderBy = "")
    {
        $select = $this->_table->getAdapter()->select();
        $table = $this->_table->info('name');
        $select->from($table, $type);
        $select->joinLeft('order_address_book', 'order_address_book.order_id=orders.order_id', $type == 'count(*)' ? array() : array('oab_country_id'));
        $select->joinLeft('order_operation_time', 'order_operation_time.order_id=orders.order_id', $type == 'count(*)' ? array() : array('process_time', 'pack_time', 'ship_time', 'cutoff_time', 'shipment_time'));
        $select->joinLeft('country', 'country.country_id=order_address_book.oab_country_id', $type == 'count(*)' ? array() : array('country_name_en', 'country_code'));
        $select->joinLeft('ship_order', 'ship_order.order_id=orders.order_id', $type == 'count(*)' ? array() : array('so_fee_weight'));
        $select->where("1 =?", 1);
        /*CONDITION_START*/

        if (isset($condition["order_id_array"]) && $condition["order_id_array"] != "" && is_array($condition["order_id_array"])) {
            $select->where("{$table}.order_id IN (?)", $condition["order_id_array"]);
        }


        if (isset($condition["order_status"]) && $condition["order_status"] != "" && !is_array($condition['order_status'])) {
            $select->where("order_status = ?", $condition["order_status"]);
        } elseif (isset($condition["order_status"]) && !empty($condition["order_status"]) && is_array($condition['order_status'])) {
            $select->where("order_status IN (?)", $condition["order_status"]);
        }
        if (isset($condition['not_order_status']) && $condition['not_order_status'] !== '') {
            $select->where("order_status != ?", $condition["not_order_status"]);
        }
        if (isset($condition['not_customer_code']) && $condition['not_customer_code'] !== '') {
            $select->where("customer_code != ?", $condition["not_customer_code"]);
        }

        if (isset($condition["order_code"]) && $condition["order_code"] != "") {
            $select->where($table . ".order_code = ?", $condition["order_code"]);
        }

        if (isset($condition["order_id"]) && $condition["order_id"] != "") {
            $select->where($table . ".order_id = ?", $condition["order_id"]);
        }

        if (isset($condition["reference_no"]) && $condition["reference_no"] != "") {
            $select->where("reference_no = ?", $condition["reference_no"]);
        }

        if (isset($condition["underreview_status"]) && $condition["underreview_status"] != "") {
            $select->where("underreview_status = ?", $condition["underreview_status"]);
        }

        if (isset($condition["intercept_status"]) && $condition["intercept_status"] !== "") {
            $select->where("intercept_status = ?", $condition["intercept_status"]);
        }

        if (isset($condition["dateFor"]) && $condition["dateFor"] != "") {
            $select->where("add_time >=?", $condition["dateFor"]);
        }
        if (isset($condition["dateTo"]) && $condition["dateTo"] != "") {
            $select->where("add_time <=?", $condition["dateTo"]);
        }

        if (isset($condition["printDateFor"]) && $condition["printDateFor"] != "") {
            $select->where("process_time >=?", $condition["printDateFor"]);
        }
        if (isset($condition["printDateTo"]) && $condition["printDateTo"] != "") {
            $select->where("process_time <=?", $condition["printDateTo"]);
        }
        if (isset($condition["confirmDateFor"]) && $condition["confirmDateFor"] != "") {
            $select->where("confirm_time >=?", $condition["confirmDateFor"]);
        }
        if (isset($condition["confirmDateTo"]) && $condition["confirmDateTo"] != "") {
            $select->where("confirm_time <=?", $condition["confirmDateTo"]);
        }
        if (isset($condition["packDateFor"]) && $condition["packDateFor"] != "") {
            $select->where("pack_time >=?", $condition["packDateFor"]);
        }
        if (isset($condition["packDateTo"]) && $condition["packDateTo"] != "") {
            $select->where("pack_time <=?", $condition["packDateTo"]);
        }

        if (isset($condition["shipDateFor"]) && $condition["shipDateFor"] != "") {
            $select->where("ship_time >=?", $condition["shipDateFor"]);
        }
        if (isset($condition["shipDateTo"]) && $condition["shipDateTo"] != "") {
            $select->where("ship_time <=?", $condition["shipDateTo"]);
        }

        if (isset($condition["shipTimekDateFor"]) && $condition["shipTimekDateFor"] != "") {
            $select->where("order_operation_time.ship_time >=?", $condition["shipTimekDateFor"]);
        }
        if (isset($condition["shipTimeDateTo"]) && $condition["shipTimeDateTo"] != "") {
            $select->where("order_operation_time.ship_time <=?", $condition["shipTimeDateTo"]);
        }

        if (isset($condition["shipmentDateFor"]) && $condition["shipmentDateFor"] != "") {
            $select->where("order_operation_time.shipment_time >=?", $condition["shipmentDateFor"]);
        }
        if (isset($condition["shipmentDateTo"]) && $condition["shipmentDateTo"] != "") {
            $select->where("order_operation_time.shipment_time <=?", $condition["shipmentDateTo"]);
        }

        if (isset($condition["customer_id"]) && $condition["customer_id"] != "") {
            $select->where("customer_id = ?", $condition["customer_id"]);
        }
        if (isset($condition["customer_code"]) && $condition["customer_code"] != "") {
            $select->where("customer_code = ?", $condition["customer_code"]);
        }
        if (isset($condition["warehouse_id"]) && $condition["warehouse_id"] != "") {
            $select->where("warehouse_id = ?", $condition["warehouse_id"]);
        }
        if (isset($condition["order_type"]) && $condition["order_type"] != "") {
            $select->where("order_type = ?", $condition["order_type"]);
        }

        if (isset($condition["sm_code"]) && !is_array($condition["sm_code"]) && $condition["sm_code"] != "") {
            $select->where($table . ".sm_code = ?", $condition["sm_code"]);
        } else if (isset($condition["sm_code"]) && is_array($condition["sm_code"]) && !empty($condition["sm_code"])) {
            $select->where($table . ".sm_code in (?)", $condition["sm_code"]);
        }

        if (isset($condition["order_pick_type"]) && $condition["order_pick_type"] !== '') {
            $select->where("order_pick_type=?", $condition["order_pick_type"]);
        }

        if (isset($condition["order_pick_type_in"]) && is_array($condition["order_pick_type_in"])) {
            $select->where("order_pick_type in(?) ", $condition["order_pick_type_in"]);
        }
        if (isset($condition["oab_type"]) && $condition["oab_type"] != "") {
            $select->where("oab_type = ?", $condition["oab_type"]);
        }

        if (isset($condition['order_mode_type']) && $condition['order_mode_type'] !== "") {
            $select->where(" order_mode_type = ? ", $condition['order_mode_type']);
        }
        /*if(isset($condition['tracking_number'])&&$condition['tracking_number']!=""){
            $select->where(" ship_order.tracking_number = ? ",$condition["tracking_number"]);
        }*/
        if (isset($condition['oab_country_id']) && !is_array($condition['oab_country_id']) && $condition['oab_country_id'] != "") {
            $select->where(" order_address_book.oab_country_id = ? ", $condition['oab_country_id']);
        } else if (isset($condition['oab_country_id']) && is_array($condition['oab_country_id']) && !empty($condition['oab_country_id'])) {
            $select->where(" order_address_book.oab_country_id in (?) ", $condition['oab_country_id']);
        }
        if (isset($condition['reference_no_like']) && $condition['reference_no_like'] != "") {
            $select->where("reference_no like '%" . $condition['reference_no_like'] . "' or reference_no like '" . $condition['reference_no_like'] . "%' or reference_no like '%" . $condition['reference_no_like'] . "%' or reference_no = ?", $condition['reference_no_like']);
        }
        if (isset($condition['TO_DAYS(submit_time)']) && $condition['TO_DAYS(submit_time)'] != '') {
            $select->where(" TO_DAYS(order_operation_time.submit_time) = {$condition['TO_DAYS(submit_time)']} ");
        }
        if (isset($condition['TO_DAYS(NOW())-TO_DAYS(submit_time)']) && $condition['TO_DAYS(NOW())-TO_DAYS(submit_time)']) {
            $select->where(" TO_DAYS(NOW())-TO_DAYS(order_operation_time.submit_time) = {$condition['TO_DAYS(NOW())-TO_DAYS(submit_time)']} ");
        }
        if (isset($condition['_string']) && $condition['_string'] != '') {
            $select->where($condition['_string']);
        }
        if (isset($condition['platform']) && $condition['platform'] != "") {
            $select->where(" platform = ?", $condition['platform']);
        }
        if (isset($condition['tracking_status']) && $condition['tracking_status'] != "") {
            $select->where(" tracking_status = ?", $condition['tracking_status']);
        }
        if (isset($condition["sm_code_in"]) && $condition["sm_code_in"] != "") {
            $select->where("sm_code in (?)", $condition["sm_code_in"]);
        }
        if (isset($condition["print_no"]) && $condition["print_no"] != '' && !empty($condition['print_no'])) {
            $select->where("print_no in(?) ", $condition["print_no"]);
        }
        if (isset($condition['is_fba']) && $condition['is_fba'] != "") {
            $select->where(" is_fba = ?", $condition['is_fba']);
        }
        if (isset($condition['track_status']) && $condition['track_status'] != "") {
            $select->where(" track_status = ?", $condition['track_status']);
        }
        if (isset($condition['insurance']) && $condition['insurance'] !== "") {
            $select->where(" insurance = ?", $condition['insurance']);
        }

        /*CONDITION_END*/
        if ('count(*)' == $type) {
            // echo   $select->__toString();die();
            return $this->_table->getAdapter()->fetchOne($select);
        } else {
            if (!empty($orderBy)) {
                $select->order($orderBy);
            }
            if ($pageSize > 0 and $page > 0) {
                $start = ($page - 1) * $pageSize;
                $select->limit($pageSize, $start);
            }
            $sql = $select->__toString();

            return $this->_table->getAdapter()->fetchAll($sql);
        }
    }


    /**
     * @desc 订单查询列表、添加 product_barcode 品类搜索
     * @param array $condition
     * @param string $type
     * @param int $pageSize
     * @param int $page
     * @param string $orderBy
     */
    public function getOrderInnerJoinProductByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $orderBy = "")
    {
        if ((isset($condition['product_barcode']) && !empty($condition['product_barcode'])) || (isset($condition['product_category']) && !empty($condition['product_category']))) {
            $select = $this->_table->getAdapter()->select();
            $table = $this->_table->info('name');
            if ('count(*)' == $type) {
                //统计总数
                $select->from($table, 'count(DISTINCT(orders.order_code))');
            } else {
                $select->from($table, $type);
            }
            $select->joinInner('order_product', 'order_product.order_code=' . $table . ".order_code");
            $select->joinLeft('order_address_book', 'order_address_book.order_id=orders.order_id', array('oab_country_id'));
            $select->joinLeft('order_operation_time', 'order_operation_time.order_id=orders.order_id', array('process_time', 'pack_time', 'ship_time', 'cutoff_time', 'shipment_time'));
            $select->joinLeft('country', 'country.country_id=order_address_book.oab_country_id', array('country_name_en', 'country_code'));
            //$select->join('ship_order','ship_order.order_code=orders.order_code',array());
            $select->where("1 =?", 1);
            /*CONDITION_START*/

            if (isset($condition["order_status"]) && $condition["order_status"] != "") {
                $select->where("order_status = ?", $condition["order_status"]);
            }

            if (isset($condition["order_id_array"]) && $condition["order_id_array"] != "" && is_array($condition["order_id_array"])) {
                $select->where("order_id IN (?)", $condition["order_id_array"]);
            }

            if (isset($condition["order_code"]) && $condition["order_code"] != "") {
                $select->where($table . ".order_code = ?", $condition["order_code"]);
            }

            if (isset($condition["order_id"]) && $condition["order_id"] != "") {
                $select->where($table . ".order_id = ?", $condition["order_id"]);
            }

            if (isset($condition["reference_no"]) && $condition["reference_no"] != "") {
                $select->where("reference_no = ?", $condition["reference_no"]);
            }

            if (isset($condition["intercept_status"]) && $condition["intercept_status"] !== "") {
                $select->where("intercept_status = ?", $condition["intercept_status"]);
            }

            if (isset($condition["underreview_status"]) && $condition["underreview_status"] != "") {
                $select->where("underreview_status = ?", $condition["underreview_status"]);
            }

            if (isset($condition["dateFor"]) && $condition["dateFor"] != "") {
                $select->where("add_time >=?", $condition["dateFor"]);
            }
            if (isset($condition["dateTo"]) && $condition["dateTo"] != "") {
                $select->where("add_time <=?", $condition["dateTo"]);
            }

            if (isset($condition["printDateFor"]) && $condition["printDateFor"] != "") {
                $select->where("process_time >=?", $condition["printDateFor"]);
            }
            if (isset($condition["printDateTo"]) && $condition["printDateTo"] != "") {
                $select->where("process_time <=?", $condition["printDateTo"]);
            }

            if (isset($condition["packDateFor"]) && $condition["packDateFor"] != "") {
                $select->where("pack_time >=?", $condition["packDateFor"]);
            }
            if (isset($condition["packDateTo"]) && $condition["packDateTo"] != "") {
                $select->where("pack_time <=?", $condition["packDateTo"]);
            }

            if (isset($condition["shipDateFor"]) && $condition["shipDateFor"] != "") {
                $select->where("ship_time >=?", $condition["shipDateFor"]);
            }
            if (isset($condition["shipDateTo"]) && $condition["shipDateTo"] != "") {
                $select->where("ship_time <=?", $condition["shipDateTo"]);
            }

            if (isset($condition["shipTimekDateFor"]) && $condition["shipTimekDateFor"] != "") {
                $select->where("order_operation_time.ship_time >=?", $condition["shipTimekDateFor"]);
            }
            if (isset($condition["shipTimeDateTo"]) && $condition["shipTimeDateTo"] != "") {
                $select->where("order_operation_time.ship_time <=?", $condition["shipTimeDateTo"]);
            }

            if (isset($condition["shipmentDateFor"]) && $condition["shipmentDateFor"] != "") {
                $select->where("order_operation_time.shipment_time >=?", $condition["shipmentDateFor"]);
            }
            if (isset($condition["shipmentDateTo"]) && $condition["shipmentDateTo"] != "") {
                $select->where("order_operation_time.shipment_time <=?", $condition["shipmentDateTo"]);
            }

            if (isset($condition["customer_id"]) && $condition["customer_id"] != "") {
                $select->where("customer_id = ?", $condition["customer_id"]);
            }
            if (isset($condition["customer_code"]) && $condition["customer_code"] != "") {
                $select->where("customer_code = ?", $condition["customer_code"]);
            }
            if (isset($condition["warehouse_id"]) && $condition["warehouse_id"] != "") {
                $select->where("warehouse_id = ?", $condition["warehouse_id"]);
            }
            if (isset($condition["order_type"]) && $condition["order_type"] != "") {
                $select->where("order_type = ?", $condition["order_type"]);
            }
            if (isset($condition["sm_code"]) && !is_array($condition["sm_code"]) && $condition["sm_code"] != "") {
                $select->where($table . ".sm_code = ?", $condition["sm_code"]);
            } else if (isset($condition["sm_code"]) && is_array($condition["sm_code"]) && !empty($condition["sm_code"])) {
                $select->where($table . ".sm_code in (?)", $condition["sm_code"]);
            }

            if (isset($condition["order_pick_type"]) && $condition["order_pick_type"] !== '') {
                $select->where("order_pick_type=?", $condition["order_pick_type"]);
            }

            if (isset($condition["order_pick_type_in"]) && is_array($condition["order_pick_type_in"])) {
                $select->where("order_pick_type in(?) ", $condition["order_pick_type_in"]);
            }
            if (isset($condition["product_barcode"]) && $condition["product_barcode"] != "") {
                $select->where("product_barcode = ?", $condition["product_barcode"]);
            }
            if (isset($condition["product_category"]) && $condition["product_category"] != "") {
                $select->where("op_category = ?", $condition["product_category"]);
            }
            if (isset($condition["oab_type"]) && $condition["oab_type"] != "") {
                $select->where("oab_type = ?", $condition["oab_type"]);
            }

            if (isset($condition['order_mode_type']) && $condition['order_mode_type'] !== "") {
                $select->where(" order_mode_type = ? ", $condition['order_mode_type']);
            }
            /*if(isset($condition['tracking_number'])&&$condition['tracking_number']!=""){
                $select->where(" ship_order.tracking_number = ? ",$condition["tracking_number"]);
            }*/
            if (isset($condition['oab_country_id']) && !is_array($condition['oab_country_id']) && $condition['oab_country_id'] != "") {
                $select->where(" order_address_book.oab_country_id = ? ", $condition['oab_country_id']);
            } else if (isset($condition['oab_country_id']) && is_array($condition['oab_country_id']) && !empty($condition['oab_country_id'])) {
                $select->where(" order_address_book.oab_country_id in (?) ", $condition['oab_country_id']);
            }
            if (isset($condition['reference_no_like']) && $condition['reference_no_like'] != "") {
                $select->where("reference_no like '%" . $condition['reference_no_like'] . "' or reference_no like '" . $condition['reference_no_like'] . "%' or reference_no like '%" . $condition['reference_no_like'] . "%' or reference_no = ?", $condition['reference_no_like']);
            }
            if (isset($condition['tracking_status']) && $condition['tracking_status'] != "") {
                $select->where(" tracking_status = ?", $condition['tracking_status']);
            }
            if (isset($condition['platform']) && $condition['platform'] != "") {
                $select->where(" platform = ?", $condition['platform']);
            }
            if (isset($condition['track_status']) && $condition['track_status'] != "") {
                $select->where(" track_status = ?", $condition['track_status']);
            }
            if (isset($condition['insurance']) && $condition['insurance'] !== "") {
                $select->where(" insurance = ?", $condition['insurance']);
            }
            /*CONDITION_END*/
            if ('count(*)' == $type) {
                $sql = $select->__toString();
                return $this->_table->getAdapter()->fetchOne($select);
            } else {
                //清除重复
                $select->group($table . '.order_code');
                if (!empty($orderBy)) {
                    $select->order($orderBy);
                }
                if ($pageSize > 0 and $page > 0) {
                    $start = ($page - 1) * $pageSize;
                    $select->limit($pageSize, $start);
                }
                $sql = $select->__toString();
                return $this->_table->getAdapter()->fetchAll($sql);
            }
        } else {
            return $this->getLeftJoinAllByCondition($condition, $type, $pageSize, $page, $orderBy);
        }

    }

    /**
     * @desc 未同步的订单
     * @param array $condition
     * @param string $type
     * @param int $pageSize
     * @param int $page
     * @param string $orderBy
     * @return array|string
     */
    public function getNotSyncByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $orderBy = "")
    {
        $select = $this->_table->getAdapter()->select();
        $table = $this->_table->info('name');
        $select->from($table, $type);
        $select->where("1 =?", 1);
        if (isset($condition["customer_code"]) && $condition["customer_code"] != "") {
            $select->where("customer_code = ?", $condition["customer_code"]);
        }
        if (isset($condition["order_status_in"]) && is_array($condition["order_status_in"])) {
            $select->where("order_status in(?)", $condition["order_status_in"]);
        }
        if (isset($condition["sync_status_in"]) && is_array($condition["sync_status_in"])) {
            $select->where("sync_status in(?)", $condition["sync_status_in"]);
        }
        if ('count(*)' == $type) {
            return $this->_table->getAdapter()->fetchOne($select);
        } else {
            if (!empty($orderBy)) {
                $select->order($orderBy);
            }
            if ($pageSize > 0 and $page > 0) {
                $start = ($page - 1) * $pageSize;
                $select->limit($pageSize, $start);
            }
            $sql = $select->__toString();
            return $this->_table->getAdapter()->fetchAll($sql);
        }
    }

    /**
     * 计算订单的重量
     * @param string $order_code
     * @return number
     * @author solar
     */
    public function calculateWeight($order_code)
    {
        $select = $this->_table->getAdapter()->select();
        $select->from('order_product as op', array('sum(product_weight*op_quantity) as weight'));
        $select->joinLeft('product as p', 'op.product_id=p.product_id');
        $select->where('op.order_code=?', $order_code);
        return $this->_table->getAdapter()->fetchOne($select);
    }

    /**
     * 统计订单的HsCode数量
     * @param string $order_code
     * @return int
     * @author solar
     */
    public function countHsCode($order_code)
    {
        $select = $this->_table->getAdapter()->select();
        $select->from('order_product as op', array('count(distinct p.hs_code) as num'));
        $select->joinLeft('product as p', 'op.product_id=p.product_id', '');
        $select->where('op.order_code=?', $order_code);
        return $this->_table->getAdapter()->fetchOne($select);
    }

    public function getEubOrderByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $orderBy = "")
    {
        $select = $this->_table->getAdapter()->select();
        $table = $this->_table->info('name');
        $select->from($table, $type);
        $select->where("1 =?", 1);
        $select->where("sm_code = ?", "SZY-EUB");

        if (isset($condition["is_ref_tracking_number"]) && $condition["is_ref_tracking_number"] != "") {
            if ($condition["is_ref_tracking_number"] == "0") {
                $select->where("ref_tracking_number = ?", "");
            } else {
                $select->where("ref_tracking_number <> ?", "");
            }

        }

        /*CONDITION_END*/
        if ('count(*)' == $type) {
            return $this->_table->getAdapter()->fetchOne($select);
        } else {
            if (!empty($orderBy)) {
                $select->order($orderBy);
            }
            if ($pageSize > 0 and $page > 0) {
                $start = ($page - 1) * $pageSize;
                $select->limit($pageSize, $start);
            }
            $sql = $select->__toString();
            return $this->_table->getAdapter()->fetchAll($sql);
        }
    }

    public function getUktlOrderByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $orderBy = "")
    {
        $select = $this->_table->getAdapter()->select();
        $table = $this->_table->info('name');
        $select->from($table, $type);
        $select->where("1 =?", 1);
        $select->where("sm_code = ?", "UKTL");

        if (isset($condition["is_ref_tracking_number"]) && $condition["is_ref_tracking_number"] != "") {
            if ($condition["is_ref_tracking_number"] == "0") {
                $select->where("ref_tracking_number = ?", "");
            } else {
                $select->where("ref_tracking_number <> ?", "");
            }

        }

        /*CONDITION_END*/
        if ('count(*)' == $type) {
            return $this->_table->getAdapter()->fetchOne($select);
        } else {
            if (!empty($orderBy)) {
                $select->order($orderBy);
            }
            if ($pageSize > 0 and $page > 0) {
                $start = ($page - 1) * $pageSize;
                $select->limit($pageSize, $start);
            }
            $sql = $select->__toString();
            return $this->_table->getAdapter()->fetchAll($sql);
        }
    }

    public function getEtkOrderByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $orderBy = "")
    {
        $select = $this->_table->getAdapter()->select();
        $table = $this->_table->info('name');
        $select->from($table, $type);
        $select->where("1 =?", 1);
        $select->where("sm_code = ?", "SZY-ETK");

        if (isset($condition["is_ref_tracking_number"]) && $condition["is_ref_tracking_number"] != "") {
            if ($condition["is_ref_tracking_number"] == "0") {
                $select->where("ref_tracking_number = ?", "");
            } else {
                $select->where("ref_tracking_number <> ?", "");
            }

        }

        /*CONDITION_END*/
        if ('count(*)' == $type) {
            return $this->_table->getAdapter()->fetchOne($select);
        } else {
            if (!empty($orderBy)) {
                $select->order($orderBy);
            }
            if ($pageSize > 0 and $page > 0) {
                $start = ($page - 1) * $pageSize;
                $select->limit($pageSize, $start);
            }
            $sql = $select->__toString();
            return $this->_table->getAdapter()->fetchAll($sql);
        }
    }

    public function getInnerJionShiporderCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $orderBy = "", $limit = '0')
    {
        $select = $this->_table->getAdapter()->select();
        $table = $this->_table->info('name');
        $select->from($table, $type);
        $select->joinLeft('ship_order', 'orders.order_id=ship_order.order_id', array('so_weight', 'tracking_number', 'so_vol_weight', 'so_fee_weight', 'so_length', 'so_width', 'so_height'));
        $select->joinInner('order_address_book', 'orders.order_id=order_address_book.order_id', 'oab_country_id');
        $select->joinLeft('order_operation_time', 'order_operation_time.order_id=orders.order_id', array('process_time', 'pack_time', 'ship_time', 'cutoff_time'));
        /* $select->joinInner('ship_order_detail','orders.order_id=ship_order_detail.order_id',array('sod_length','sod_width','sod_height'));*/
        $select->where('1=?', '1');
        $select->where('order_address_book.oab_type=?', '0');
        if (isset($condition["o_or_r_code"]) && $condition["o_or_r_code"] != "") {
            $select->where("orders.order_code in(?) or ship_order.tracking_number in(?)", $condition["o_or_r_code"]);
        }
        if ('count(*)' == $type) {
            return $this->_table->getAdapter()->fetchOne($select);
        } else {
            if (!empty($orderBy)) {
                $select->order($orderBy);
            }
            if ($pageSize > 0 and $page > 0) {
                $start = ($page - 1) * $pageSize;
                $select->limit($pageSize, $start);
            }
            $sql = $select->__toString();
            return $this->_table->getAdapter()->fetchAll($sql);
        }
    }

    public function getOrderByProduct($condition = array(), $type = '*', $pageSize = 0, $page = 1, $orderBy = "")
    {
        $select = $this->_table->getAdapter()->select();
        $table = $this->_table->info('name');
        $select->from($table, $type);
        $select->joinInner('order_product', 'order_product.order_id=orders.order_id', array(''));
        $select->where("1 =?", 1);
        if (isset($condition['product_id']) && $condition['product_id'] != '') {
            $select->where("product_id = ?", $condition["product_id"]);
        }
        if (isset($condition['order_status']) && $condition['order_status'] != '') {
            $select->where("order_status in (?)", $condition["order_status"]);
        }
        if ('count(*)' == $type) {
            return $this->_table->getAdapter()->fetchOne($select);
        } else {
            if (!empty($orderBy)) {
                $select->order($orderBy);
            }
            if ($pageSize > 0 and $page > 0) {
                $start = ($page - 1) * $pageSize;
                $select->limit($pageSize, $start);
            }
            $sql = $select->__toString();
            return $this->_table->getAdapter()->fetchAll($sql);
        }
    }
}