<?php
/**
 * Created by PhpStorm.
 * User: boyer
 * Date: 2020/8/21
 * Time: 17:35
 */
class Api_Inv_Xml{
    protected $InvtHeadType;
    protected $InvtListType =[];
    protected $InvtCbecBill =[];
    protected $OperCusRegCode='4419661005';//操作卡的海关十位
    public static $RcvgdEtpsno='4419661005';//申报企业海关编码
    protected $DelcareFlag = 0;
    protected $EtpsInnerInvtNo='';
    public function setInvtHeadType(Api_Inv_InvtHeadType $headType){
        $this->InvtHeadType = $headType;
    }
    public function addInvtListType(Api_Inv_InvtListType $listType){
        $this->InvtListType[]=$listType;
    }
    public function addInvtCbecBill(Api_Inv_InvtCbecBillType $listType){
        $this->InvtCbecBill[]=$listType;
    }
    public function setEtpsInnerInvtNo($invtNo){
        $this->EtpsInnerInvtNo = $invtNo;
    }
    /**
     * Note:设置直接申报
     * User: Yao
     * Date: 2021/6/3
     * Time: 17:33
     */
    public function setDelcareFlag($flag = 0){
        if($flag!=0 &&$flag!=1){
            throw new Exception('是否申报只能设置0或1');
        }
        $this->DelcareFlag = $flag;
    }
    /**
     * Note:生成报文
     * User: Yao
     * Date: 2020/8/21
     * Time: 18:14
     * @return mixed
     */
    public function toXml(){
        $data=[
                'BussinessData'=>[
                    'InvtMessage'=>[
                        'InvtHeadType'=>$this->InvtHeadType,
                        'InvtListType'=>$this->InvtListType,
                        'SysId'=>'Z7',
                        'OperCusRegCode'=>$this->OperCusRegCode,
                    ],
                    'DelcareFlag'=>$this->DelcareFlag,
                ]
        ];
        if(!empty($this->InvtCbecBill)){
            $data['BussinessData']['InvtMessage']['InvtCbecBill'] = $this->InvtCbecBill;
        }
        if($this->EtpsInnerInvtNo){
            $data['BussinessData']['InvtMessage']['EtpsInnerInvtNo'] = $this->EtpsInnerInvtNo;
        }

        $xmlArray = $this->arrayToData($data);
        return  Common_ArrayToXml::convert($xmlArray,array(
            'rootElementName'=>'DataInfo',
            '_attributes'=>array(
                'version'=>'1.0'
            ),

        ),
            true,
            'UTF-8',
            '1.0',
            [
                'formatOutput' => false,
                'encoding'=>'UTF-8'
            ]
        );
    }
    private function arrayToData($data){
        $return = array();
        foreach ($data as $key=>$value){
            if(is_array($value)){
                $return[$key] = $this->arrayToData($value);
            }elseif(is_object($value)){
                $return[$key] = $value->toArray();
            }else{
                $return[$key] = $value;
            }
        }
        return $return;
    }
}