<?php
/**
 * PayBatchOrderBatchRemitReqDTOParam
 *
 * 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\Account\Model;

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

/**
 * PayBatchOrderBatchRemitReqDTOParam Class Doc Comment
 *
 * @category Class
 * @description 方法签名第0个参数，请自行修改arg0等参数的名字
 * @package  Yeepay\Yop\Sdk\
 * @author   Swagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */
class PayBatchOrderBatchRemitReqDTOParam implements ModelInterface, ArrayAccess
{
    const DISCRIMINATOR = null;

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

    /**
      * Array of property to type mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerTypes = [
        'appKey' => 'string',
        'saleProductCode' => 'string',
        'initiateMerchantNo' => 'string',
        'merchantNo' => 'string',
        'parentMerchantNo' => 'string',
        'batchNo' => 'string',
        'receiveType' => 'string',
        'detailList' => '\Yeepay\Yop\Sdk\Service\Account\Model\PayBatchOrderRemitDetailDTOParam[]',
        'notifyUrl' => 'string',
        'requestSource' => 'string',
        'firstProductCode' => 'string',
        'secondProductCode' => 'string',
        'thirdProductCode' => 'string',
        'extInfoDTO' => '\Yeepay\Yop\Sdk\Service\Account\Model\PayBatchOrderBatchRemitExtInfoDTOParam',
        'skipErrorDetail' => 'bool'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      *
      * @var string[]
      */
    protected static $swaggerFormats = [
        'appKey' => null,
        'saleProductCode' => null,
        'initiateMerchantNo' => null,
        'merchantNo' => null,
        'parentMerchantNo' => null,
        'batchNo' => null,
        'receiveType' => null,
        'detailList' => null,
        'notifyUrl' => null,
        'requestSource' => null,
        'firstProductCode' => null,
        'secondProductCode' => null,
        'thirdProductCode' => null,
        'extInfoDTO' => null,
        'skipErrorDetail' => 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 = [
        'appKey' => 'appKey',
        'saleProductCode' => 'saleProductCode',
        'initiateMerchantNo' => 'initiateMerchantNo',
        'merchantNo' => 'merchantNo',
        'parentMerchantNo' => 'parentMerchantNo',
        'batchNo' => 'batchNo',
        'receiveType' => 'receiveType',
        'detailList' => 'detailList',
        'notifyUrl' => 'notifyUrl',
        'requestSource' => 'requestSource',
        'firstProductCode' => 'firstProductCode',
        'secondProductCode' => 'secondProductCode',
        'thirdProductCode' => 'thirdProductCode',
        'extInfoDTO' => 'extInfoDTO',
        'skipErrorDetail' => 'skipErrorDetail'
    ];

    /**
     * Array of attributes to setter functions (for deserialization of responses)
     *
     * @var string[]
     */
    protected static $setters = [
        'appKey' => 'setAppKey',
        'saleProductCode' => 'setSaleProductCode',
        'initiateMerchantNo' => 'setInitiateMerchantNo',
        'merchantNo' => 'setMerchantNo',
        'parentMerchantNo' => 'setParentMerchantNo',
        'batchNo' => 'setBatchNo',
        'receiveType' => 'setReceiveType',
        'detailList' => 'setDetailList',
        'notifyUrl' => 'setNotifyUrl',
        'requestSource' => 'setRequestSource',
        'firstProductCode' => 'setFirstProductCode',
        'secondProductCode' => 'setSecondProductCode',
        'thirdProductCode' => 'setThirdProductCode',
        'extInfoDTO' => 'setExtInfoDTO',
        'skipErrorDetail' => 'setSkipErrorDetail'
    ];

    /**
     * Array of attributes to getter functions (for serialization of requests)
     *
     * @var string[]
     */
    protected static $getters = [
        'appKey' => 'getAppKey',
        'saleProductCode' => 'getSaleProductCode',
        'initiateMerchantNo' => 'getInitiateMerchantNo',
        'merchantNo' => 'getMerchantNo',
        'parentMerchantNo' => 'getParentMerchantNo',
        'batchNo' => 'getBatchNo',
        'receiveType' => 'getReceiveType',
        'detailList' => 'getDetailList',
        'notifyUrl' => 'getNotifyUrl',
        'requestSource' => 'getRequestSource',
        'firstProductCode' => 'getFirstProductCode',
        'secondProductCode' => 'getSecondProductCode',
        'thirdProductCode' => 'getThirdProductCode',
        'extInfoDTO' => 'getExtInfoDTO',
        'skipErrorDetail' => 'getSkipErrorDetail'
    ];

    /**
     * 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['appKey'] = isset($data['appKey']) ? $data['appKey'] : null;
        $this->container['saleProductCode'] = isset($data['saleProductCode']) ? $data['saleProductCode'] : null;
        $this->container['initiateMerchantNo'] = isset($data['initiateMerchantNo']) ? $data['initiateMerchantNo'] : null;
        $this->container['merchantNo'] = isset($data['merchantNo']) ? $data['merchantNo'] : null;
        $this->container['parentMerchantNo'] = isset($data['parentMerchantNo']) ? $data['parentMerchantNo'] : null;
        $this->container['batchNo'] = isset($data['batchNo']) ? $data['batchNo'] : null;
        $this->container['receiveType'] = isset($data['receiveType']) ? $data['receiveType'] : null;
        $this->container['detailList'] = isset($data['detailList']) ? $data['detailList'] : null;
        $this->container['notifyUrl'] = isset($data['notifyUrl']) ? $data['notifyUrl'] : null;
        $this->container['requestSource'] = isset($data['requestSource']) ? $data['requestSource'] : null;
        $this->container['firstProductCode'] = isset($data['firstProductCode']) ? $data['firstProductCode'] : null;
        $this->container['secondProductCode'] = isset($data['secondProductCode']) ? $data['secondProductCode'] : null;
        $this->container['thirdProductCode'] = isset($data['thirdProductCode']) ? $data['thirdProductCode'] : null;
        $this->container['extInfoDTO'] = isset($data['extInfoDTO']) ? $data['extInfoDTO'] : null;
        $this->container['skipErrorDetail'] = isset($data['skipErrorDetail']) ? $data['skipErrorDetail'] : null;
    }

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

        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 appKey
     *
     * @return string
     */
    public function getAppKey()
    {
        return $this->container['appKey'];
    }

    /**
     * Sets appKey
     *
     * @param string $appKey appKey
     *
     * @return $this
     */
    public function setAppKey($appKey)
    {
        $this->container['appKey'] = $appKey;

        return $this;
    }

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

    /**
     * Sets saleProductCode
     *
     * @param string $saleProductCode saleProductCode
     *
     * @return $this
     */
    public function setSaleProductCode($saleProductCode)
    {
        $this->container['saleProductCode'] = $saleProductCode;

        return $this;
    }

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

    /**
     * Sets initiateMerchantNo
     *
     * @param string $initiateMerchantNo initiateMerchantNo
     *
     * @return $this
     */
    public function setInitiateMerchantNo($initiateMerchantNo)
    {
        $this->container['initiateMerchantNo'] = $initiateMerchantNo;

        return $this;
    }

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

    /**
     * Sets merchantNo
     *
     * @param string $merchantNo merchantNo
     *
     * @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 parentMerchantNo
     *
     * @return $this
     */
    public function setParentMerchantNo($parentMerchantNo)
    {
        $this->container['parentMerchantNo'] = $parentMerchantNo;

        return $this;
    }

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

    /**
     * Sets batchNo
     *
     * @param string $batchNo batchNo
     *
     * @return $this
     */
    public function setBatchNo($batchNo)
    {
        $this->container['batchNo'] = $batchNo;

        return $this;
    }

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

    /**
     * Sets receiveType
     *
     * @param string $receiveType receiveType
     *
     * @return $this
     */
    public function setReceiveType($receiveType)
    {
        $this->container['receiveType'] = $receiveType;

        return $this;
    }

    /**
     * Gets detailList
     *
     * @return \Yeepay\Yop\Sdk\Service\Account\Model\PayBatchOrderRemitDetailDTOParam[]
     */
    public function getDetailList()
    {
        return $this->container['detailList'];
    }

    /**
     * Sets detailList
     *
     * @param \Yeepay\Yop\Sdk\Service\Account\Model\PayBatchOrderRemitDetailDTOParam[] $detailList detailList
     *
     * @return $this
     */
    public function setDetailList($detailList)
    {
        $this->container['detailList'] = $detailList;

        return $this;
    }

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

    /**
     * Sets notifyUrl
     *
     * @param string $notifyUrl notifyUrl
     *
     * @return $this
     */
    public function setNotifyUrl($notifyUrl)
    {
        $this->container['notifyUrl'] = $notifyUrl;

        return $this;
    }

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

    /**
     * Sets requestSource
     *
     * @param string $requestSource requestSource
     *
     * @return $this
     */
    public function setRequestSource($requestSource)
    {
        $this->container['requestSource'] = $requestSource;

        return $this;
    }

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

    /**
     * Sets firstProductCode
     *
     * @param string $firstProductCode firstProductCode
     *
     * @return $this
     */
    public function setFirstProductCode($firstProductCode)
    {
        $this->container['firstProductCode'] = $firstProductCode;

        return $this;
    }

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

    /**
     * Sets secondProductCode
     *
     * @param string $secondProductCode secondProductCode
     *
     * @return $this
     */
    public function setSecondProductCode($secondProductCode)
    {
        $this->container['secondProductCode'] = $secondProductCode;

        return $this;
    }

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

    /**
     * Sets thirdProductCode
     *
     * @param string $thirdProductCode thirdProductCode
     *
     * @return $this
     */
    public function setThirdProductCode($thirdProductCode)
    {
        $this->container['thirdProductCode'] = $thirdProductCode;

        return $this;
    }

    /**
     * Gets extInfoDTO
     *
     * @return \Yeepay\Yop\Sdk\Service\Account\Model\PayBatchOrderBatchRemitExtInfoDTOParam
     */
    public function getExtInfoDTO()
    {
        return $this->container['extInfoDTO'];
    }

    /**
     * Sets extInfoDTO
     *
     * @param \Yeepay\Yop\Sdk\Service\Account\Model\PayBatchOrderBatchRemitExtInfoDTOParam $extInfoDTO extInfoDTO
     *
     * @return $this
     */
    public function setExtInfoDTO($extInfoDTO)
    {
        $this->container['extInfoDTO'] = $extInfoDTO;

        return $this;
    }

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

    /**
     * Sets skipErrorDetail
     *
     * @param bool $skipErrorDetail skipErrorDetail
     *
     * @return $this
     */
    public function setSkipErrorDetail($skipErrorDetail)
    {
        $this->container['skipErrorDetail'] = $skipErrorDetail;

        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));
    }
}


