<?php
/**
 * CinemaOrderRequestDTO
 *
 * PHP version 5
 *
 * @category Class
 * @package  Yeepay\Yop\Sdk\
 * @author   Swagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */

/**
 * 旅游资源
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * OpenAPI spec version: 1.0
 * 
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 * Swagger Codegen version: 3.0.13
 */

/**
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen
 * Do not edit the class manually.
 */

namespace Yeepay\Yop\Sdk\Service\TravelResources\Model;

use \ArrayAccess;
use Yeepay\Yop\Sdk\Model\ModelInterface;
use Yeepay\Yop\Sdk\Utils\ObjectSerializer;

/**
 * CinemaOrderRequestDTO Class Doc Comment
 *
 * @category Class
 * @description 电影票订单请求参数
 * @package  Yeepay\Yop\Sdk\
 * @author   Swagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */
class CinemaOrderRequestDTO implements ModelInterface, ArrayAccess
{
    const DISCRIMINATOR = null;

    /**
      * The original name of the model.
      *
      * @var string
      */
    protected static $swaggerModelName = 'CinemaOrderRequestDTO';

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerTypes = [
        'seatsCount' => 'int',
        'mobile' => 'string',
        'supplierChannel' => 'string',
        'acceptAdjust' => 'bool',
        'seats' => 'string',
        'showId' => 'int',
        'drawMode' => 'int',
        'complateNotifyUrl' => 'string',
        'platformUniqueId' => 'string',
        'platformIdAccountInfo' => 'string',
        'merchantNo' => 'string',
        'parentMerchantNo' => 'string',
        'merchantRequestNo' => 'string',
        'parentMerchantRequestNo' => 'string',
        'orderAmount' => 'float'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerFormats = [
        'seatsCount' => 'int32',
        'mobile' => null,
        'supplierChannel' => null,
        'acceptAdjust' => null,
        'seats' => null,
        'showId' => 'int64',
        'drawMode' => 'int32',
        'complateNotifyUrl' => 'notify-url',
        'platformUniqueId' => null,
        'platformIdAccountInfo' => null,
        'merchantNo' => null,
        'parentMerchantNo' => null,
        'merchantRequestNo' => null,
        'parentMerchantRequestNo' => null,
        'orderAmount' => null
    ];

    /**
     * Array of property to type mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function swaggerTypes()
    {
        return self::$swaggerTypes;
    }

    /**
     * Array of property to format mappings. Used for (de)serialization
     *
     * @return array
     */
    public static function swaggerFormats()
    {
        return self::$swaggerFormats;
    }

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @var string[]
     */
    protected static $attributeMap = [
        'seatsCount' => 'seatsCount',
        'mobile' => 'mobile',
        'supplierChannel' => 'supplierChannel',
        'acceptAdjust' => 'acceptAdjust',
        'seats' => 'seats',
        'showId' => 'showId',
        'drawMode' => 'drawMode',
        'complateNotifyUrl' => 'complateNotifyUrl',
        'platformUniqueId' => 'platformUniqueId',
        'platformIdAccountInfo' => 'platformIdAccountInfo',
        'merchantNo' => 'merchantNo',
        'parentMerchantNo' => 'parentMerchantNo',
        'merchantRequestNo' => 'merchantRequestNo',
        'parentMerchantRequestNo' => 'parentMerchantRequestNo',
        'orderAmount' => 'orderAmount'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'seatsCount' => 'setSeatsCount',
        'mobile' => 'setMobile',
        'supplierChannel' => 'setSupplierChannel',
        'acceptAdjust' => 'setAcceptAdjust',
        'seats' => 'setSeats',
        'showId' => 'setShowId',
        'drawMode' => 'setDrawMode',
        'complateNotifyUrl' => 'setComplateNotifyUrl',
        'platformUniqueId' => 'setPlatformUniqueId',
        'platformIdAccountInfo' => 'setPlatformIdAccountInfo',
        'merchantNo' => 'setMerchantNo',
        'parentMerchantNo' => 'setParentMerchantNo',
        'merchantRequestNo' => 'setMerchantRequestNo',
        'parentMerchantRequestNo' => 'setParentMerchantRequestNo',
        'orderAmount' => 'setOrderAmount'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'seatsCount' => 'getSeatsCount',
        'mobile' => 'getMobile',
        'supplierChannel' => 'getSupplierChannel',
        'acceptAdjust' => 'getAcceptAdjust',
        'seats' => 'getSeats',
        'showId' => 'getShowId',
        'drawMode' => 'getDrawMode',
        'complateNotifyUrl' => 'getComplateNotifyUrl',
        'platformUniqueId' => 'getPlatformUniqueId',
        'platformIdAccountInfo' => 'getPlatformIdAccountInfo',
        'merchantNo' => 'getMerchantNo',
        'parentMerchantNo' => 'getParentMerchantNo',
        'merchantRequestNo' => 'getMerchantRequestNo',
        'parentMerchantRequestNo' => 'getParentMerchantRequestNo',
        'orderAmount' => 'getOrderAmount'
    ];

    /**
     * Array of attributes where the key is the local name,
     * and the value is the original name
     *
     * @return array
     */
    public static function attributeMap()
    {
        return self::$attributeMap;
    }

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @return array
     */
    public static function setters()
    {
        return self::$setters;
    }

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @return array
     */
    public static function getters()
    {
        return self::$getters;
    }

    /**
     * The original name of the model.
     *
     * @return string
     */
    public function getModelName()
    {
        return self::$swaggerModelName;
    }

    

    

    /**
     * Associative array for storing property values
     *
     * @var mixed[]
     */
    protected $container = [];

    /**
     * Constructor
     *
     * @param mixed[] $data Associated array of property values
     *                      initializing the model
     */
    public function __construct(array $data = null)
    {
        $this->container['seatsCount'] = isset($data['seatsCount']) ? $data['seatsCount'] : null;
        $this->container['mobile'] = isset($data['mobile']) ? $data['mobile'] : null;
        $this->container['supplierChannel'] = isset($data['supplierChannel']) ? $data['supplierChannel'] : null;
        $this->container['acceptAdjust'] = isset($data['acceptAdjust']) ? $data['acceptAdjust'] : null;
        $this->container['seats'] = isset($data['seats']) ? $data['seats'] : null;
        $this->container['showId'] = isset($data['showId']) ? $data['showId'] : null;
        $this->container['drawMode'] = isset($data['drawMode']) ? $data['drawMode'] : null;
        $this->container['complateNotifyUrl'] = isset($data['complateNotifyUrl']) ? $data['complateNotifyUrl'] : null;
        $this->container['platformUniqueId'] = isset($data['platformUniqueId']) ? $data['platformUniqueId'] : null;
        $this->container['platformIdAccountInfo'] = isset($data['platformIdAccountInfo']) ? $data['platformIdAccountInfo'] : null;
        $this->container['merchantNo'] = isset($data['merchantNo']) ? $data['merchantNo'] : null;
        $this->container['parentMerchantNo'] = isset($data['parentMerchantNo']) ? $data['parentMerchantNo'] : null;
        $this->container['merchantRequestNo'] = isset($data['merchantRequestNo']) ? $data['merchantRequestNo'] : null;
        $this->container['parentMerchantRequestNo'] = isset($data['parentMerchantRequestNo']) ? $data['parentMerchantRequestNo'] : null;
        $this->container['orderAmount'] = isset($data['orderAmount']) ? $data['orderAmount'] : null;
    }

    /**
     * Show all the invalid properties with reasons.
     *
     * @return array invalid properties with reasons
     */
    public function listInvalidProperties()
    {
        $invalidProperties = [];

        if ($this->container['seatsCount'] === null) {
            $invalidProperties[] = "'seatsCount' can't be null";
        }
        if ($this->container['supplierChannel'] === null) {
            $invalidProperties[] = "'supplierChannel' can't be null";
        }
        if ($this->container['acceptAdjust'] === null) {
            $invalidProperties[] = "'acceptAdjust' can't be null";
        }
        if ($this->container['seats'] === null) {
            $invalidProperties[] = "'seats' can't be null";
        }
        if ($this->container['showId'] === null) {
            $invalidProperties[] = "'showId' can't be null";
        }
        if ($this->container['drawMode'] === null) {
            $invalidProperties[] = "'drawMode' can't be null";
        }
        if ($this->container['platformIdAccountInfo'] === null) {
            $invalidProperties[] = "'platformIdAccountInfo' can't be null";
        }
        if ($this->container['merchantNo'] === null) {
            $invalidProperties[] = "'merchantNo' can't be null";
        }
        if ($this->container['parentMerchantNo'] === null) {
            $invalidProperties[] = "'parentMerchantNo' can't be null";
        }
        if ($this->container['merchantRequestNo'] === null) {
            $invalidProperties[] = "'merchantRequestNo' can't be null";
        }
        return $invalidProperties;
    }

    /**
     * Validate all the properties in the model
     * return true if all passed
     *
     * @return bool True if all properties are valid
     */
    public function valid()
    {
        return count($this->listInvalidProperties()) === 0;
    }


    /**
     * Gets seatsCount
     *
     * @return int
     */
    public function getSeatsCount()
    {
        return $this->container['seatsCount'];
    }

    /**
     * Sets seatsCount
     *
     * @param int $seatsCount <p>座位数量</p>
     *
     * @return $this
     */
    public function setSeatsCount($seatsCount)
    {
        $this->container['seatsCount'] = $seatsCount;

        return $this;
    }

    /**
     * Gets mobile
     *
     * @return string
     */
    public function getMobile()
    {
        return $this->container['mobile'];
    }

    /**
     * Sets mobile
     *
     * @param string $mobile <p>手机号</p>
     *
     * @return $this
     */
    public function setMobile($mobile)
    {
        $this->container['mobile'] = $mobile;

        return $this;
    }

    /**
     * Gets supplierChannel
     *
     * @return string
     */
    public function getSupplierChannel()
    {
        return $this->container['supplierChannel'];
    }

    /**
     * Sets supplierChannel
     *
     * @param string $supplierChannel <p>供应商编码</p>
     *
     * @return $this
     */
    public function setSupplierChannel($supplierChannel)
    {
        $this->container['supplierChannel'] = $supplierChannel;

        return $this;
    }

    /**
     * Gets acceptAdjust
     *
     * @return bool
     */
    public function getAcceptAdjust()
    {
        return $this->container['acceptAdjust'];
    }

    /**
     * Sets acceptAdjust
     *
     * @param bool $acceptAdjust <pre>是否接受调座</pre>
     *
     * @return $this
     */
    public function setAcceptAdjust($acceptAdjust)
    {
        $this->container['acceptAdjust'] = $acceptAdjust;

        return $this;
    }

    /**
     * Gets seats
     *
     * @return string
     */
    public function getSeats()
    {
        return $this->container['seats'];
    }

    /**
     * Sets seats
     *
     * @param string $seats <pre>原始座位id，多个座位用英文,号分割</pre>
     *
     * @return $this
     */
    public function setSeats($seats)
    {
        $this->container['seats'] = $seats;

        return $this;
    }

    /**
     * Gets showId
     *
     * @return int
     */
    public function getShowId()
    {
        return $this->container['showId'];
    }

    /**
     * Sets showId
     *
     * @param int $showId <pre>场次id</pre>
     *
     * @return $this
     */
    public function setShowId($showId)
    {
        $this->container['showId'] = $showId;

        return $this;
    }

    /**
     * Gets drawMode
     *
     * @return int
     */
    public function getDrawMode()
    {
        return $this->container['drawMode'];
    }

    /**
     * Sets drawMode
     *
     * @param int $drawMode <pre>0:特惠出票 5:快速出票</pre>
     *
     * @return $this
     */
    public function setDrawMode($drawMode)
    {
        $this->container['drawMode'] = $drawMode;

        return $this;
    }

    /**
     * Gets complateNotifyUrl
     *
     * @return string
     */
    public function getComplateNotifyUrl()
    {
        return $this->container['complateNotifyUrl'];
    }

    /**
     * Sets complateNotifyUrl
     *
     * @param string $complateNotifyUrl <pre>订单完成通知地址：订单发货成功、订单取消、订单已完成<a class=\"json_link\" href=\"https://wwww.yeepay.com/\" target=\"_blank\" rel=\"noopener\">https://wwww.yeepay.com</a></pre>
     *
     * @return $this
     */
    public function setComplateNotifyUrl($complateNotifyUrl)
    {
        $this->container['complateNotifyUrl'] = $complateNotifyUrl;

        return $this;
    }

    /**
     * Gets platformUniqueId
     *
     * @return string
     */
    public function getPlatformUniqueId()
    {
        return $this->container['platformUniqueId'];
    }

    /**
     * Sets platformUniqueId
     *
     * @param string $platformUniqueId <pre>平台用户唯一标识，<br />不传则会使用一个统一的平台用户来作为订单用户</pre>
     *
     * @return $this
     */
    public function setPlatformUniqueId($platformUniqueId)
    {
        $this->container['platformUniqueId'] = $platformUniqueId;

        return $this;
    }

    /**
     * Gets platformIdAccountInfo
     *
     * @return string
     */
    public function getPlatformIdAccountInfo()
    {
        return $this->container['platformIdAccountInfo'];
    }

    /**
     * Sets platformIdAccountInfo
     *
     * @param string $platformIdAccountInfo <pre>供应方平台给采购方分配的账号信息。<br />platformId与secret要拼接起来使用<br />aes加密后传递，aes key在对接时找易宝技术支持</pre> <pre>加密方式：<br />platformId=123&amp;secret=abc <br />将拼接的字符串直接使用aes加密</pre>
     *
     * @return $this
     */
    public function setPlatformIdAccountInfo($platformIdAccountInfo)
    {
        $this->container['platformIdAccountInfo'] = $platformIdAccountInfo;

        return $this;
    }

    /**
     * Gets merchantNo
     *
     * @return string
     */
    public function getMerchantNo()
    {
        return $this->container['merchantNo'];
    }

    /**
     * Sets merchantNo
     *
     * @param string $merchantNo <p>业务商编</p>
     *
     * @return $this
     */
    public function setMerchantNo($merchantNo)
    {
        $this->container['merchantNo'] = $merchantNo;

        return $this;
    }

    /**
     * Gets parentMerchantNo
     *
     * @return string
     */
    public function getParentMerchantNo()
    {
        return $this->container['parentMerchantNo'];
    }

    /**
     * Sets parentMerchantNo
     *
     * @param string $parentMerchantNo <p>请求方商编</p>
     *
     * @return $this
     */
    public function setParentMerchantNo($parentMerchantNo)
    {
        $this->container['parentMerchantNo'] = $parentMerchantNo;

        return $this;
    }

    /**
     * Gets merchantRequestNo
     *
     * @return string
     */
    public function getMerchantRequestNo()
    {
        return $this->container['merchantRequestNo'];
    }

    /**
     * Sets merchantRequestNo
     *
     * @param string $merchantRequestNo <p>商户订单号</p>
     *
     * @return $this
     */
    public function setMerchantRequestNo($merchantRequestNo)
    {
        $this->container['merchantRequestNo'] = $merchantRequestNo;

        return $this;
    }

    /**
     * Gets parentMerchantRequestNo
     *
     * @return string
     */
    public function getParentMerchantRequestNo()
    {
        return $this->container['parentMerchantRequestNo'];
    }

    /**
     * Sets parentMerchantRequestNo
     *
     * @param string $parentMerchantRequestNo <pre>请求方订单号</pre>
     *
     * @return $this
     */
    public function setParentMerchantRequestNo($parentMerchantRequestNo)
    {
        $this->container['parentMerchantRequestNo'] = $parentMerchantRequestNo;

        return $this;
    }

    /**
     * Gets orderAmount
     *
     * @return float
     */
    public function getOrderAmount()
    {
        return $this->container['orderAmount'];
    }

    /**
     * Sets orderAmount
     *
     * @param float $orderAmount <pre>订单金额，保留2位小数。</pre> <p>如果传入金额和资源方生成的订单金额不一致则会报错</p>
     *
     * @return $this
     */
    public function setOrderAmount($orderAmount)
    {
        $this->container['orderAmount'] = $orderAmount;

        return $this;
    }
    /**
     * Returns true if offset exists. False otherwise.
     *
     * @param integer $offset Offset
     *
     * @return boolean
     */
    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }

    /**
     * Gets offset.
     *
     * @param integer $offset Offset
     *
     * @return mixed
     */
    public function offsetGet($offset)
    {
        return isset($this->container[$offset]) ? $this->container[$offset] : null;
    }

    /**
     * Sets value based on offset.
     *
     * @param integer $offset Offset
     * @param mixed   $value  Value to be set
     *
     * @return void
     */
    public function offsetSet($offset, $value)
    {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    /**
     * Unsets offset.
     *
     * @param integer $offset Offset
     *
     * @return void
     */
    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }

    /**
     * Gets the string presentation of the object
     *
     * @return string
     */
    public function __toString()
    {
        if (defined('JSON_PRETTY_PRINT')) { // use JSON pretty print
            return json_encode(
                ObjectSerializer::sanitizeForSerialization($this),
                JSON_PRETTY_PRINT
            );
        }

        return json_encode(ObjectSerializer::sanitizeForSerialization($this));
    }
}


