<?php
/**
 * @author william-fan 
 * @todo 订单批量上传类
 */
class Service_OrderUpload{
	/**
	 * @author wiliam-fan
	 * @todo 读取EXCEL文件数据  
	 */
	public static function getXLSData($uploadFile,$field){
		$customerAuth = new Zend_Session_Namespace("customerAuth");

		$customer	= $customerAuth->data;
		$customerId = $customer['id'];
		//print_r($customer);
		//exit('sss');
		$path = APPLICATION_PATH.'/../data/orderupload/';
		$path.= $customerId;
		if(!file_exists($path)){
			if(!mkdir($path,0777,true)){
				$result = array("ask"=>0,"message"=>"上传文件失败失败",'error'=>array('上传目录不存在创建文件目录失败'));
				return $result;
			}
		}
		$config = array();
		$config['upload_path']		= $path;
		$config['allowed_types']	= 'xls|xlsx|csv';
		$config['max_size']			= '10000';
		$config['encrypt_name']		= true;
		$upload	= new Common_UploadFile($config);
		$upload->set_upload_path($path);
		$uploadResult = $upload->do_upload($_FILES,$field);
		if ( ! $uploadResult ){
			$result['ask'] = '0';
			$result['message'] = '上传文件失败';
			$result['error'] =  $upload->display_errors();
			return $result;
			exit;
		}
		$resultArray = $upload->data();
		$full_path = $resultArray['full_path'];
		if(empty($resultArray) || empty($full_path)){
			$result = array("ask"=>0,"message"=>"上传文件失败失败",'error'=>array('数据不存在'));
			return $result;
			exit;
		}
		switch(strtolower($resultArray['file_ext'])){
			case ".xls":
			case ".xlsx":
				$resultArray = Common_Upload::readEXCEL($full_path);
				break;
			case ".csv":
				$resultArray = Common_Upload::readCSV($full_path);
				break;
			default:
				$resultArray = array();
				break;
		}
		/* var_dump($resultArray);
		var_dump($uploadResult);
		exit; */
		if(empty($resultArray) || !is_array($resultArray)){
			$result = array("ask"=>0,"message"=>"文件内容不符合格式或数据为空.",'error'=>array());
			//echo json_encode($result);
			//exit;
		}
		/* if(empty($resultArray) || !is_array($resultArray)){
			$result = array("ask"=>0,"message"=>"文件内容不符合格式或数据为空.",'error'=>array());
			echo json_encode($result);
			exit;
		} */
		@unlink($full_path);
		return $resultArray;
	}
	/**
	 * @author william-fan
	 * @todo 用于处理excel文件返回成有效的数组
	 */
	public static function getDataArr($rows, $is_vertical = FALSE){
		//echo "<pre>";
		//print_r($rows);
		$orderRows = array();
		$referenceArr = array();
		$refTrackingArr = array();

    // SKU竖排处理，转换为跟横排的格式，套用现有的处理逻辑
    if ($is_vertical) {
      $tempRowData = array();

      foreach ($rows as $key => $rowData) {
        // 数据过滤，若有交易订单号，则提取并按交易订单号重新整理数据
        if ($key >= 1 && '' !== trim($rowData[7])) {
          $tempRowData[trim($rowData[7])][] = $rowData;
          unset($rows[$key]);
        }
      }
      foreach ($tempRowData as $key => $rowData) {
        // 同一个交易订单号有多条SKU数据，需要过滤相同的SKU，以首次出现的为准
        if (($tempCount = count($rowData)) > 1) {
          $tempSkuData = array();

          // 过滤相同的SKU，以第一次出现为准
          foreach ($rowData as $skuKey => $skuRow) {
       
              $tempSkuData[] = array(
                trim($skuRow[27]),
                trim($skuRow[28]),
                trim($skuRow[29]),
                trim($skuRow[30]),
		        trim($skuRow[31]),
              );
            
          }
          // 合并产品SKU
          if (count($tempSkuData) > 1) {
            $skuNext = FALSE;
            foreach ($tempSkuData as $skuKey => $skuRow) {
              if (FALSE === $skuNext) {
                $skuNext = TRUE;
                continue;
              }
              $tempRowData[$key][0][] = $skuRow[0];
              $tempRowData[$key][0][] = $skuRow[1];
              $tempRowData[$key][0][] = $skuRow[2];
              $tempRowData[$key][0][] = $skuRow[3];
              $tempRowData[$key][0][] = $skuRow[4];
            }
          }
        }
        $rows[] = $tempRowData[$key][0];
      }
    }

		foreach ($rows as $key=>$rowData){
			//print_r($key);
			if($key>=1){
				$orderRow=self::TransformData($rowData,$referenceArr,$refTrackingArr);
				$referenceArr[] = $rowData[5];
				$orderRows[] = $orderRow;
				$sm_code = $orderRow['sm_code'];
				$sm_code = trim(strtoupper($sm_code));
				$refTracking = trim($rowData[2]);
				if($refTracking!='' ){
					/* if(!isset($refTrackingArr[$sm_code])){
						$refTrackingArr[$sm_code] = array($refTracking);
					}else{
						$oldref = $refTrackingArr[$sm_code];
						$oldref[] = $rowData[2];
						$refTrackingArr[$sm_code] = $oldref;
					} */
					if(!in_array($refTracking, $refTrackingArr)){
						$refTrackingArr[] = $refTracking;
					}
				}
				/* if($sm_code!='' && $refTracking!='' ){
					if(!isset($refTrackingArr[$sm_code])){
						$refTrackingArr[$sm_code] = array($refTracking);
					}else{
						$oldref = $refTrackingArr[$sm_code];
						$oldref[] = $rowData[2];
						$refTrackingArr[$sm_code] = $oldref;
					}
				} */
			}
		}
		//echo "</pre>";
		return $orderRows; 
		//exit;
	}
	/**
	 * @author william-fan
	 * @todo 用于转换一行的订单数据
	 */
	public static function TransformData($rowData,$referenceArr,$refTrackingArr){
		/* var_dump($rowData);
		return; */
		//var_dump($rowData);
		$customerAuth = new Zend_Session_Namespace("customerAuth");
		$customer	= $customerAuth->data;
		$customerId = $customer['id'];
		if(!empty($rowData)){
			
			$orderRow = array(
				'customer_id'=>$customerId,
				'customer_code'=>$customer['code'],
				'warehouse_id'=>'0',
				'warehouse_code'=>'',	
				'order_type'=>'0', //订单类型
				'order_type_name'=>'普通',
				'sm_code'=>'',
				'reference_no'=>'',
				'oab_firstname'=>'',
				'oab_lastname'=>'',
				'oab_company'=>'',
				'oab_country_id'=>'',
				'oab_country_name'=>'',	
				'oab_postcode'=>'',
				'oab_state'=>'',
				'oab_city'=>'',
				'oab_street_address1'=>'',
				'oab_street_address2'=>'',
				'oab_phone'=>'',
				'oab_email'=>'',
				'change_order'=>'', //是否换单
				'change_order_name'=> '',
				'ref_tracking_number'=>'',
                                'delivery_address'=> '', //派送地址
				'remark'=>'',
				'grossWt'=>'0.00',
				'charge'=>'0.00',
				'order_mode_type'=>'1',	//订单模式
				'ref_tracking_number' => '', //服务商单号为空
				'is_valid'=>'1',//是否可用
                                'buyInsurance'=>0,
                                'insuranceRate'=>1,
                                'insuranceCode'=>'',
				'order_product'=>array(),
				'error'=>array(),											
			);
			

            //订单模式
            $order_mode_name = ''; //订单模型
            if(isset($rowData[0]) && $rowData[0]!= ''){
                $order_mode_name = $rowData[0]; //订单模型
            }
            $change_order_name = '';
            if(isset($rowData[1]) && $rowData[1]!= ''){
                $change_order_name = $rowData[1]; //是否换单(是否自有渠道)
            }
            
            $ref_tracking_number = '';
            if(isset($rowData[2]) && $rowData[2]!= ''){
                $ref_tracking_number     = trim($rowData[2]); //服务商单号
            }

            $warehouse_code = ''; //仓库
            if(isset($rowData[3]) && $rowData[3]!= ''){
                $warehouse_code = trim($rowData[3]); //交货仓库
            }
            
            $order_type_name    = ''; //类型：0:普通 ;1:转仓;2:退货
            if(isset($rowData[4]) && $rowData[4]!= ''){
                $order_type_name         = $rowData[4]; //运输方式
            }
            
            $oab_country_name     = ''; //收件人国家
            if(isset($rowData[5]) && $rowData[5]!= ''){
                $oab_country_name     = trim($rowData[5]); //收件人国家
            }
            
            $sm_code         = ''; //运输方式
            if(isset($rowData[6]) && $rowData[6]!= ''){
                $smArr = explode(" ",trim($rowData[6]),2);
				//$sm_code		 = trim($rowData[6]); //运输方式
                $sm_code = $smArr[0];
			}
			
			$reference_no		 = ''; //客户参考号
			if(isset($rowData[7]) && $rowData[7]!= ''){
				$reference_no		 = trim($rowData[7]); //客户参考号
			}
			
			$firstName	 = ''; //收件人姓名
			if(isset($rowData[8]) && $rowData[8]!= ''){
				$firstName	 = trim($rowData[8]); //收件人名
			}
			
			/* $lastName		 = ''; //收件人姓
			if(isset($rowData[9]) && $rowData[9]!= ''){
				$lastName		 = $rowData[9]; //收件人姓
			} */
			
			/* $companyName		 = '';//收件人公司名
			if(isset($rowData[10]) && $rowData[10]!= ''){
				$companyName		 = $rowData[10];//收件人公司名
			} */
			$companyName = ''; //收件人公司名
			if(isset($rowData[9]) && $rowData[9]!= ''){
				$companyName	 = trim($rowData[9]);//收件人公司名
			}
						
			$oab_state		 = '';//收件人州\区域
			if(isset($rowData[10]) && $rowData[10]!= ''){
				$oab_state		 = trim($rowData[10]);//收件人州\区域
			}
			
			$oab_city		 = '';//收件人城市
			if(isset($rowData[11]) && $rowData[11]!= ''){
				$oab_city		 = trim($rowData[11]);//收件人城市
			}
			
			$oab_postcode			 = '';//收件人邮编
			if(isset($rowData[12]) && $rowData[12]!= ''){
				$oab_postcode			 = trim($rowData[12]);//收件人邮编
			}
			
			$oab_street_address1		 = '';//收件人地址1
			if(isset($rowData[13]) && $rowData[13]!= ''){
				$oab_street_address1		 = trim($rowData[13]);//收件人地址1
			}
			
			$oab_street_address2			 = '';//收件人地址2
			if(isset($rowData[14]) && $rowData[14]!= ''){
				$oab_street_address2 = trim($rowData[14]);//收件人地址2
			}
			
			$oab_phone			 = '';//收件人电话
			if(isset($rowData[15]) && $rowData[15]!= ''){
				$oab_phone			 = trim($rowData[15]);//成交总价
			}
			
			$oab_email			 = '';//收件人电子邮件
			if(isset($rowData[16]) && $rowData[16]!= ''){
				$oab_email			 = trim($rowData[16]);//收件人电子邮件
			}
			
			
						
			$currency_code			 = '';//币种
			if(isset($rowData[17]) && $rowData[17]!= ''){
				$currency_code = $rowData[17];//币种
			}
			$charge			 = '';//成交总价
			if(isset($rowData[18]) && $rowData[18]!= ''){
				$charge			 = $rowData[18];//成交总价
			}
            $delivery_address = '';
            if(isset($rowData[19])&&$rowData[19]!= ''){
                $delivery_address = $rowData[19]; //派送地址
            }
            $isFba = '';
            if (isset($rowData[20]) && $rowData[20] != '') {
                $isFba = $rowData[20];
            }
            $isFbaTax = '';
            if (isset($rowData[21]) && $rowData[21] != '') {
                $isFbaTax = $rowData[21];
            }
            $isPod = '';
            if (isset($rowData[22]) && $rowData[22] != '') {
                $isPod = $rowData[22];
            }
			$remark		 = '';//备注
			if(isset($rowData[23]) && $rowData[23]!= ''){
				$remark		 = $rowData[23];//备注
			}
		    $buyInsurance = '否';
            if(isset($rowData[24]) && $rowData[24]!== ''){
                $buyInsurance		 = $rowData[24];//备注
            }

            $insuranceName = '';
            if(isset($rowData[25]) && $rowData[25] != ''){
                $insuranceName		 = $rowData[25];//备注
            }
            $insuranceRate = "";
            if(isset($rowData[26]) && $rowData[26] != ''){
                $insuranceRate		 = $rowData[26];//备注
            }
            $orderRow['insurance_rate'] = $insuranceRate;

            //echo $address1;
            $orderProducts	 = self::getProduct($rowData);
            $orderRow = self::checkOrderMode($order_mode_name,$orderRow);
            $orderRow = self::checkChangeOrder($change_order_name, $orderRow);

            $orderRow = self::checkwarehouse($warehouse_code, $orderRow);
            $orderRow = self::checkOrderType($order_type_name, $orderRow);
            $orderRow = self::checkCountry($oab_country_name,$orderRow);
            $orderRow = self::checkSmCode($sm_code, $orderRow);
            $orderRow = self::checkReferenceNo($reference_no, $orderRow);

            $orderRow = self::checkFirstName($firstName, $orderRow);
            //$orderRow = self::checkLastName($lastName, $orderRow);
            $orderRow = self::checkCompany($companyName, $orderRow);
            $orderRow = self::checkState($oab_state, $orderRow);
            $orderRow = self::checkCity($oab_city, $orderRow);
            $orderRow = self::checkPostcode($oab_postcode, $orderRow);
            $orderRow = self::checkAddress1($oab_street_address1, $orderRow);
            $orderRow = self::checkAddress2($oab_street_address2, $orderRow);
            $orderRow = self::checkAddressAll($oab_street_address1, $oab_street_address2, $orderRow);
            $orderRow = self::checkTelephone($oab_phone, $orderRow);
            $orderRow = self::checkEmail($oab_email, $orderRow);

            $orderRow = self::checkCurrency($currency_code, $orderRow);
            $orderRow = self::checkCharge($charge, $orderRow);

            $orderRow = self::checkDeliveryAddress($delivery_address, $orderRow);
            $orderRow = self::checkIsFba($isFba, $orderRow);
            $orderRow = self::checkIsFbaTax($isFbaTax, $orderRow);
            $orderRow = self::checkIsPod($isPod, $orderRow);
            $orderRow = self::checkRemark($remark, $orderRow);

            $orderRow = self::checkRefTrackingNumber($ref_tracking_number, $orderRow);
            $orderRow = self::checkRefTrackDocument($ref_tracking_number, $refTrackingArr, $orderRow);
            //$orderRow = self::checkRefTrack($ref_tracking_number, $reference_no, $orderRow);

            $orderRow = self::checkProduct($orderProducts, $orderRow);
            $orderRow = self::checkProductDeclareValue($orderRow);
            $orderRow = self::checkHkdhl($orderRow);
            $orderRow = self::checkInsurance($buyInsurance,$insuranceName,$orderRow);
            //$orderRow = self::checkReferenceDocument($reference_no,$referenceArr,$orderRow);
            //print_r($orderRow);
            return $orderRow;

            //print_r($orderProduct);
        }else{

        }
    }
    /**
     * @author gilbert
     * @todo 根据模板列的key来处理excel文件返回成有效的数组
     */
    public static function getDataArrByKey($rows, $is_vertical = FALSE){
        //echo "<pre>";
        //print_r($rows);
        $orderRows = array();
        $referenceArr = array();
        $refTrackingArr = array();
        //获取模板的列
        $init = array(
            'template'=>'order',
            'type'=> ( $is_vertical ? 1 : 2 ),
        );
        $obj = new Common_ExcelTemplate( $init );
        $columns = $obj->getOrderColumns();
        $columnsPosition = array_keys( $columns );
        $serviceCodeIndex = array_search( 'serviceCode', $columnsPosition);
        if( $serviceCodeIndex === false ) {
            return array();
        }

        // SKU竖排处理，转换为跟横排的格式，套用现有的处理逻辑
        if ($is_vertical) {
            $tempRowData = array();

            $transCodeIndex = array_search( 'transCode', $columnsPosition);
            $skuIndex = array_search( 'sku', $columnsPosition);
            $skuEnNameIndex = array_search( 'skuEnName', $columnsPosition);
            $priceIndex = array_search( 'DeclareUnitPrice', $columnsPosition);
            $tPriceIndex = array_search( 'TargetDeclareUnitPrice', $columnsPosition);
            $qtyIndex = array_search( 'qty', $columnsPosition);

            if( $transCodeIndex === false || $skuIndex === false || $skuEnNameIndex === false || $priceIndex === false
                || $tPriceIndex === false || $qtyIndex === false) {
                return array();
            }
            foreach ($rows as $key => $rowData) {
                // 数据过滤，若有交易订单号，则提取并按交易订单号重新整理数据
                if ($key >= 1 && '' !== trim($rowData[ $transCodeIndex ])) {
                    $tempRowData[trim($rowData[ $transCodeIndex ])][] = $rowData;
                    unset($rows[$key]);
                }
            }

            foreach ($tempRowData as $key => $rowData) {
                // 同一个交易订单号有多条SKU数据，需要过滤相同的SKU，以首次出现的为准
                if (($tempCount = count($rowData)) > 1) {
                    $tempSkuData = array();

                    // 过滤相同的SKU，以第一次出现为准
                    $skuSeq = array( $skuIndex, $skuEnNameIndex, $priceIndex, $tPriceIndex, $qtyIndex );
                    sort( $skuSeq );
                    foreach ($rowData as $skuKey => $skuRow) {
                        $tmpSKU = array();
                        foreach( $skuSeq as $seq) {
                            $tmpSKU[] = $skuRow[ $seq ];
                        }
                        $tempSkuData[] = $tmpSKU;

                    }
                    // 合并产品SKU
                    if (count($tempSkuData) > 1) {
                        $skuNext = FALSE;
                        foreach ($tempSkuData as $skuKey => $skuRow) {
                            if (FALSE === $skuNext) {
                                $skuNext = TRUE;
                                continue;
                            }
                            $tempRowData[$key][0][] = $skuRow[0];
                            $tempRowData[$key][0][] = $skuRow[1];
                            $tempRowData[$key][0][] = $skuRow[2];
                            $tempRowData[$key][0][] = $skuRow[3];
                            $tempRowData[$key][0][] = $skuRow[4];
                        }
                    }
                }
                $rows[] = $tempRowData[$key][0];
            }
        }
        foreach ($rows as $key=>$rowData){
            //print_r($key);
            if($key>=1){
                $orderRow=self::TransformDataByKey($rowData,$referenceArr,$refTrackingArr, $is_vertical );
                $referenceArr[] = array();//$rowData[ 5 ];
                $orderRows[] = $orderRow;
                $sm_code = $orderRow['sm_code'];
                $sm_code = trim(strtoupper($sm_code));
                $refTracking = trim($rowData[ $serviceCodeIndex ]);
                if($refTracking!='' ){
                    /* if(!isset($refTrackingArr[$sm_code])){
                        $refTrackingArr[$sm_code] = array($refTracking);
                    }else{
                        $oldref = $refTrackingArr[$sm_code];
                        $oldref[] = $rowData[2];
                        $refTrackingArr[$sm_code] = $oldref;
                    } */
                    if(!in_array($refTracking, $refTrackingArr)){
                        $refTrackingArr[] = $refTracking;
                    }
                }
                /* if($sm_code!='' && $refTracking!='' ){
                    if(!isset($refTrackingArr[$sm_code])){
                        $refTrackingArr[$sm_code] = array($refTracking);
                    }else{
                        $oldref = $refTrackingArr[$sm_code];
                        $oldref[] = $rowData[2];
                        $refTrackingArr[$sm_code] = $oldref;
                    }
                } */
            }
        }
        //echo "</pre>";
        return $orderRows;
        //exit;
    }
	/**
	 * @author gilbert
	 * @todo 用于转换一行的订单数据
	 */
	public static function TransformDataByKey($rowData,$referenceArr,$refTrackingArr, $is_vertical){
		/* var_dump($rowData);
		return; */
		//var_dump($rowData);
		$customerAuth = new Zend_Session_Namespace("customerAuth");
		$customer	= $customerAuth->data;
		$customerId = $customer['id'];
		if(!empty($rowData)){
            $init = array(
                'template'=>'order',
                'type'=> ( $is_vertical ? 1 : 2 ),
            );
            $obj = new Common_ExcelTemplate( $init );
            $columns = $obj->getOrderColumns();
            $columnsPosition = array_keys( $columns );

			$orderRow = array(
				'customer_id'=>$customerId,
				'customer_code'=>$customer['code'],
				'warehouse_id'=>'0',
				'warehouse_code'=>'',	
				'order_type'=>'0', //订单类型
				'order_type_name'=>'普通',
				'sm_code'=>'',
				'reference_no'=>'',
				'oab_firstname'=>'',
				'oab_lastname'=>'',
				'oab_company'=>'',
				'oab_country_id'=>'',
				'oab_country_name'=>'',	
				'oab_postcode'=>'',
				'oab_state'=>'',
				'oab_city'=>'',
				'oab_street_address1'=>'',
				'oab_street_address2'=>'',
				'oab_phone'=>'',
				'oab_email'=>'',
				'change_order'=>'', //是否换单
				'change_order_name'=> '',
				'ref_tracking_number'=>'',
               'delivery_address'=> '', //派送地址
				'remark'=>'',
				'grossWt'=>'0.00',
				'charge'=>'0.00',
				'order_mode_type'=>'1',	//订单模式
				'ref_tracking_number' => '', //服务商单号为空
				'is_valid'=>'1',//是否可用
                'buyInsurance'=>0,
                'insuranceRate'=>1,
                'insuranceCode'=>'',
                'notifyTel'=>'',
                'notifyContact'=>'',
                'notifyAddr'=>'',
                'insuredAccount'=>'',
                'isDGD'=>'',
                'destination'=>'',
                'hsDescription'=>'',
				'order_product'=>array(),
				'error'=>array(),											
			);
            $order_mode_name = ''; //订单模式
            $change_order_name = '';//是否换单(是否自有渠道)
            $ref_tracking_number = '';
            $warehouse_code = ''; //仓库
            $order_type_name    = ''; //类型：0:普通 ;1:转仓;2:退货
            $oab_country_name     = ''; //收件人国家
            $sm_code         = ''; //运输方式
            $reference_no		 = ''; //客户参考号
            $firstName	 = ''; //收件人姓名
            $companyName = ''; //收件人公司名
            $oab_state		 = '';//收件人州\区域
            $oab_city		 = '';//收件人城市
            $oab_postcode			 = '';//收件人邮编
            $oab_street_address1		 = '';//收件人地址1
            $oab_street_address2			 = '';//收件人地址2
            $oab_phone			 = '';//收件人电话
            $oab_email			 = '';//收件人电子邮件
            $currency_code			 = '';//币种
            $charge			 = '';//成交总价
            $delivery_address = '';
            $isFba = '';
            $isFbaTax = '';
            $isPod = '';
            $remark		 = '';//备注
            $buyInsurance = '否';
            $insuranceName = '';
            $insuranceRate = '';
            $notifyTel = '';
            $notifyContact = '';
            $notifyAddr = '';
            $insuredAccount = '';
            $isDGD = '';
            $destination = '';
            $hsDescription = '';
            $skuKey = '';
            $dispatchNotice = '';
            $guarantee = '';
			foreach( $columnsPosition as $key => $value) {
                switch( $value ) {
                    case 'mode':
                        $order_mode_name = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'selfChannel':
                        $change_order_name = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'serviceCode':
                        $ref_tracking_number = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'warehouse':
                        $warehouse_code = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'type':
                        $order_type_name = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'consigneeCountry':
                        $oab_country_name = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'shipMethod':
                        $sm_code = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        if( $sm_code !== '' ) {
                            $smArr = explode(" ",trim( $sm_code ), 2 );
                            $sm_code = $smArr[0];
                        }
                        break;
                    case 'transCode':
                        $reference_no = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'consigneeName':
                        $firstName = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'consigneeCompany':
                        $companyName = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'consigneeState':
                        $oab_state = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'consigneeCity':
                        $oab_city = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'consigneePostcode':
                        $oab_postcode = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'consigneeAddress1':
                        $oab_street_address1 = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'consigneeAddress2':
                        $oab_street_address2 = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'consigneeTel':
                        $oab_phone = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'consigneeEmail':
                        $oab_email = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'currency':
                        $currency_code = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'totalDealPrice':
                        $charge = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'HKDispatchAddress':
                        $delivery_address = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'FBA':
                        $isFba = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'destinationDuty':
                        $isFbaTax = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'POD':
                        $isPod = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'remark':
                        $remark = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'buyInsurance':
                        $buyInsurance = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '否';
                        break;
                    case 'insuranceName':
                        $insuranceName = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'insuranceRate':
                        $insuranceRate = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'notifyTel':
                        $notifyTel = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'notifyContact':
                        $notifyContact = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'notifyAddr':
                        $notifyAddr = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'insuredAccount':
                        $insuredAccount = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'isDGD':
                        $isDGD = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'destination':
                        $destination = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        if( $destination !== '' ) {
                            $destinationArr = explode(" ",trim( $destination ), 2 );
                            $destination = $destinationArr[0];
                        }
                        break;
                    case 'hsDescription':
                        $hsDescription = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'sku':
                        $skuKey = $key;
                        break;
                    case 'dispatch_notice':
                        $dispatchNotice = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                    case 'guarantee':
                        $guarantee = isset( $rowData[ $key ] ) ?  trim( $rowData[ $key ] ) : '';
                        break;
                }
            }

            $orderRow['insurance_rate'] = $insuranceRate;
            $orderRow['shippingInfo'] = array(
                'notifyTel' => $notifyTel,
                'notifyContact' => $notifyContact,
                'notifyAddr' => $notifyAddr,
                'insuredAccount' => $insuredAccount,
                'isDGD' => $isDGD,
                'destination' => $destination,
                'hsDescription' => $hsDescription,
            );
            //派送通知服务、保障服务 
            if(($sm_code == "BH-DHL-HKDELIVERY")){
                if((($dispatchNotice == '') || ($guarantee == ''))){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = '运输方式为BH-DHL-HKDELIVERY时，派送通知服务、保障服务选项为必填';
                    $orderRow['error'] = $error;
                }else{
                    $orderRow['dispatch_notice'] = ($dispatchNotice == '是') ? '1' : '0';
                    $orderRow['guarantee'] = ($guarantee == '是') ? '1' : '0';
                }
            }else{
                $orderRow['dispatch_notice'] = $orderRow['guarantee'] = '0';
            }

			//echo $address1;
			$orderProducts	 = self::getProductByKey( $rowData, $skuKey);
			$orderRow = self::checkOrderMode($order_mode_name,$orderRow);
			$orderRow = self::checkChangeOrder($change_order_name, $orderRow);
			
			$orderRow = self::checkwarehouse($warehouse_code, $orderRow);
			$orderRow = self::checkOrderType($order_type_name, $orderRow);
			$orderRow = self::checkCountry($oab_country_name,$orderRow);
			$orderRow = self::checkSmCode($sm_code, $orderRow);
			$orderRow = self::checkReferenceNo($reference_no, $orderRow);
			
			$orderRow = self::checkFirstName($firstName, $orderRow);
			//$orderRow = self::checkLastName($lastName, $orderRow);
			$orderRow = self::checkCompany($companyName, $orderRow);
			$orderRow = self::checkState($oab_state, $orderRow);
			$orderRow = self::checkCity($oab_city, $orderRow);
			$orderRow = self::checkPostcode($oab_postcode, $orderRow);
			$orderRow = self::checkAddress1($oab_street_address1, $orderRow);
			$orderRow = self::checkAddress2($oab_street_address2, $orderRow);
			$orderRow = self::checkAddressAll($oab_street_address1, $oab_street_address2, $orderRow);
			$orderRow = self::checkTelephone($oab_phone, $orderRow);
			$orderRow = self::checkEmail($oab_email, $orderRow);
			
			$orderRow = self::checkCurrency($currency_code, $orderRow);
			$orderRow = self::checkCharge($charge, $orderRow);
			
            $orderRow = self::checkDeliveryAddress($delivery_address, $orderRow);
            $orderRow = self::checkIsFba($isFba, $orderRow);
            $orderRow = self::checkIsFbaTax($isFbaTax, $orderRow);
            $orderRow = self::checkIsPod($isPod, $orderRow);
			$orderRow = self::checkRemark($remark, $orderRow);
			
			$orderRow = self::checkRefTrackingNumber($ref_tracking_number, $orderRow);
			$orderRow = self::checkRefTrackDocument($ref_tracking_number, $refTrackingArr, $orderRow);
			//$orderRow = self::checkRefTrack($ref_tracking_number, $reference_no, $orderRow);
			
			$orderRow = self::checkProduct($orderProducts, $orderRow);
      $orderRow = self::checkProductDeclareValue($orderRow);
      $orderRow = self::checkHkdhl($orderRow);
            $orderRow = self::checkInsurance($buyInsurance,$insuranceName,$orderRow);
            $orderRow = self::checkShipInfo( $orderRow );
			//$orderRow = self::checkReferenceDocument($reference_no,$referenceArr,$orderRow);
			//print_r($orderRow);
			return $orderRow;

			//print_r($orderProduct);
		}else{
			
		}
	}
	/**
	 * @author william-fan
	 * @todo 得到产品信息
	 */
	public static function getProduct($rowData){
		//print_r($rowData);
		$productArr = array_slice($rowData,27);
		if($productArr){
            //count()
			/*foreach($productArr as $key=>$value){
				if($key>0){
					if(empty($value)){
						if(isset($productArr[$key-1]) && isset($productArr[$key+1]) && $productArr[$key-1]!='' &&  $productArr[$key+1]!=''){
							//
						}else{
							//unset($productArr[$key]);
						}
					}
				}
			}*/
            return self::splitProduct($productArr);
		}
		//$productArr = array_slice(18, array_values($rowData));
		return array_values($productArr);
	}
    /**
     * @author gilbert
     * @todo 得到产品信息
     */
    public static function getProductByKey($rowData,$key){
        //print_r($rowData);
        $productArr = array_slice($rowData,$key);
        if($productArr){
            //count()
			/*foreach($productArr as $key=>$value){
				if($key>0){
					if(empty($value)){
						if(isset($productArr[$key-1]) && isset($productArr[$key+1]) && $productArr[$key-1]!='' &&  $productArr[$key+1]!=''){
							//
						}else{
							//unset($productArr[$key]);
						}
					}
				}
			}*/
            return self::splitProduct($productArr);
		}
		//$productArr = array_slice(18, array_values($rowData));
		return array_values($productArr);
	}
    /**
     * @author william-fan
     * @todo split product
     */
    public static function splitProduct($productArr){
        $trunks = array_chunk($productArr,5);
        foreach($trunks as $key=>$arr){
            $count = count($arr);
            $xiaohui = true;
            for($i=0;$i<$count;$i++){
                if($arr[$i]!=''){
                    $xiaohui =false;
                    break;
                }
            }
            if($xiaohui){
                unset($trunks[$key]);
            }
        }
        $products = array();
        foreach($trunks as $key=>$arr){
            foreach($arr as $ko=>$val){
                $products[] = $val;
            }
        }
        return $products;
    }
	/**
	 * @author william-fan
	 * @todo 用于设置订单模式
	 */
	public static function checkOrderMode($order_mode_name,$orderRow){
		if($order_mode_name!=''){
			if($order_mode_name=='集货模式'){
				$orderRow['order_mode_type'] = '1';
			}elseif ($order_mode_name=='备货模式'){
				$orderRow['order_mode_type'] = '0';
			}else{
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = '订单模式只能有集货模式和备货模式两种';
				$orderRow['error'] = $error;
			}
		}else{
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = '订单模式必须必填';
			$orderRow['error'] = $error;
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 用于设置是否换单
	 */
	public static function checkChangeOrder($change_order_name,$orderRow){
		if($change_order_name!=''){
			if($orderRow['order_mode_type']=='1'){
				//集货模式有是否换单（是否自有渠道）
				if($change_order_name=='是'){
					$orderRow['change_order'] = '0';
				}elseif($change_order_name=='否'){
					$orderRow['change_order'] = '1';
				}else{
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = '是否自有渠道只能输入是/否';
					$orderRow['error'] = $error;
				}
			}
			if($orderRow['order_mode_type']=='0'){
				//备货模式一定换单（不是自有渠道）
				$orderRow['change_order'] = '1';
			}
		}else{
			if($orderRow['order_mode_type']=='1'){
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = '集货模式是否换单必须必填';
				$orderRow['error'] = $error;
			}
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 用于设置设置服务商单号
	 */
	public static function checkRefTrackingNumber($ref_tracking_number,$orderRow){
		if($ref_tracking_number!=''){
			if($orderRow['order_mode_type'] == '1'){
				//集货模式 是否的情况 
				$orderRow['ref_tracking_number'] = $ref_tracking_number;
				if($orderRow['ref_tracking_number']!=''&&$orderRow['sm_code']!=''){
					//验证同一个运输方式的服务商单号的唯一性
					 $refTrackCondition = array(
							//'sm_code'=>$orderRow['sm_code'],
							'ref_tracking_number'=>$orderRow['ref_tracking_number'],
              'except_order_status_delete' => TRUE,
							//'order_status_arr'=>array('1','2','3','4','5','6','7','8','9','10','11','12','13')
					);
					$numberRefTrack = Service_Orders::getByCondition($refTrackCondition,'count(*)');
					if($numberRefTrack>0){
						$orderRow['is_valid'] = '0';
						$error = $orderRow['error'];
						$error[] = '服务商单号重复';
						$orderRow['error'] = $error;
					}else{
						$orderRow['ref_tracking_number'] = $ref_tracking_number;
					}
					/* $refTrackCondition = array(
							'reference_no'=>$orderRow['reference_no'],
							'ref_tracking_number'=>$ref_tracking_number,
					);
					$numberRefTrack = Service_Orders::getByCondition($refTrackCondition,'count(*)');
					if($numberRefTrack>0){
						$orderRow['is_valid'] = '0';
						$error = $orderRow['error'];
						$error[] = "服务商单号+交易订单号重复";
						$orderRow['error'] = $error;
					}else{
						$orderRow['ref_tracking_number'] = $ref_tracking_number;
					} */
				}
			}
		}else{
			if($orderRow['order_mode_type'] == '1' && $orderRow['change_order']=='0'){
				//集货模式  自有渠道
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = '集货模式自有渠道服务商单号必填';
				$orderRow['error'] = $error;
			}
		}
		return $orderRow;
	}
	
	/**
	 * @author william-fan
	 * @todo 用于校验仓库
	 */
	public static function checkwarehouse($warehouse_code,$orderRow){
		if($warehouse_code!=''){
			$warehouse = Service_Warehouse::getByField($warehouse_code,'warehouse_code'); //仓库
			if(!empty($warehouse)){
				$orderRow['warehouse_id'] = $warehouse['warehouse_id'];
				$orderRow['warehouse_code'] = $warehouse_code;
			}else{
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "仓库{$warehouse_code}不存在";
				$orderRow['error'] = $error;
			}
		}else{
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = '仓库必填';
			$orderRow['error'] = $error;
		}
		return $orderRow;	
	}
	/**
	 * @author willia-fan
	 * @todo 设置订单类型
	 */
	public static function checkOrderType($order_type_name,$orderRow){
		if($order_type_name!=''){
			switch($order_type_name){
				case "普通":
					$orderRow['order_type'] = '0';
					$orderRow['order_type_name'] = $order_type_name;
					break;
				case "转仓":
					$orderRow['order_type'] = '1';
					$orderRow['order_type_name'] = $order_type_name;
					break;
				case "退货":
					$orderRow['order_type'] = '2';
					$orderRow['order_type_name'] = $order_type_name;
					break;
				default:
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "订单类型不存在";
					$orderRow['error'] = $error;
			}
		}else{
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = '订单类型必填';
			$orderRow['error'] = $error;
		}
		return $orderRow;
	}
	/**
	 * @author willia-fan
	 * @todo 设置收件人国家
	 */
	public static function checkCountry($oab_country_name,$orderRow){
		$oab_country_name = trim($oab_country_name);
		if($oab_country_name!=''){
			$country_code = substr($oab_country_name, 0,2);
			$country_code = strtoupper($country_code);
			if($country_code=='ES'){
				//ES就默认取西班牙
				$country = Service_Country::getByField('221','country_id');
			}elseif($country_code=='PT'){
				//PT默认取葡萄牙
				$country = Service_Country::getByField('195','country_id');
			}else{
				$country = Service_Country::getByField($country_code,'country_code');
			}
			//$country = Service_Country::getByField($oab_country_name,'country_name');
			if(!empty($country)){
				$orderRow['oab_country_id'] = $country['country_id'];
				$orderRow['oab_country_name'] = $oab_country_name;
                $orderRow['country_code'] = $country['country_code'];
			}else{
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "国家{$country_code}不存在";
				$orderRow['error'] = $error;
			}
		}else{
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = '收件人国家必填';
			$orderRow['error'] = $error;
		}
		return $orderRow;
	}
	/**
	 * @author willia-fan
	 * @todo 设置运输方式
	 */
	public static function checkSmCode($sm_code,$orderRow){
		if($sm_code!=''){
			$shipMethod=Service_ShippingMethod::getByField($sm_code,'sm_code');
			if(empty($shipMethod)){
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "运输方式{$sm_code}不存在";
				$orderRow['error'] = $error;
			}
			if(!empty($shipMethod) && $shipMethod['sm_status']=='0'){
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = '运输方式{$sm_code}已禁用';
				$orderRow['error'] = $error;
			}
			//add by solar
			if($orderRow['order_mode_type'] == '1' && $orderRow['change_order']=='0'){
				//集货模式 是自有渠道
				/* if($sm_code!='Other') {
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = '不换单运输方式只能是Other';
					$orderRow['error'] = $error;
					return $orderRow;
				} */
				//运输方式必须是自有运输渠道的
				if($shipMethod['sm_channel']=='0'){
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = '该运输方式不是自有运输渠道';
					$orderRow['error'] = $error;
					return $orderRow;
				}
			} else{
				//不是自有渠道的运输方式
				/* if($sm_code=='Other') {
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = '要换单运输方式不能是Other';
					$orderRow['error'] = $error;
					return $orderRow;
				} */
				if($shipMethod['sm_channel']=='1'){
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = '你填写的是自有运输渠道的运输方式';
					$orderRow['error'] = $error;
					return $orderRow;
				}
			}
			if($orderRow['order_mode_type'] == '1'){
				$orderRow['sm_code'] = $sm_code;
			}
			//备货模式的才检查国家运输方式
            if($orderRow['order_mode_type'] == '0' || ($orderRow['order_mode_type'] == '1' && $orderRow['change_order']=='1')){
                $countrySmConditon['country_id'] =  $orderRow['oab_country_id'];
                //$countrySmConditon['or_country_id'] = 0;
                $countrySmConditon['sm_code'] = $sm_code;
                $map = Service_SmCountryMap::getByCondition($countrySmConditon, "count(*)");
                if($map){
                    $orderRow['sm_code'] = $sm_code;
                }else{
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = '该国家不支持此运输方式';
                    $orderRow['error'] = $error;
                }
            }
			/*if($orderRow['order_mode_type'] == '0' || ($orderRow['order_mode_type'] == '1' && $orderRow['change_order']=='1')){
//				$countryArr = Common_DataCache::getShipTypeCountryMap();
				$countryId = $orderRow['oab_country_id'];
                                $countrySM = array();                                
                                if($countryId){
                                    $countrySM = Common_DataCache::getShipTypeCountryMapByOabCountryId($countryId);                                    
                                }
				
//				if($countryId){
//					if(isset($countryArr[$countryId])){
//						$countrySM = $countryArr[$countryId];
//					}
//				}
				
				if(!empty($countrySM)){
					$shipTypeAll = $countrySM['ship_type'];
					if(!empty($shipTypeAll)){
						$support = false; //支持该运输方式情况
						foreach ($shipTypeAll as $keys=>$shiptype){
							if(strtoupper($shiptype['sm_code'])==strtoupper($sm_code)){
								$support = true;
								break;
							}
						}
						if($support){
							$orderRow['sm_code'] = $sm_code;
						}else{
							$orderRow['is_valid'] = '0';
							$error = $orderRow['error'];
							$error[] = '该国家不支持此运输方式1';
							$orderRow['error'] = $error;
						}
					}else{
						$orderRow['is_valid'] = '0';
						$error = $orderRow['error'];
						$error[] = '该国家不支持此运输方式2';
						$orderRow['error'] = $error;
					}
				}else{
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = '该国家不支持此运输方式3';
					$orderRow['error'] = $error;
				}	
			}*/
		}else{
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = '运输方式必填';
			$orderRow['error'] = $error;
		}
		return $orderRow;
	}
	/**
	 * @author willia-fan
	 * @todo 设置客户参考号
	 */
	public static function checkReferenceNo($reference_no,$orderRow){
		if($reference_no!=''){
			if(!preg_match("/^[0-9a-zA-Z-_]{1,18}$/",$reference_no)){
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = '交易订单号必须填写，并且是字母数字、横杠、下划线组成并且最多18位.';
				$orderRow['error'] = $error;
			}else{
				$orderRow['reference_no'] = $reference_no;
			}
		}else{
			/*$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = '交易订单号必须填写.';
			$orderRow['error'] = $error;*/
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 用于校验交易订单号
	 */
	/* public static function checkReference($reference_no,$orderRow){
		if("" != $reference_no){
		 	$ordersCount = Service_Orders::getByCondition(array('reference_no'=>$reference_no,'orders_status_arr'=>array(1,2,3,4,6,7,8,9,10,11,12,13)),'count(*)');
		 	$orderRow['reference_no'] = $reference_no;
		 	if($ordersCount>0){
		 		$orderRow['is_valid'] = '0';
		 		$error = $orderRow['error'];
		 		$error[] = "系统已经存在该交易订单号";
		 		$orderRow['error'] = $error;
		 	}else{
		 		$orderRow['reference_no'] = $reference_no;
		 	}
		}
		return $orderRow;
	} */
	/**
	 * @author william-fan
	 * @todo 用于校验姓
	 */
	public static function checkLastName($lastName,$orderRow){
		if($lastName!=''){
			if($orderRow['sm_code']=="UKTL"){
                if(strlen($orderRow['oab_firstname'])>30){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "收件人姓名不能超过30个字符";
                    $orderRow['error'] = $error;
                }
                $orderRow['oab_firstname'] = $lastName;
            }else{
                $orderRow['oab_firstname'] = $lastName;
            }			
		}else{
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = "姓氏必须填写";
			$orderRow['error'] = $error;
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 用于校验名
	 */
	public static function checkFirstName($firstName,$orderRow){
		if($firstName!=''){
            if($orderRow['sm_code']=='HKDHL'||$orderRow['sm_code']=='BH-HKDHL'||$orderRow['sm_code']=='UTK'||$orderRow['sm_code']=='BH-DPD'){
                if(strlen($firstName)<=35){
                    $orderRow['oab_firstname'] = $firstName;
                }else{
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "收件人姓名必须小于35个字符";
                    $orderRow['error'] = $error;
                }
            }else{
                if((mb_strlen($orderRow['oab_firstname']) >= 50) && $orderRow['sm_code'] == 'BH-AZAT-G'){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "收件人姓名必须小于50个字符";
                    $orderRow['error'] = $error;
                }else{
                    $orderRow['oab_firstname'] = $firstName;
                }
            }
			//$orderRow['oab_firstname'] = $firstName;
		}else{
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = "收件人姓名必须填写";
			$orderRow['error'] = $error;
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 用于校验公司名称
	 */
	public static function checkCompany($companyName,$orderRow){
		if($companyName!=''){
			if($orderRow['sm_code']=='HKDHL'||$orderRow['sm_code']=='BH-HKDHL'){
				if(strlen($companyName)<=35){
					$orderRow['oab_company'] = $companyName;
				}else{
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "公司名称必须小于35个字符";
					$orderRow['error'] = $error;
				}
			}elseif($orderRow['sm_code']=='UKTL'){
                if(strlen($companyName)>30){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "公司名称必须小于35个字符";
                    $orderRow['error'] = $error;
                }else{
                    $orderRow['oab_company'] = $companyName;
                }
            }else{
				$orderRow['oab_company'] = $companyName;
			}
		}else{
			/* $orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = "收件人公司名必须填写";
			$orderRow['error'] = $error; */
			$orderRow['oab_company'] = $orderRow['oab_firstname'];
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 用于收件人州/区域名称
	 */
	public static function checkState($oab_state,$orderRow){
        if($orderRow['sm_code']=="SZY-EUB"||$orderRow['sm_code']=='SF-RUPR'||$orderRow['sm_code']=='SF-RUPT' || $orderRow['sm_code'] === '4PX-RU_POST-LINK_RMAIL' || $orderRow['sm_code'] == 'BH-AZAT-G'){
            if($oab_state==''){
                $orderRow['is_valid'] = '0';
                $error = $orderRow['error'];
                $error[] = "收件人州必须填写";
                $orderRow['error'] = $error;
            }else{
                if(($orderRow['sm_code'] == 'BH-AZAT-G') && mb_strlen($oab_state) > 50){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "州/区域最长50字符";
                    $orderRow['error'] = $error;
                }
            }
            $orderRow['oab_state'] = $oab_state;
        }else{
            if($orderRow['oab_country_id']=='253'){
                if($oab_state==''){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "美国的地址收件人州必须填写";
                    $orderRow['error'] = $error;
                }else{
                    if($orderRow['sm_code'] == 'DGM-US'){
                        $filePath = APPLICATION_PATH . '/../data/file/USA-state-validity.xlsx';
                        $fileData = Common_Upload::readEXCEL($filePath);
                        $res      = 0;
                        foreach ($fileData as $k => $v) {
                            if ($k == 0) {
                                continue;
                            }
                            $str = strpos(strtolower($oab_state), strtolower($v[1]));
                            if (is_numeric($str)) {
                                $res = 1;
                                break;
                            }
                        }
                        if (!$res) {
                            $orderRow['is_valid'] = '0';
                            $error = $orderRow['error'];
                            $error[] = "当运输方式为DGM-US，收件人州/区域所填项'{$oab_state}'无效，请填写美国有效州/区域";
                            $orderRow['error'] = $error;
                        }else{
                            $orderRow['oab_state'] = $oab_state;
                        }
                    }else{
                        $orderRow['oab_state'] = $oab_state;
                    }
                }
            }else{
                if($oab_state!=''){
                    $orderRow['oab_state'] = $oab_state;
                }
            }
        }
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 用于校验设置收件人城市
	 */
	public static function checkCity($oab_city,$orderRow){
		if($oab_city!=''){
			switch ($orderRow['sm_code']) {
				case 'UKTL':
					if(strlen($oab_city)>20){
						$orderRow['is_valid'] = '0';
						$error = $orderRow['error'];
						$error[] = "收件人城市长度不得大于20";
						$orderRow['error'] = $error;
					}
				break;
				case 'BH-DPD':
					if(strlen($oab_city)>30){
						$orderRow['is_valid'] = '0';
						$error = $orderRow['error'];
						$error[] = "收件人城市长度不得大于30";
						$orderRow['error'] = $error;
					}
				break;
				case 'BH-AZAT-G':
				    if(mb_strlen($oab_city) > 50){
				        $orderRow['is_valid'] = '0';
				        $error = $orderRow['error'];
				        $error[] = "收件人城市长度不得大于50";
				        $orderRow['error'] = $error;
				    }
				default:break;
			}
            $orderRow['oab_city'] = $oab_city;
            
		}else{
			if($orderRow['sm_code']=='HKDHL'||$orderRow['sm_code']=="SZY-EUB"||$orderRow['sm_code']=='BH-HKDHL'||$orderRow['sm_code']=='SF-RUPR'||$orderRow['sm_code']=='SF-RUPT'||$orderRow['sm_code']=='BH-DPD' || $orderRow['sm_code'] === '4PX-RU_POST-LINK_RMAIL' || $orderRow['sm_code'] =='BH-AZAT-G' || $orderRow['sm_code'] == 'DHL-BH03'){
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "收件人城市必填";
				$orderRow['error'] = $error;
			}
		}
		return $orderRow;
	}
	
	/**
	 * @author william-fan
	 * @todo 设置邮编
	 */
	public static function checkPostcode($oab_postcode,$orderRow){
		if($oab_postcode!=''){
			$orderRow['oab_postcode'] = $oab_postcode;
            if($orderRow['oab_country_id']=='253'&&$orderRow['sm_code']=="SZY-EUB"){
                if(!preg_match("/^[0-9]{5}(\-[0-9]{4}){0,1}+$/", $oab_postcode)){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "邮编格式不正确;正确格式:5位数字+短横线+4位数字或者5位数字";
                    $orderRow['error'] = $error;
                }
            }
            //澳大利亚
            if($orderRow['oab_country_id']=='13'&&$orderRow['sm_code']=="SZY-EUB"){
                if(!preg_match("/^[0-9]{4}+$/",$oab_postcode)){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "邮编格式不正确;正确格式:4位数字";
                    $orderRow['error'] = $error;
                }
            }
            //英国
            if($orderRow['oab_country_id']=='252'&&$orderRow['sm_code']=="SZY-EUB"){
                if(!preg_match("/^[0-9A-Za-z]{2,4}(\s)[0-9A-Za-z]{3}+$/",$oab_postcode)){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "邮编格式不正确;正确格式:2-4位数字或字母+空格+3位数字或字母";
                    $orderRow['error'] = $error;
                }
            }
            //法国、乌克兰
            if(($orderRow['oab_country_id']=='82'||$orderRow['oab_country_id']=='250')&&$orderRow['sm_code']=="SZY-EUB"){
                if(!preg_match("/^[0-9]{5}+$/", $oab_postcode)){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "邮编格式不正确;正确格式:5位数字";
                    $orderRow['error'] = $error;
                }
            }
            //乌克兰
             if($orderRow['oab_country_id']=='250'&&$orderRow['sm_code']=="WG-EUB"){
                if(!preg_match("/^[0-9]{5}+$/", $oab_postcode)){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "邮编格式不正确;正确格式:5位数字";
                    $orderRow['error'] = $error;
                }
            }
            //俄罗斯
             if($orderRow['oab_country_id']=='201'&&in_array($orderRow['sm_code'],array("SZY-EUB",'WG-EUB'))){
                if(!preg_match("/^[0-9]{6}+$/", $oab_postcode)){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "邮编格式不正确;正确格式:6位数字";
                    $orderRow['error'] = $error;
                }
            }
             if($orderRow['sm_code'] === 'BH-HKDHL'){
                                //英国补两位后两位是字母
                        if($orderRow['oab_country_id']=='252'){
                            if(!preg_match('/[A-Z0-9]{3,5}[A-Z]{2}$/',$orderRow['oab_postcode'])){
                                $orderRow['is_valid'] = '0';
                                $error = $orderRow['error'];
                                $error[]='邮编格式为城市邮编+两位大写字母补码';
                                $orderRow['error'] = $error;
                            }
                        }
                        //加拿大 A9A9A9 手动补1位
                       if($orderRow['oab_country_id']=='41'){
                            if(!preg_match('/^([A-Z]{1}[0-9]{1}){3}$/',$orderRow['oab_postcode'])){
                                 $orderRow['is_valid'] = '0';
                                $error = $orderRow['error'];
                                $error[]='邮编格式为城市邮编+一位数字补码';
                                $orderRow['error'] = $error;
                            }
                        }
                        //泽西岛（AA9 9AA，手动补3位）根西岛（AA9 9AA手动补三位）
                        if($orderRow['oab_country_id']=='119'||$orderRow['oab_country_id']=='473'){
                            if(!preg_match('/^[A-Z]{2}[0-9]{2}[A-Z]{2}$/',$orderRow['oab_postcode'])){
                                   $orderRow['is_valid'] = '0';
                                 $error = $orderRow['error'];
                                $error[]='邮编格式为城市邮编+一位数字和两位大写字母补码';
                                 $orderRow['error'] = $error;
                            }
                        }
                }
			//沙特阿拉伯
			if($orderRow['oab_country_id']=='208'&&in_array($orderRow['sm_code'],array("SZY-EUB",'WG-EUB'))){
				if(!preg_match("/^(\d{5}|\d{7}|(\d{5}\-\d{4}))$/", $oab_postcode)){
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "邮编格式不正确;正确格式:5位数字+短横线+4位数字 或 5位数字 或 7位数字";
					$orderRow['error'] = $error;
				}
			}
            if($orderRow['oab_country_id']=="41"&&$orderRow['sm_code']=="SZY-EUB"){
                if(!preg_match("/^[A-Za-z]{1}[0-9]{1}[A-Za-z]{1}(\s){0,1}[0-9]{1}[A-Za-z]{1}[0-9]{1}+$/",$oab_postcode)){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "邮编格式不正确;正确格式:字母+数字+字母+空格+数字+字母+数字或字母+数字+字母+数字+字母+数字";
                    $orderRow['error'] = $error;
                }
            }
            if($orderRow['oab_country_id']=="33"&&$orderRow['sm_code']=="SZY-ETK"){
                if(!preg_match("/^[0-9]{5}(\-[0-9]{3})+$/", $oab_postcode)){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "邮编格式不正确;正确格式:5位数字+短横线+3位数字";
                    $orderRow['error'] = $error;
                }
            }
            //ETK到俄罗斯
            if($orderRow['oab_country_id']=="201"&&$orderRow['sm_code']=="SZY-ETK"){
                if(!preg_match("/^[0-9]{6}+$/", $oab_postcode)){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "邮编格式不正确;正确格式:6位数字";
                    $orderRow['error'] = $error;
                }
            }
            //ETK到白俄罗斯
            if($orderRow['oab_country_id']=="39"&&$orderRow['sm_code']=="SZY-ETK"){
                if(!preg_match("/^[0-9]{6}+$/", $oab_postcode)){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "邮编格式不正确;正确格式:6位数字";
                    $orderRow['error'] = $error;
                }
            }
			/*
            if (in_array($orderRow['sm_code'], array('BH-3H', 'BH-UKECSLTYD', 'BH-UKECSLTRM'))) {
                $pattern = '/^(AB|BT|TD|DD|PH|ZE|KW|HS|IM|JE|GY|DG1[0-6]|G8[34]|KY(9|1[0456])|FK(1[489]|2[01])|IV([1245]|3[0126]|63)|EH(3[5-9]|4[0,2-6])|ML1[12]|PO[34]|KA2[78]|PA([2678]|3[0-8]|4[1-9])|TR2[1-5])/';
                if (preg_match($pattern, $oab_postcode)) {
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "该邮编为偏远地区";
                    $orderRow['error'] = $error;
                }
            }
			*/
            if ($orderRow['sm_code'] == 'BH-CORREOS') {
                $pattern = '/^(5[12]|07|3[58])/';
                if (preg_match($pattern, $oab_postcode)) {
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "该邮编为偏远地区";
                    $orderRow['error'] = $error;
                }
            }
            if ($orderRow['sm_code'] == 'BH-19EURDPDDE') {
                $pattern = '/^(18565|83(209|256)|258(45|49|59|63|69)|259(38|46|80|92|96|99)|264(65|74|86)|265(48|71|79)|26757|2749[89])$/';
                if (preg_match($pattern, $oab_postcode)) {
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "该邮编为偏远地区";
                    $orderRow['error'] = $error;
                }
            }
            if ($orderRow['sm_code'] == 'BH-DAC') {
                $pattern = '/^(3012[1-6]|04027|3013[23]|30135|3014[12]|5703[0-4,6-9]|58012|8007[1,3-7,9]|910(17|23)|98055|0[7-9][\d]{3}|8[7-9][\d]{3}|9[\d]{4})$/';
                if (preg_match($pattern, $oab_postcode)) {
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "该邮编为偏远地区";
                    $orderRow['error'] = $error;
                }
            }
            if ($orderRow['sm_code'] == 'BH-SL018') {
                $pattern = '/^9(7[1-8]|8[4,6-8])/';
                if (preg_match($pattern, $oab_postcode)) {
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "该邮编为偏远地区";
                    $orderRow['error'] = $error;
                }
            }
           if($orderRow['sm_code']=="BH-DPD"){
           $country=Service_Country::getByField($orderRow['oab_country_id'],'country_id');
            if(@!Service_OrderProcess::validatePostcode($country['country_code'],$oab_postcode)){
            		$orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "当前运输方式暂时不支持该国家此邮编的派送";
                    $orderRow['error'] = $error;  	
            	}
               if(strlen($oab_postcode)>9){
                   $orderRow['is_valid'] = '0';
                   $error = $orderRow['error'];
                   $error[] = "邮编长度不能超过9个字符";
                   $orderRow['error'] = $error;
               }
            }
            
            if(($orderRow['sm_code'] == "BH-AZAT-G") && mb_strlen($oab_postcode) >20){
                $orderRow['is_valid'] = '0';
                $error = $orderRow['error'];
                $error[] = "邮编长度不能超过20个字符";
                $orderRow['error'] = $error;
            }
                  if(strlen($oab_postcode)>10){
                   $orderRow['is_valid'] = '0';
                   $error = $orderRow['error'];
                   $error[] = "邮编长度不能超过10个字符";
                   $orderRow['error'] = $error;
					}
					
			 }else{
                if(in_array($orderRow['sm_code'],array('HKDHL',"SZY-EUB",'BH-HKDHL','SF-RUPR','SF-RUPT','BH-DPD','TWPG','TWPP','BH-AZAT-G','DHL-BH03'))){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "收件人邮编必填";
                    $orderRow['error'] = $error;
                }
            }
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 设置校验地址一
	 */
	public static function checkAddress1($oab_street_address1,$orderRow){
		if($oab_street_address1!=''){
            if(($orderRow['sm_code']=="HKDHL"||$orderRow['sm_code']=="BH-HKDHL")&&strlen($oab_street_address1)>35){
                $orderRow['is_valid'] = '0';
                $error = $orderRow['error'];
                $error[] = "收件人地址1长度不能超过35个字符";
                $orderRow['error'] = $error;
            }elseif($orderRow['sm_code']=="UKTL"){				
				if(strlen($oab_street_address1)>30){
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "收件人地址1不能超过30个字符";
					$orderRow['error'] = $error;
				}
				if(strpos($oab_street_address1,",")!== false){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
					$error[] = "{$orderRow['sm_code']}地址1不能有逗号";
                    $orderRow['error'] = $error;
				}							
			}elseif($orderRow['sm_code']=="SZY-EUB"){
                if(strpos($oab_street_address1,"&")!== false){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "{$orderRow['sm_code']}地址1不能有特殊字符&";
                    $orderRow['error'] = $error;
                }
            }elseif($orderRow['sm_code']=="4PX-LYT_GH"){
            	$country_code = substr($orderRow['oab_country_name'], 0,2);
				$country_code = strtoupper($country_code);
				//英国
				if($country_code == 'GB'){
	                if ('1' == preg_match('/(P.O.BOX)|(BFPO)/i', $oab_street_address1)){
			            $orderRow['is_valid'] = '0';
	                    $error = $orderRow['error'];
	                    $error[] = "交易订单号:(".$orderRow['reference_no'].")不提供邮政信箱 (P.O.BOX) 及英军信箱 (BFPO) 地址派送服务，请重新提交";
	                    $orderRow['error'] = $error;
			        }
	            }
	            //德国
	            if($country_code == 'DE'){
	                if ('1' == preg_match('/(P.O.BOX)/i', $oab_street_address1)){
			            $orderRow['is_valid'] = '0';
	                    $error = $orderRow['error'];
	                    $error[] = "交易订单号:(".$orderRow['reference_no'].")不提供邮政信箱 (P.O.BOX) 地址派送服务，请重新提交";
	                    $orderRow['error'] = $error;
			        }
	            }
            }
			$orderRow['oab_street_address1'] = $oab_street_address1;
		}else{
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = "收件人地址1必填";
			$orderRow['error'] = $error;
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 设置地址2
	 */
	public static function checkAddress2($address2,$orderRow){
		if($address2!=''){
            if(($orderRow['sm_code']=="HKDHL"||$orderRow['sm_code']=="BH-HKDHL")&&strlen($address2)>35){
                $orderRow['is_valid'] = '0';
                $error = $orderRow['error'];
                $error[] = "收件人地址2长度不能超过35个字符";
                $orderRow['error'] = $error;
            }elseif($orderRow['sm_code']=="UKTL"){				
                if(strlen($address2)>60){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "收件人地址2不能超过60个字符";
                    $orderRow['error'] = $error;
                }
                if(strpos($address2,",")!== false){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "{$orderRow['sm_code']}地址1不能有逗号";
                    $orderRow['error'] = $error;
                }            
			}elseif($orderRow['sm_code']=="SZY-EUB"){
                if(strpos($address2,"&")!== false){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "{$orderRow['sm_code']}地址2不能有特殊字符&";
                    $orderRow['error'] = $error;
                }
            }elseif($orderRow['sm_code']=="4PX-LYT_GH"){
            	$country_code = substr($orderRow['oab_country_name'], 0,2);
				$country_code = strtoupper($country_code);
				//英国
				if($country_code == 'GB'){
	                if ('1' == preg_match('/(P.O.BOX)|(BFPO)/i', $address2)){
			            $orderRow['is_valid'] = '0';
	                    $error = $orderRow['error'];
	                    $error[] = "交易订单号:(".$orderRow['reference_no'].")不提供邮政信箱 (P.O.BOX) 及英军信箱 (BFPO) 地址派送服务，请重新提交";
	                    $orderRow['error'] = $error;
			        }
	            }
	            //德国
	            if($country_code == 'DE'){
	                if ('1' == preg_match('/(P.O.BOX)/i', $address2)){
			            $orderRow['is_valid'] = '0';
	                    $error = $orderRow['error'];
	                    $error[] = "交易订单号:(".$orderRow['reference_no'].")不提供邮政信箱 (P.O.BOX) 地址派送服务，请重新提交";
	                    $orderRow['error'] = $error;
			        }
	            }
            }
			$orderRow['oab_street_address2'] = $address2;
		}
		return $orderRow;
	}

    public static function checkAddressAll($address1,$address2,$orderRow){
        if($address1!=''){
            if($orderRow['sm_code']=="BH-DPD"&&strlen($address1.$address2)>70){
                $orderRow['is_valid'] = '0';
                $error = $orderRow['error'];
                $error[] = "收件人地址1+地址2不得超过70个字符";
                $orderRow['error'] = $error;
            }
            if(in_array($orderRow['sm_code'],array("TWPG",'TWPP'))&&strlen($address1.$address2)>100){
                $orderRow['is_valid'] = '0';
                $error = $orderRow['error'];
                $error[] = "收件人地址1+地址2不得超过100个字符";
                $orderRow['error'] = $error;
            }
            if ($orderRow['sm_code'] == '4PX-LYT_GH' && $orderRow['oab_country_id'] == 89 && strlen($address1.$address2)>35) {
                $orderRow['is_valid'] = '0';
                $error = $orderRow['error'];
                $error[] = "收件人地址1+地址2不得超过35个字符";
                $orderRow['error'] = $error;
            }
            if (in_array($orderRow['sm_code'], array('4PX-LYT_GH', '4PX-EU_PACKET', '4PX-RU_POST-LINK_RMAIL', '4PX-HKDHL', '4PX-Singapo_SPack_IMAIR', '4PX-SG_ordinary_mail+', '4PX-OZXBTH')) && strlen($address1 . $address2) >= 120) {
                $orderRow['is_valid'] = '0';
                $error = $orderRow['error'];
                $error[] = "收件人地址1+地址2不得超过120个字符";
                $orderRow['error'] = $error;
            }
        }
        return $orderRow;
    }
	/**
	 * @author william-fan
	 * @todo 设置校验电话
	 */
	public static function checkTelephone($oab_phone,$orderRow){
		if($oab_phone!=''){
			if ($orderRow['sm_code'] == 'SF-RUPR' || $orderRow['sm_code'] == 'SF-RUPT') {
                if (!(preg_match("/^[0-9-+\s]{5,}$/", $oab_phone))) {
                	$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
                    $error[] = "收件人电话必须为数字或横杠或者加号或者空格并且至少5位数";
                    $orderRow['error'] = $error;
                }else{
                	$orderRow['oab_phone'] = $oab_phone;
                }
            }elseif(in_array($orderRow['sm_code'],array('TWPG','TWPP','BH-AZAT-G'))){
                if(strlen($orderRow['oab_phone'])>20){
                    $orderRow['is_valid'] = '0';
		$error = $orderRow['error'];
                    $error[] = "收件人电话不能超过20个字符";
                    $orderRow['error'] = $error;
                }else{
                    $orderRow['oab_phone'] = $oab_phone;
                }
            }else{
				if((preg_match('/^([0-9-\/]+)+$/i', $oab_phone))){
					$orderRow['oab_phone'] = $oab_phone;
				}else{
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "电话必须是数字和-和/";
					$orderRow['error'] = $error;
				}
			}
		}else{
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = "收件人电话必填";
			$orderRow['error'] = $error;
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 设置校验电子邮件
	 */
	public static function checkEmail($oab_email,$orderRow){
		if($oab_email!=''){
			if (preg_match("/^[a-zA-Z0-9_\.-]+\@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4}$/i", $oab_email)) {
				$orderRow['oab_email'] = $oab_email;
			}else{
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "Email格式错误";
				$orderRow['error'] = $error;
			}
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 设置备注
	 */
	public static function checkRemark($remark,$orderRow){
		if($remark!=''){
			$orderRow['remark'] = $remark;
		}
		return $orderRow;
	}
    public static function checkIsFba($isFba, $orderRow)
    {
        if ($isFba !== '') {
            if ($isFba == '是') {
                $orderRow['is_fba'] = '1';
            } else if ($isFba == '否') {
                $orderRow['is_fba'] = '0';
            } else {
                $orderRow['is_fba'] = $isFba;
            }
        }else{
            if(in_array($orderRow['sm_code'],array('HKDHL','BH-HKDHL','4PX-HKDHL','DHL-TH'))){
                 $error[] =  '当运输方式为HKDHL、BH-HKDHL、4PX-HKDHL、THL-TH时，是否FBA必填';
             }else{
                 $orderRow['is_fba'] = 0;
             }
        }
        return $orderRow;
    }
    public static function checkIsFbaTax($isFbaTax, $orderRow)
    { 
        if ($isFbaTax !== '') {
            if ($isFbaTax == '预付') {
                $orderRow['is_fba_tax'] = 1;
            } else if ($isFbaTax == '到付') {
                $orderRow['is_fba_tax'] = 0;
            } else {
                $orderRow['is_fba_tax'] = 0;
            }
        }else{
            if((in_array($orderRow['sm_code'], array('HKDHL','BH-HKDHL','4PX-HKDHL','DHL-TH'))) && $orderRow['is_fba']==1){
                if($isFbaTax!=1){
                    $error[] = "当运输方式为HKDHL、BH-HKDHL、4PX-HKDHL、THL-TH时，若其是否FBA为是，则目的地关税自动对应为预付";
                    $orderRow['error'] = $error;
                }
            }
            $orderRow['is_fba_tax'] = 0;
        }
        return $orderRow;
    }
    //批量上传英国的4PX-LYT_GH才需要填pod,其他国家不让填；
    public static function checkIsPod($isPod, $orderRow) {
        $country_code = substr($orderRow['oab_country_name'], 0,2);
         $orderRow['is_pod']=0;
        if ($isPod == '') {
            if ($country_code == 'GB' && $orderRow['sm_code'] == '4PX-LYT_GH') {
                $orderRow['is_valid'] = '0';
                $error = $orderRow['error'];
                $error[] = "POD必填";
                $orderRow['error'] = $error;
            }
        } else {
            if ($country_code == 'GB' && $orderRow['sm_code'] == '4PX-LYT_GH'){
                 if ($isPod == '是') {
                    $orderRow['is_pod'] = 1;
                }
             }
              
        }
        return $orderRow;
    }

	/**
	 * @author william-fan
	 * @todo 设置成交总价
	 */
	public static function checkCharge($charge,$orderRow){
		if($charge!=''){
			if(is_numeric($charge) && $charge>0){
				$orderRow['charge'] = $charge;
			}else{
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "成交总价必须是大于0的数字";
				$orderRow['error'] = $error;
			}
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 设置币种信息
	 */
	public static function checkCurrency($currency_code,$orderRow){
		if($currency_code!=''){
			$currency=Service_Currency::getByField($currency_code,'currency_code');
			if(!empty($currency)){
				$orderRow['currency_code'] = $currency_code;
			}else{
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "币种无效";
				$orderRow['error'] = $error;
			}
                }else{
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "成交币种必填";
                    $orderRow['error'] = $error;
                }
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 用于设置校验产品
	 */
	public static function checkProduct($orderProducts,$orderRow){
		error_reporting(E_ALL);
		$customerAuth = new Zend_Session_Namespace("customerAuth");
		
		$customer	= $customerAuth->data;
		$customerId = $customer['id'];
		
		if(!empty($orderProducts)){
			$skunumber=count($orderProducts);
			if($skunumber%5){
				//不为偶数
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "sku、品名、申报价值、目的海关申报价值、数量必须匹配";
				$orderRow['error'] = $error;
			}else{
				/* foreach ($orderProducts as $){
					
				} */
				$orderSku = array();
				$xuNumber = $skunumber/5; //循环次数
				$productSkuArr = array();
				for($i=0;$i<$xuNumber;$i++){
					$index = $i*5;
					$product_sku = $orderProducts[$index];
					$product_title_en = $orderProducts[$index+1];
					$declare_price = $orderProducts[$index+2]; 
					$purpose_declared_value = $orderProducts[$index+3];
					$product_qty = $orderProducts[$index+4];
					
					
					/* var_dump($product_sku);
					echo '<br/>'; */
					//exit;
					if(empty($product_sku)){
						//sku为空跳过
						continue;
					}
					//$productInfo = Service_Product::getByField($product_sku,'product_sku');
					$condition = array(
						'customer_id'=>$customerId,
						'product_sku'=>$product_sku,	
					);
					$orderInfoAll = Service_Product::getByCondition($condition,'*','',1,1); //取一条
					if(!empty($orderInfoAll)){
						$productInfo = $orderInfoAll[0];
					}else{
						$productInfo = array();
					}
					if(!empty($productInfo)){
						if($productInfo['product_status']=='1'){
							if($productInfo['product_type']!='1'){
								if($productInfo['customer_id']!=$customerId){
									//不是这个客户的产品
									$orderRow['is_valid'] = '0';
									$error = $orderRow['error'];
									$error[] = '产品sku:'.$product_sku."不存在";
									$orderRow['error'] = $error;
								}else{
                                    if (trim($product_title_en) && in_array($orderRow['sm_code'], array('4PX-EU_PACKET','4PX-HKDHL','4PX-LYT_GH','4PX-RU_POST-LINK_RMAIL','4PX-SG_ordinary_mail+','4PX-Singapo_SPack_IMAIR')) && !preg_match("/^[0-9a-zA-Z\- ]+$/", trim($product_title_en))){
                                        $orderRow['is_valid'] = '0';
                                        $error = $orderRow['error'];
                                        $error[] = "英文名称[".$product_title_en."] 只能包含英文字母、数字、空格和 - ";
                                        $orderRow['error'] = $error;
                                    }
                                    $unBettrySmArr = Service_OrderProcess::getUnBatterySm();
                                    //带电池验证
                                    $others = array();
                                    if( $orderRow['sm_code'] == 'DHL-TH') {
                                        $others['state'] = $orderRow['oab_state'];
                                        $others['city'] = $orderRow['oab_city'];
                                    }
                                    if( $productInfo['with_battery'] == 1 ) {
                                        $allow = Service_OrderProcess::allowTakeBattery( @$orderRow['sm_code'], @$orderRow['oab_country_id'], $productInfo['battery_type'], $others );
                                        if( !$allow['allow'] ) {
                                            $orderRow['is_valid'] = '0';
                                            $error = $orderRow['error'];
                                            $error[] = '产品sku['. $productInfo['product_sku'] .']:'.$allow['msg'];
                                            $orderRow['error'] = $error;
                                        }
                                    }
                                    if($productInfo['with_battery']=="1"&&(in_array($orderRow['sm_code'],$unBettrySmArr)||($orderRow['sm_code']=='SZY-EUB'&&!in_array($orderRow['oab_country_id'],array(253,41))))){
                                        if(in_array($orderRow['sm_code'], array('CJ-DGMG','CJ-DGMP','DGM-US'))){
                                            $countryInfo = Service_Country::getByField($orderRow['oab_country_id']);
                                            if(in_array($orderRow['oab_country_id'], array(14,61,65,66,81,89,107,113,168,182,192,195,217,221,230,252))|| (($orderRow['sm_code'] == 'DGM-US') && $orderRow['oab_country_id'] == '253')){
                                                if($productInfo['battery_type'] !=2){
                                                    $orderRow['is_valid'] = '0';
                                                    $error = $orderRow['error'];
                                                    $error[] = '国家'.$countryInfo['country_name'].'渠道为'. $orderRow['sm_code'] .'只能发内置电池产品';
                                                    $orderRow['error'] = $error;
                                                    }
                                                }else{
                                                    $orderRow['is_valid'] = '0';
                                                    $error = $orderRow['error'];
                                                    $error[] = '国家'.$countryInfo['country_name'].'渠道为'. $orderRow['sm_code'] .'限制运输带电产品';
                                                    $orderRow['error'] = $error;
                                            }
                                        }elseif(in_array($orderRow['sm_code'], array('BH-AZAT-G')) && !in_array($productInfo['battery_type'], array('1','2'))){
                                            $orderRow['is_valid'] = '0';
                                            $error = $orderRow['error'];
                                            $error[] = "渠道{$orderRow['sm_code']}带电池产品的电池类型只能是内置或配套电池";
                                            $orderRow['error'] = $error;
                                        }else{
                                            $orderRow['is_valid'] = '0';
                                            $error = $orderRow['error'];
                                            $error[] = "渠道{$orderRow['sm_code']}限制运输带电产品[{$productInfo['product_sku']}]";
                                            $orderRow['error'] = $error;
                                        }
                                    }
                                    //渠道4PX-Singapo_SPack_IMAIR/4PX-SG_ordinary_mail+在英国/德国/意大利/老挝/埃及限制内置电池产品
                                    if ($productInfo['with_battery'] == "1" && in_array($orderRow['oab_country_id'], array(252, 89, 115, 130, 71)) && in_array($orderRow['sm_code'], array('4PX-Singapo_SPack_IMAIR', '4PX-SG_ordinary_mail+','4PX-OZXBTH'))) {
                                        $orderRow['is_valid'] = '0';
                                        $error = $orderRow['error'];
                                        $error[] = "此国家不能走含有电池";
                                        $orderRow['error'] = $error;
                                        $err[] = "";
                                    }
                                    if($orderRow['sm_code']=='4PX-HKDHL'&&$productInfo['with_battery']=="1"){
                                    	$filePath = APPLICATION_PATH . '/../data/file/4PX-HKDHL-limit-country.xls';
				                        $fileData = Common_Upload::readEXCEL($filePath);
				                        $res      = 0;
				                        $countryName = Service_Country::getByField($orderRow['oab_country_id'],'country_id','country_name');
				                        foreach ($fileData as $k => $v) {
				                            if ($k == 0) {
				                                continue;
				                            }
				                            $str = strpos(strtolower($countryName['country_name']), strtolower($v[0]));
				                            if (is_numeric($str)) {
				                                $res = 1;
				                                break;
				                            }
				                        }
				                        if ($res) {
				                            $orderRow['is_valid'] = '0';
                                        	$error = $orderRow['error'];
                                        	$error[] = "渠道【{$orderRow['sm_code']}】国家【{$countryName['country_name']}】限制运输带电产品[{$productInfo['product_sku']}]";
                                        	$orderRow['error'] = $error;
				                        }
                                    }
									if($orderRow['sm_code']=='BH-HKDHL'&&$productInfo['with_battery']=="1"){
                                    	$filePath = APPLICATION_PATH . '/../data/file/BH-HKDHL-limit-country.xls';
				                        $fileData = Common_Upload::readEXCEL($filePath);
				                        $res      = 0;
				                        $countryName = Service_Country::getByField($orderRow['oab_country_id'],'country_id','country_name');
				                        foreach ($fileData as $k => $v) {
				                            if ($k == 0) {
				                                continue;
				                            }
				                            $str = strpos(strtolower($countryName['country_name']), strtolower($v[0]));
				                            if (is_numeric($str)) {
				                                $res = 1;
				                                break;
				                            }
				                        }
				                        if ($res) {
				                            $orderRow['is_valid'] = '0';
                                        	$error = $orderRow['error'];
                                        	$error[] = "渠道【{$orderRow['sm_code']}】国家【{$countryName['country_name']}】限制运输带电产品[{$productInfo['product_sku']}]";
                                        	$orderRow['error'] = $error;
				                        }else{
				                            //允许带电的国家，也只能发内置电池产品
				                            if($productInfo['battery_type'] != 2){
				                                $orderRow['is_valid'] = '0';
				                                $error = $orderRow['error'];
				                                $error[] = "渠道【{$orderRow['sm_code']}】国家【{$countryName['country_name']}】只能发内置电池产品[{$productInfo['product_sku']}]";
				                                $orderRow['error'] = $error;
				                            }
				                        }
                                    }
                                    if($orderRow['sm_code']=='DHL-BH03'&&$productInfo['with_battery']=="1"){
                                        $filePath = APPLICATION_PATH . '/../data/file/DHL-BH-limit-country.xlsx';
                                        $fileData = Common_Upload::readEXCEL($filePath);
                                        $res      = 0;
                                        $countryName = Service_Country::getByField($orderRow['oab_country_id'],'country_id',array('country_name','country_code'));
                                        foreach ($fileData as $k => $v) {
                                            if ($k == 0) {
                                                continue;
                                            }
                                            $str = strpos(strtolower($countryName['country_name']), strtolower($v[2]));
                                            if (is_numeric($str)) {
                                                $res = 1;
                                                break;
                                            }
                                        }
                                        if ($res) {
                                            //土耳其（只能寄往Istanbul, Ankara, Izmir, Denizli, Adana, Kayseri, Gaziantep, Antalya, Bursa，其它城市不接受
                                            //挪威的货件，不接受任何电池货物中转的城市有：Jan Mayen 、Svalbard
                                            $allowWithBatteryCityByTR = array('Istanbul', 'Ankara', 'Izmir', 'Denizli', 'Adana', 'Kayseri', 'Gaziantep', 'Antalya', 'Bursa');
                                            $notAllowWithBatteryCityByNO = array('Jan Mayen' ,'Svalbard');
                                            if($countryName['country_code'] == 'TR' && in_array($orderRow['oab_city'], $allowWithBatteryCityByTR)){
                                                //nothing to do
                                            }elseif($countryName['country_code'] == 'NO' && !in_array($orderRow['oab_city'], $notAllowWithBatteryCityByNO)){
                                                //nothing to do 
                                            }else{
                                                $orderRow['is_valid'] = '0';
                                                $error = $orderRow['error'];
                                                $error[] = "渠道【{$orderRow['sm_code']}】国家【{$countryName['country_name']}】限制运输带电产品[{$productInfo['product_sku']}]";
                                                $orderRow['error'] = $error;
                                            }
                                        }else{
                                            //允许带电的国家，也只能发内置电池产品
                                            if($productInfo['battery_type'] != 2){
                                                $orderRow['is_valid'] = '0';
                                                $error = $orderRow['error'];
                                                $error[] = "渠道【{$orderRow['sm_code']}】国家【{$countryName['country_name']}】只能发内置电池产品[{$productInfo['product_sku']}]";
                                                $orderRow['error'] = $error;
                                            }
                                        }
                                    }
                                    
                                    if(in_array($orderRow['sm_code'], array('BH-MMP','SWPT','BH-MMP1')) && $productInfo['with_battery']=="1"){
                                        if($productInfo['battery_type'] != 2){
                                            $orderRow['is_valid'] = '0';
                                            $error = $orderRow['error'];
                                            $error[] = "渠道【{$orderRow['sm_code']}】只能发内置电池产品[{$productInfo['product_sku']}]";
                                            $orderRow['error'] = $error;
                                        }
                                    }
                                    
                                    if(in_array($orderRow['sm_code'], array('BH-POST-NL')) && $productInfo['with_battery']=="1"){
                                        if($productInfo['battery_type'] != 2){
                                            $orderRow['is_valid'] = '0';
                                            $error = $orderRow['error'];
                                            $error[] = "渠道【{$orderRow['sm_code']}】只能发内置电池产品[{$productInfo['product_sku']}]";
                                            $orderRow['error'] = $error;
                                        }else{
                                            if($productInfo['battery_type'] == '1'){
                                                $countryInfo = Service_Country::getByField($orderRow['oab_country_id']);
                                                $allowCountryCode = array('AT','BE','CZ','IT','SK','IE','DK','FR','HU','LU','ES','NL','NO','PL','PT','CH');
                                                if(!in_array( $countryInfo['country_code'], $allowCountryCode ) ){
                                                    $orderRow['is_valid'] = '0';
                                                    $error = $orderRow['error'];
                                                    $error[] = "渠道为BH-POST-NL时，国家".$countryInfo['country_name']."不允许发配套电池产品";
                                                    $orderRow['error'] = $error;
                                                }
                                            }
                                        }
                                        
                                    }
                                    
									if(!in_array($product_sku,$productSkuArr)){
										if (!(preg_match("/^[0-9]+$/",$product_qty) && is_numeric($product_qty) && $product_qty >0 )) {
											$orderRow['is_valid'] = '0';
											$error = $orderRow['error'];
											$error[] = "产品sku{$productInfo['product_sku']}数量必须大于0的整数-->[{$productInfo['product_sku']}]";
											$orderRow['error'] = $error;
										}
										if($declare_price!=""){
											//填写了申报价值
											if(!is_numeric($declare_price)||$declare_price<=0){
                                                                                            $orderRow['is_valid'] = '0';
												$error = $orderRow['error'];
												$error[] = "产品sku{$productInfo['product_sku']}申报价值[".$declare_price."]必须是大于0的数值-->[{$productInfo['product_sku']}]";
												$orderRow['error'] = $error;
                                                                                                
											}/*elseif($declare_price<$productInfo['product_declared_value']*0.8||$declare_price>$productInfo['product_declared_value']*1.2){
                                                                                            $orderRow['is_valid'] = '0';
                                                                                            $error = $orderRow['error'];
                                                                                            $error[] = "产品sku{$productInfo['product_sku']}SKU的申报单价只能在基础价上浮动20%，请重新填写";
                                                                                            $orderRow['error'] = $error;
                                                                                        }*/
										}else{
											//没有填写申报价值
											$declare_price = $productInfo['product_declared_value'];
										}
										if($product_title_en==''){
											$product_title_en = $productInfo['product_title_en'];
										}
										if($product_title_en==''){
											if($orderRow['sm_code']=='HKDHL'||$orderRow['sm_code']=="SZY-EUB"||$orderRow['sm_code']=="CJ-DGMG"||$orderRow['sm_code']=="CJ-DGMP"||$orderRow['sm_code']=='BH-HKDHL'){
												$orderRow['is_valid'] = '0';
												$error = $orderRow['error'];
												$error[] = "产品sku{$productInfo['product_sku']}英文品名没填写,并且改sku的产品英文品名为空-->[{$productInfo['product_sku']}]";
												$orderRow['error'] = $error;
											}
										}else{

										
										if ($orderRow['sm_code']=='BH-USPS' || $orderRow['sm_code']=='BH-DPD'|| $orderRow['sm_code']=='SF-RUPT'|| $orderRow['sm_code']=='SF-RUPR'|| $orderRow['sm_code']=='PNLN'|| $orderRow['sm_code']=='PNLG') {
												$keyData = array('顺丰国际电商专递'=>array('BH-DPD'),'顺丰国际小包挂号'=>array('PNLG','SF-RUPR'),'顺丰国际小包挂号（美国）'=>array('BH-USPS'),'顺丰国际小包平邮'=>array('PNLN','SF-RUPT'));
                    							$keyMinGan = '';
                    							foreach ($keyData as $key => $value) {
							                        if(in_array($orderRow['sm_code'], $value)){
							                            $keyMinGan = $key;
							                            break;
							                        }
							                    }
							                    $filePath = APPLICATION_PATH . '/../data/file/mingan.xls';
							                    $fileData = Common_Upload::readEXCEL($filePath);
							                    $res      = 0;
							                    if($keyMinGan){
							                        foreach ($fileData as $k => $v) {
							                            if ($k == 0) {
							                                continue;
							                            }
							                            if($v[0]==$keyMinGan){
							                                $str = strpos(strtolower($product_title_en), strtolower($v[1]));
							                                if (is_numeric($str)) {
							                                    $res = 1;
							                                    break;
							                                }
							                            }
							                        }
							                        if ($res) {
							                        	$orderRow['is_valid'] = '0';
                                                		$error = $orderRow['error'];
							                            $error[] = "英文申报品名根据服务商要求ll，申报品名包含{$v[1]}禁止运输，请选择其他运输方式！";
							                            $orderRow['error'] = $error;
							                        }
						                    	}
											}
                                            $specialSmCodeArr = array(
                                                '4PX-OZXBTH',
                                                '4PX-LYT_GH',
                                                '4PX-EU_PACKET',
                                                '4PX-RU_POST-LINK_RMAIL',
                                                '4PX-Singapo_SPack_IMAIR',
                                                '4PX-SG_ordinary_mail+',
                                            );
                                            if (in_array($orderRow['sm_code'],$specialSmCodeArr)){
                                                if (strpos(strtolower($product_title_en), 'gift') !== false || strpos(strtolower($product_title_en), 'sample') !== false){
                                                    $error[] = "申报品名不能为GIFT，SAMPLE等笼统的品名";
                                                    $orderRow['error'] = $error;
                                                }
                                            }
                                            if($orderRow['sm_code'] == 'BH-NLPOST-TH' &&  mb_strlen($product_title_en) > 17){
                                                $orderRow['is_valid'] = '0';
                                                $error = $orderRow['error'];
                                                $error[] = '渠道【'. $orderRow['sm_code'].',产品英文品名长度不能超过17个字符';
                                                $orderRow['error'] = $error;
                                            }
                                            
										}
										if($purpose_declared_value!=""){
											if(!is_null($declare_price) && is_numeric($declare_price) && $declare_price > 0){
												$purpose_declared_value = $purpose_declared_value;
											}else{
                                                $orderRow['is_valid'] = '0';
                                                $error = $orderRow['error'];
                                                $error[] = "产品sku{$productInfo['product_sku']}目的海关申报价值大于0的数值-->[{$productInfo['product_sku']}]";
                                                $orderRow['error'] = $error;
                                            }
											//$purpose_declared_value=Service_Currency::converByCode('RMB', 'USD', $declare_price);
										}else{
                                            $purpose_declared_value = 0.7*$declare_price;
                                        }
										if($purpose_declared_value!=""){
											if(!( is_numeric($purpose_declared_value) && $purpose_declared_value >0 )){
												$orderRow['is_valid'] = '0';
												$error = $orderRow['error'];
												$error[] = "产品sku{$productInfo['product_sku']}目的海关申报价值大于0的数值-->[{$productInfo['product_sku']}]";
												$orderRow['error'] = $error;
											}
										}
										$productSkuArr[] = $product_sku;
										$orderProduct = array('product_id'=>$productInfo['product_id'],'qty'=>$product_qty,'declare_price'=>$declare_price,'op_declared_value'=>$purpose_declared_value,'product_title_en'=>$product_title_en);
										$orderSku[] = $orderProduct;
									}else{
										
										 $orderRow['is_valid'] = '0';
										$error = $orderRow['error'];
										$error[] = '该订单存在重复SKU,'.$product_sku."请将SKU数量进行合并再传";
										$orderRow['error'] = $error; 
									}
								}
							}else{
								//组合产品不能添加到订单里面
								$orderRow['is_valid'] = '0';
								$error = $orderRow['error'];
								$error[] = '产品sku:'.$product_sku."为组合产品不能添加到订单";
								$orderRow['error'] = $error;
							}
						}else{
							//产品状态不对
							$orderRow['is_valid'] = '0';
							$error = $orderRow['error'];
							$error[] = '产品sku:'.$product_sku."不是正常状态的产品";
							$orderRow['error'] = $error;
						}
					}else{
						//产品状态不对
						$orderRow['is_valid'] = '0';
						$error = $orderRow['error'];
						$error[] = '产品sku:'.$product_sku."不存在";
						$orderRow['error'] = $error;
					}
				}
				$orderRow['order_product'] = $orderSku;
			}
		}
		if(!isset($orderSku) || empty($orderSku)){
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = '必须有有效的产品信息';
			$orderRow['error'] = $error;
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 校验输入的交易订单号的重复性(检查本文档的情况)
	 */
	public static function checkReferenceDocument($reference_no,$referenceArr,$orderRow){
		if(in_array($reference_no, $referenceArr)){
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = "文档中存在和该交易订单号($reference_no)重复情况";
			$orderRow['error'] = $error;
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo  检查文档中的服务商单号重复性
	 */
	public static function checkRefTrackDocument($ref_tracking_number,$refTrackingArr,$orderRow){
		$ref_tracking_number = trim($ref_tracking_number);
		if($ref_tracking_number!=''){
			/* $sm_code = $orderRow['sm_code'];
			$sm_code = strtoupper($sm_code); */
			if(in_array($ref_tracking_number, $refTrackingArr)){
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "文档中存在和该服务商单号($ref_tracking_number)重复情况";
				$orderRow['error'] = $error;
			}
			/* if(isset($refTrackingArr[$sm_code])){
				$nowRefTrackingArr = $refTrackingArr[$sm_code];
				if(in_array($ref_tracking_number,$nowRefTrackingArr)){
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "文档中存在和该服务商单号($ref_tracking_number)重复情况";
					$orderRow['error'] = $error;
				}
			} */
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo  检查文档中的服务商单号重复性
	 */
	public static function checkRefTrack($ref_tracking_number,$reference_no,$orderRow){
		$ref_tracking_number = trim($ref_tracking_number);
		//服务商单号服务商单号+交易订单号需全局唯一
		if($orderRow['order_mode_type']=='1'){
			if($orderRow['change_order']=='0'){
				$refTrackCondition = array(
						'reference_no'=>$reference_no,
						'ref_tracking_number'=>$ref_tracking_number,
				);
				$numberRefTrack = Service_Orders::getByCondition($refTrackCondition,'count(*)');
				if($numberRefTrack>0){
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "服务商单号+交易订单号重复";
					$orderRow['error'] = $error;
				}
			}
		}
		return $orderRow;
	}
	
	public static function sysSubStr($string,$length)
	{
		$i = 0;
		while ($i < $length)
		{
			$stringTMP = substr($string,$i,1);
			if ( ord($stringTMP) >=224 )
			{
				$stringTMP = substr($string,$i,3);
				$i = $i + 3;
			}
			elseif( ord($stringTMP) >=192 )
			{
				$stringTMP = substr($string,$i,2);
				$i = $i + 2;
			}
			else
			{
				$i = $i + 1;
			}
			$stringLast[] = $stringTMP;
			//$stringLast = implode("",$stringLast);
		}
		return $stringLast;
	}

  public static function checkHkdhl($orderRow) {
    // HKDHL对收件人信息进行验证，指接收英文字符，所有出现在LABEL上的信息都应该验证
    if (in_array(strtoupper(trim($orderRow['sm_code'])), array('WWDHLP','WWDHLP','HKDHL','BH-HKDHL','CNDHL','DHL-TH'))) {
      // HKDHL不接受&，否则&及其之后的内容会被清掉
      $hkdhlPattern = '/^[a-zA-Z0-9' . preg_quote('~`!@#$%^*()_-+={[}]|\:;"\'<,>.?/ ', '/') . ']+$/';
      $error        = array();

      // 收件人姓名
      if (!empty($orderRow['oab_firstname']) && !preg_match($hkdhlPattern, $orderRow['oab_firstname'])) {
        $error[] = '收件人姓名含有非英语字符或&字符';
      }

      // 收件人公司
      if (!empty($orderRow['oab_company']) && !preg_match($hkdhlPattern, $orderRow['oab_company'])) {
        $error[] = '收件人公司含有非英语字符或&字符';
      }

      // 收件人省份/州
      if (!empty($orderRow['oab_state']) && !preg_match($hkdhlPattern, $orderRow['oab_state'])) {
        $error[] = '收件人州/区域含有非英语字符或&字符';
      }

      // 收件人城市
      if (!empty($orderRow['oab_city']) && !preg_match($hkdhlPattern, $orderRow['oab_city'])) {
        $error[] = '收件人城市含有非英语字符或&字符';
      }

      // 收件人地址1
      if (!empty($orderRow['oab_street_address1']) && !preg_match($hkdhlPattern, $orderRow['oab_street_address1'])) {
        $error[] = '收件人地址1含有非英语字符或&字符';
      }

      // 收件人地址2
      if (!empty($orderRow['oab_street_address2']) && !preg_match($hkdhlPattern, $orderRow['oab_street_address2'])) {
        $error[] = '收件人地址2含有非英语字符或&字符';
      }

      // 收件人邮编
      if (!empty($orderRow['oab_postcode']) && !preg_match($hkdhlPattern, $orderRow['oab_postcode'])) {
        $error[] = '收件人邮编含有非英语字符或&字符';
      }

      // 收件人电话
      if (!empty($orderRow['oab_phone']) && !preg_match($hkdhlPattern, $orderRow['oab_phone'])) {
        $error[] = '收件人电话含有非英语字符或&字符';
      }

      if (!empty($error)) {
        $orderRow['is_valid'] = '0';
        $orderRow['error']    = array_merge($orderRow['error'], $error);
      }
    }

    return $orderRow;
  }

    public static function checkInsurance( $buyInsurance, $insuranceName, $orderRow ) {
        if( $buyInsurance ) {
            if( in_array($buyInsurance,array('是','否'))) {
                $orderRow['insurance'] = $buyInsurance == '是' ? 1 : 0;
                if( $orderRow['insurance'] == 1 ) {
                    if( isset($orderRow ['sm_code']) ) {
                        $tmpShip = Service_ShippingMethod::getBuyInsuranceShipMethod();
                        if( in_array( $orderRow ['sm_code'],$tmpShip)) {
                            $error = array();

                            if( !isset($orderRow['charge']) || $orderRow['charge'] === '' || $orderRow['charge'] <= 0 ) {
                                $error[] = '成交总价必填,且大于0';
                            }
                            if( !isset($orderRow['insurance_rate']) || !is_numeric($orderRow['insurance_rate']) || $orderRow['insurance_rate'] < 1 || $orderRow['insurance_rate'] > 1.1){
                                $error[] = '投保金额率大于等于1，且小于等于1.1，有效小数位：2位';
                            }
                            if ( $insuranceName === '' ) {
                                $error[] = '保险项目不能为空';
                            } else {
                                $insuranceCode = '';
                                if( $insuranceName == '货物运输保险') {
                                    $insuranceCode = 'GTI';
                                } else if( $insuranceName == '订单延误保险' ) {
                                    $insuranceCode = 'ODI';
                                } else if( $insuranceName == '订单取消保险' ) {
                                    $insuranceCode = 'OCI';
                                } else if($insuranceName == '产品责任保险'){
                                    $insuranceCode = 'GRI';
                                }
                                if( $insuranceCode === '' ) {
                                    $error[] = '保险不存在';
                                } else {
                                    $feeItem = Service_OtherFee::getByField($insuranceCode,'fee_code');
                                    if(empty($feeItem))
                                        $error[] = '保险不存在';
                                    else if( $feeItem['status'] != 1 )
                                        $error[] = '保险不可用';
                                    else if( empty( $error ) ) {
                                        //$orderRow['insurance_rate'] = 1;
                                        $orderRow['insurance_code'] = $insuranceCode;
                                    }
                                }
                            }
                            if( !empty( $error ) ) {
                                $orderRow['is_valid'] = '0';
                                $orderRow['error'] =array_merge( $orderRow['error'], $error );
                            }
                        } else {
                            $orderRow['insurance'] = 0;
                            $orderRow['insurance_rate'] = 1;
                            $orderRow['insurance_code'] = '';
                        }
                    }
                } else {
                    $orderRow['insurance_rate'] = 1;
                    $orderRow['insurance_code'] = '';
                }
            } else {
                $error[] = '购买保险是能填写是或否，或者为空';
            }
        } else {
            $orderRow['insurance'] = 0;
            $orderRow['insurance_rate'] = 1;
            $orderRow['insurance_code'] = '';
        }
        return $orderRow;
    }


  public static function checkProductDeclareValue($orderRow) {
    $total    = 0;
    $products = $orderRow['order_product'];

    foreach ($products as $product) {
      $total += $product['qty'] * $product['op_declared_value'];
    }

    if ('SZY-EUB' === strtoupper(trim($orderRow['sm_code'])) && 82 === (int) $orderRow['oab_country_id']) {
      if ($total > 30) {
        $orderRow['is_valid'] = '0';
        $orderRow['error']    = array_merge($orderRow['error'], array('SZY-EUB到法国总目的海关申报价值不能超过30美元'));
      }
    }
    elseif ('PNLN' === strtoupper(trim($orderRow['sm_code']))) {
      $total = Service_Currency::converByCode('USD', 'EUR', $total);

      if ($total > 22) {
        $orderRow['is_valid'] = '0';
        $orderRow['error']    = array_merge($orderRow['error'], array('PNLN总目的海关申报价值不能超过22欧元'));
      }
    }
    elseif('DGM-US' === strtoupper(trim($orderRow['sm_code']))){
        if($total > 800){
            $orderRow['is_valid'] = '0';
            $orderRow['error']    = array_merge($orderRow['error'],array('DGM-US总目的海关申报价值不能超过800美元'));
        }
    }

    return $orderRow;
  }

    public static function checkDeliveryAddress($delivery_address,$orderRow){
        if($orderRow['order_mode_type'] == '1'){
            if($orderRow['change_order']=="1"){
                $orderRow['delivery_address'] = "";
            }else{
                if($delivery_address==""){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = '派送地址必填!';
                    $orderRow['error'] = $error;
                    $orderRow['delivery_address'] = "";
                }
                else{
                    /*if(!in_array($delivery_address,array("荃湾","非荃湾"))){
                        $orderRow['is_valid'] = '0';
                        $error = $orderRow['error'];
                        $error[] = '派送地址只能是非荃湾或荃湾';
                        $orderRow['error'] = $error;
                        $orderRow['delivery_address'] = "";
                    }*/
                    $orderRow['delivery_address'] = $delivery_address;
                }
            }
        }else{
            $orderRow['delivery_address'] = "";
        }

        return $orderRow;

    }

    public static function checkShipInfo( $orderRow ) {
        //检查物流信息
        if( $orderRow['sm_code'] == "DGF-CARGO" && isset( $orderRow['country_code'] ) && !empty( $orderRow['country_code'] ) ){
            $shippingInfo = isset( $orderRow['shippingInfo'] ) ? $orderRow['shippingInfo'] : array();
            if( !isset( $orderRow['error'] ) ) {
                $orderRow['error'] = array();
            }
            if(empty($shippingInfo)){
                $orderRow['is_valid'] = '0';
                $orderRow['error'][]= '缺少物流信息';
            }else{
                //校验具体每一项，机场三字码
                if( isset($shippingInfo['destination']) && $shippingInfo['destination'] != '' ){

                    //查找目的港的有效性,加上国家
                    $condition = array(
                        'airport_destination' => $shippingInfo['destination'],
                        'country_code' => $orderRow['country_code'],
                    );
                    $airMap = Service_AirportCountryMap::getByCondition( $condition );
                    if(empty($airMap)){
                        $orderRow['error'][]= '目的港无效';
                    }
                }else{
                    $orderRow['error'][] = "目的港必填";
                }
                //校验具体每一项，isDGD	是(1)/否(0)危险货品申报
                if( isset($shippingInfo['isDGD']) && !empty( $shippingInfo['isDGD'] ) ){
                    if(!in_array($shippingInfo['isDGD'],array('是','否'))){
                        $orderRow['error'][] = "是否危险品只能填是或者否";
                    } else {
                        $orderRow['shippingInfo']['isDGD'] = $shippingInfo['isDGD'] == '是' ? 1 : 0;
                    }
                }else{
                    $orderRow['shippingInfo']['isDGD']='0';
                }
                //校验具体每一项，hsDescription 货物描述及唛头
                if(!isset($shippingInfo['hsDescription']) || $shippingInfo['hsDescription'] === ''){
                    $orderRow['error'][] = "货物描述及唛头必填";
                }
                //校验insuredAccount
                if( isset($shippingInfo['insuredAccount']) && $shippingInfo['insuredAccount']!=='' && !is_null( $shippingInfo['insuredAccount'] ) ){
                    if( !is_numeric($shippingInfo['insuredAccount']) || $shippingInfo['insuredAccount'] <= 0){
                        $orderRow['error'][] = "投保金额必须是正数";
                    }
                }
                if( !empty( $orderRow['error'] ) ) {
                    $orderRow['is_valid'] = '0';
                }
            }
        }
        return $orderRow;
    }
}
