<?php
/**
 * @todo 校验设置API传过订单数据
 */
class Api_OrderCheck {
	public static function TransformData($rowData,$customer){
		$orderRow = array (
				'customer_id' => '',
				'warehouse_id' => '',
				'warehouse_code'=>'',
				'sm_code' => '',
				'reference_no' => '',
				'remark' => '',
				'order_type'=>'0',//普通订单
				'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' => '',
				'currency_code' => '', // 默认为人民币
				'order_status' => '1',
				'change_order' => '',
		        'delivery_address'=>'',//派送地址
				'ref_tracking_number'=>'',//服务商单号
				'charge' => '',
				'order_mode_type' => '1',
				'is_valid' => '1', // 是否可用
                                'insurance'=>0,
                                'insurance_rate'=>1,
                                'insurance_code'=>'',
				'order_product' => array (),
                                'is_pod'=>'',
                'piecesDetail'=>array(),
				'error' => array () 
		);
		$warehouseCode = ''; // 仓库code
		if (isset ( $rowData ['warehouse_code'] ) && $rowData ['warehouse_code'] != '') {
			$warehouseCode  = $rowData ['warehouse_code']; // 交货仓库
		}
		
		$shipName = '';
		if (isset ( $rowData ['sm_code'] ) && $rowData ['sm_code'] != '') {
			$shipName = $rowData ['sm_code']; // 运输方式
		}
		
		$reference_no = ''; // 交易订单号
		if (isset ( $rowData ['reference_no'] ) && $rowData ['reference_no'] != '') {
			$reference_no = $rowData ['reference_no']; // 交易订单号
		}
		
		$remark = ''; // 备注
		if (isset ( $rowData ['remark'] ) && $rowData ['remark'] != '') {
			$remark = $rowData ['remark']; // 备注
		}
		
		$order_type = '0'; //订单类型
		if (isset ( $rowData ['order_type'] ) && $rowData ['order_type'] != '') {
			$order_type = $rowData ['order_type']; // 备注
		}
		
		$firstName = ''; // 姓名
		if (isset ( $rowData ['oab_firstname'] ) && $rowData ['oab_firstname'] != '') {
			$firstName = $rowData ['oab_firstname']; // 姓名
		}
		
		$lastName = ''; // 姓
		if (isset ( $rowData ['oab_lastname'] ) && $rowData ['oab_lastname'] != '') {
			$lastName = $rowData ['oab_lastname']; // 姓
		}
		
		$companyName = ''; // 公司名称
		if (isset ( $rowData ['oab_company'] ) && $rowData ['oab_company'] != '') {
			$companyName = $rowData ['oab_company']; // 公司名称
		}
		
		$oab_country_name = '';
		if (isset ( $rowData ['oab_country_name'] ) && $rowData ['oab_country_name'] != '') {
			$oab_country_name = $rowData ['oab_country_name']; // 国家
		}
		
		$zipCode = ''; // 邮编
		if (isset ( $rowData ['oab_postcode'] ) && $rowData ['oab_postcode'] != '') {
			$zipCode = $rowData ['oab_postcode']; // 邮编
		}
		
		$stateName = ''; //州
		if (isset ( $rowData ['oab_state'] ) && $rowData ['oab_state'] != '') {
			$stateName = $rowData ['oab_state']; // 邮编
		}
		
		$cityName = '';
		if (isset ( $rowData ['oab_city'] ) && $rowData ['oab_city'] != '') {
			$cityName = $rowData ['oab_city']; // 城市
		}

		$address1 = ''; // 地址一
		if (isset ( $rowData ['oab_street_address1'] ) && $rowData ['oab_street_address1'] != '') {
			$address1 = $rowData ['oab_street_address1']; // 地址一
		}
		
		$address2 = ''; // 地址2
		if (isset ( $rowData ['oab_street_address2'] ) && $rowData ['oab_street_address2'] != '') {
			$address2 = $rowData ['oab_street_address2']; // 地址2
		}
		
		$telephone = ''; // 电话
		if (isset ( $rowData ['oab_phone'] ) && $rowData ['oab_phone'] != '') {
			$telephone = $rowData ['oab_phone']; // 电话
		}
		
		$email = ''; // 电子邮件
		if (isset ( $rowData ['oab_email'] ) && $rowData ['oab_email'] != '') {
			$email = $rowData ['oab_email']; // 电子邮件
		}
		
		$currency_code=''; //币种
		if (isset ( $rowData ['currency'] ) && $rowData ['currency'] != '') {
			$currency_code = $rowData ['currency']; // 币种
		}
		
		$charge = ''; // 成交总价
		if (isset ( $rowData ['charge'] ) && $rowData ['charge'] != '') {
			$charge = $rowData ['charge']; // 成交总价
		}

		$change_order = '1'; //是否换单
		if (isset ( $rowData ['change_order'] ) && $rowData ['change_order'] != '') {
			$change_order = $rowData ['change_order']; // 是否换单
		}

		$deliveryAddress = '';//派送地址
		if(isset($rowData['delivery_address']) && $rowData['delivery_address'] !=''){
		    $deliveryAddress = $rowData['delivery_address'];
		}

		$ref_tracking_number = ''; //服务商单号
		if (isset ( $rowData ['ref_tracking_number'] ) && $rowData ['ref_tracking_number'] != '') {
			$ref_tracking_number = $rowData ['ref_tracking_number']; // 服务商单号
		}
		
		$order_mode_type = '0';
		if (isset ( $rowData ['order_mode_type'] ) && $rowData ['order_mode_type'] != '') {
			$order_mode_type = $rowData ['order_mode_type']; // 订单模式
		}
        $isPod=0;
        if(isset($rowData['is_pod'])&& $rowData ['is_pod'] != ''){
            $isPod=$rowData['is_pod'];
        }
		$buyInsurance = '0';
        if ( isset ( $rowData ['insurance'] ) && $rowData ['insurance'] !== '') {
            $buyInsurance = $rowData ['insurance'];
        }
        $dispatchNotice = '';
        if ( isset ( $rowData ['dispatchNotice'] ) && $rowData ['dispatchNotice'] !== '') {
            $dispatchNotice = $rowData ['dispatchNotice'];
        }
        $guarantee = '';
        if ( isset ( $rowData ['guarantee'] ) && $rowData ['guarantee'] !== '') {
            $guarantee = $rowData ['guarantee'];
        }
		//echo "<pre>";
		//print_r($rowData);
		$orderRow['customer_id'] = $customer['customer_id'];
        $orderRow['customer_code'] = $customer['customer_code'];
		//print_r($orderRow);
		//exit;
		
		$orderProducts = $rowData['productDeatil'];
        $shippingInfo = $rowData['shippingInfo'];
        $piecesDetail = $rowData['piecesDetail'];
        //派送通知服务、保障服务
        if(($shipName == "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;
                $orderRow['guarantee'] = $guarantee;
            }
        }else{
            $orderRow['dispatch_notice'] = $orderRow['guarantee'] = '0';
        }
		
		$orderRow = self::checkOrderMode($order_mode_type,$orderRow); //订单模型
		$orderRow = self::checkChangeOrder($change_order, $orderRow); //是否换单
		
		$orderRow = self::checkwarehouse ( $warehouseCode, $orderRow );
		
		$orderRow = self::checkCountry($oab_country_name, $orderRow);
		$orderRow = self::checkSmCode ( $shipName, $orderRow );
		
		$orderRow = self::checkReference ( $reference_no, $orderRow );
		$orderRow = self::checkRemark ( $remark, $orderRow );
		$orderRow = self::checkOrderType($order_type, $orderRow);

		$orderRow = self::checkFirstName ( $firstName, $orderRow );
		$orderRow = self::checkLastName ( $lastName, $orderRow );
		$orderRow = self::checkCompany ( $companyName, $orderRow );

		$orderRow = self::checkPostcode ( $zipCode, $orderRow );
		$orderRow = self::checkState($stateName, $orderRow);
		$orderRow = self::checkCity($cityName, $orderRow);
		$orderRow = self::checkAddress1 ( $address1, $orderRow );
		$orderRow = self::checkAddress2 ( $address2, $orderRow );
		$orderRow = self::checkTelephone($telephone, $orderRow);
		$orderRow = self::checkEmail($email, $orderRow);
		$orderRow = self::checkDeliveryAddress($deliveryAddress, $orderRow);

		$orderRow = self::checkCharge ( $charge, $orderRow );
		$orderRow = self::checkCurrency($currency_code, $orderRow);
		$orderRow = self::checkRefTrackingNumber($ref_tracking_number, $orderRow);
                //检查保险数据
		$orderRow = self::checkInsurance($buyInsurance, $orderRow,$rowData);

		$orderRow = self::checkProduct ( $orderProducts, $orderRow );
        $orderRow = self::checkPiecesDetail($piecesDetail,$orderRow);
                $orderRow=self::checkPod($isPod, $orderRow);
        $orderRow = self::checkShippingInfo($shippingInfo,$orderRow);
		//$orderRow = self::checkReferenceDocument ( $reference_no, $referenceArr, $orderRow );
		// print_r($orderRow);
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 用于校验交货仓库
	 */
	public static function checkwarehouse($warehouseCode,$orderRow){
		if($warehouseCode!=''){
			$warehouse = Service_Warehouse::getByField($warehouseCode,'warehouse_code'); //交货仓库
			if(!empty($warehouse)){
				$orderRow['warehouse_id'] = $warehouse['warehouse_id'];
			}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 checkOrderMode($order_mode_type,$orderRow){
		if($order_mode_type!=''){
			if($order_mode_type=='1'){
				$orderRow['order_mode_type'] = '1';
			}elseif ($order_mode_type=='0'){
				$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,$orderRow){
		if($change_order!=''){
			if($orderRow['order_mode_type']=='1'){
				//集货模式有是否换单
				if($change_order=='1'){
					$orderRow['change_order'] = '1';
				}elseif($change_order=='0'){
					$orderRow['change_order'] = '0';
				}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['change_order']=='0'){
				//集货模式 是否的情况
				$orderRow['ref_tracking_number'] = $ref_tracking_number;
			}
            if($orderRow['sm_code']=="WG-EUB-EBAY"){
                $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;
	}

    /**
     * @检查保险
     */
    public static function checkInsurance( $buyInsurance, $orderRow,$rowData ){
        if( $buyInsurance !== '' ) {
            if( $buyInsurance == 1 ){
                if( isset($rowData ['sm_code']) ) {
                    $tmpShip = Service_ShippingMethod::getBuyInsuranceShipMethod();
                    if( in_array( $rowData ['sm_code'],$tmpShip)) {
                            $error = array();
                            if(!isset($orderRow['currency_code']) || $orderRow['currency_code'] ==='') {
                                $error[] = '交易币种必填';
                            }
                            if( !isset($rowData['charge']) || $rowData['charge'] === '' ) {
                                $error[] = '成交总价必填';
                            }
                            if( !isset($rowData['insurance_rate']) || !is_numeric($rowData['insurance_rate']) || $rowData['insurance_rate'] < 1 || $rowData['insurance_rate'] > 1.1){
                                $error[] = '投保金额率大于等于1，且小于等于1.1，有效小数位：2位';
                            }
                            $feeItem = array();

                            if ( !isset($rowData['insurance_name']) || $rowData['insurance_name'] === '' ) {
                                $error[] = '保险项目不能为空';
                            } else {
                                $feeItem =  Service_OtherFee::getByField($rowData['insurance_name'],'fee_name');
                                if( empty( $feeItem )) {
                                    $error[] = '保险项目不存在';
                                } else if( $feeItem['status'] != '1') {
                                    $error[] = '保险项目不可用';
                                }
                            }
                            if( !empty( $error ) ) {
                                $orderRow['is_valid'] = '0';
                                $orderRow['error'] =array_merge( $orderRow['error'], $error );
                            } else {
                                $orderRow['insurance'] = 1;
                                $orderRow['insurance_rate'] = $rowData['insurance_rate'];
                                $orderRow['insurance_code'] = $feeItem['fee_code'];
                            }
                    } else {
                        $orderRow['insurance'] = 0;
                    }
                }
            }
        }
        return $orderRow;
    }

	/**
	 * @author william-fan
	 * @todo 用于收件人州/区域名称
	 */
	public static function checkState($stateName,$orderRow){
		if($stateName!=''){
			$orderRow['oab_state'] = $stateName;
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 用于校验城市
	 */
	public static function checkCity($cityName,$orderRow){
		if($cityName!=''){
			$orderRow['oab_city'] = $cityName;
		}
		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;
			}
			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;
				}
			}
			//file_put_contents('sm.txt', $sm_code);
			if($orderRow['order_mode_type'] == '1'){
				$orderRow['sm_code'] = $sm_code;
			}
			
			//备货模式的才检查国家运输方式
			/*if($orderRow['order_mode_type'] == '0'){
				$countryArr = Common_DataCache::getShipTypeCountryMap();
				$countryId = $orderRow['oab_country_id'];
				$countrySM = array();
				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[] = "该国家不支持此运输方式{$sm_code}";
							$orderRow['error'] = $error;
						}
					}else{
						$orderRow['is_valid'] = '0';
						$error = $orderRow['error'];
						$error[] = "该国家不支持此运输方式{$sm_code}";
						$orderRow['error'] = $error;
					}
				}else{
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "该国家不支持此运输方式{$sm_code}";
					$orderRow['error'] = $error;
				}
			}*/
            //备货模式的才检查国家运输方式
            if($orderRow['order_mode_type'] == '0'){
                $condition = array(
                    'country_id'=>$orderRow['oab_country_id'],
                    'sm_code'=>$sm_code
                );
                $smCountryMap = Service_SmCountryMap::getByCondition($condition,"count(*)");
                if($smCountryMap==0){
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "该国家不支持此运输方式{$sm_code}";
                    $orderRow['error'] = $error;
                }else{
                    $orderRow['sm_code'] = $sm_code;
                }
            }
		}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,'order_status_arr'=>array(1,2,3,4,6,7,8,9,10,11,12,13)),'*');
			$orderRow['reference_no'] = $reference_no;
			if(!empty($ordersCount)){
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "系统已经存在该交易订单号";
				$orderRow['error'] = $error;
                $orderRow['order_code'] = $ordersCount[0]['order_code'];
			}else{
				$orderRow['reference_no'] = $reference_no;
			}
		}
		return $orderRow;
	}
	/**
	 * @author willia-fan
	 * @todo 设置订单类型
	 */
	public static function checkOrderType($order_type_name,$orderRow){
		if($order_type_name!=''){
			switch($order_type_name){
				case "0":
					$orderRow['order_type'] = '0';
					break;
				case "1":
					$orderRow['order_type'] = '1';
					break;
				case "2":
					$orderRow['order_type'] = '2';
					break;
                case "3":
                    $orderRow['order_type'] = '3';
                    break;
                case "4":
                    $orderRow['order_type'] = '4';
                    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 william-fan
	 * @todo 用于校验姓
	 */
	public static function checkLastName($lastName,$orderRow){
		$orderRow['oab_lastname'] = $lastName;
		/* if($lastName!=''){
			$orderRow['oab_lastname'] = $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!=''){
			$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!=''){
			$orderRow['oab_company'] = $companyName;
		}
		return $orderRow;
	}
	/**
	 * @author willia-fan
	 * @todo 设置收件人国家
	 */
	public static function checkCountry($oab_country_name,$orderRow){
		if($oab_country_name!=''){
			$country = Service_Country::getByField($oab_country_name,'country_name');
			if(!empty($country)){
				$orderRow['oab_country_id'] = $country['country_id'];
				$orderRow['oab_country_name'] = $country['country_name'];
                $orderRow['country_code'] = $country['country_code'];
			}else{
				$country = Service_Country::getByField($oab_country_name,'country_code');
				if(!empty($country)){
					$orderRow['oab_country_id'] = $country['country_id'];
					$orderRow['oab_country_name'] = $country['country_name'];
                    $orderRow['country_code'] = $country['country_code'];
				}else{
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "国家{$oab_country_name}不存在";
					$orderRow['error'] = $error;
				}
			}
		}else{
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = '收件人国家必填';
			$orderRow['error'] = $error;
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 设置邮编
	 */
	public static function checkPostcode($zipCode,$orderRow){
		if($zipCode!=''){
			$orderRow['oab_postcode'] = $zipCode;
			if($orderRow['sm_code']=="BH-DPD"){
           $country=Service_Country::getByField($orderRow['oab_country_id'],'country_id');
            if(@!Service_OrderProcess::validatePostcode($country['country_code'],$zipCode)){
            		$orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "当前运输方式暂时不支持该国家此邮编的派送";
                    $orderRow['error'] = $error;  	
            	}
            }
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 设置校验地址一
	 */
	public static function checkAddress1($address1,$orderRow){
		if($address1!=''){
			$orderRow['oab_street_address1'] = $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!=''){
			$orderRow['oab_street_address2'] = $address2;
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 设置校验电话
	 */
	public static function checkTelephone($telephone,$orderRow){
		if($telephone!=''){
			if(preg_match('/^[0-9]+$/i', $telephone)!==false){
				$orderRow['oab_phone'] = $telephone;
			}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($email,$orderRow){
		if($email!=''){
			if (preg_match("/^[a-zA-Z0-9_\.-]+\@([a-zA-Z0-9-]+\.)+[a-zA-Z]{1,}$/i", $email)) {
				$orderRow['oab_email'] = $email;
			}else{
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "Email格式错误";
				$orderRow['error'] = $error;
			}
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 设置校验毛重
	 */
	public static function checkgrossWt($grossWt,$orderRow){
		if($grossWt!=''){
			if(is_numeric($grossWt)){
				$orderRow['grossWt'] = $grossWt;
			}else{
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "毛重必须是数字";
				$orderRow['error'] = $error;
			}
		}
		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;
	}
	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[] = "传递的币种[".$currency_code."]无效";
				$orderRow['error'] = $error;
			}
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 设置备注
	 */
	public static function checkRemark($remark,$orderRow){
		if($remark!=''){
			$orderRow['remark'] = $remark;
		}
		return $orderRow;
	}
	/**
	 * @author william-fan
	 * @todo 设置产品
	 */
	public static function checkProduct($orderProducts, $orderRow){
		$orderProductArr = array();
        $warehouse = Common_DataCache::getWarehouse();

		if(!empty($orderProducts)){
			foreach($orderProducts as $key=>$value){
				$condition = array(
					'customer_id'=>$orderRow['customer_id'],
					'product_sku'=>$value['product_sku'],	
				);
				$orderInfoAll = Service_Product::getByCondition($condition,'*','',1,1); //取一条
				if(!empty($orderInfoAll)){
					$orderInfo = $orderInfoAll[0];
					if($orderInfo['product_status']!='1'){
						$orderRow['is_valid'] = '0';
						$error = $orderRow['error'];
						$error[] = "sku:".$value['product_sku'].'未备案成功';
						$orderRow['error'] = $error;
					}else{

                        if( $orderInfo['with_battery'] == 1 ) {
                            $allow = Service_OrderProcess::allowTakeBattery( $orderRow['sm_code'], $orderRow['oab_country_id'], $orderInfo['battery_type'] );
                            if( $allow['allow'] == false ) {
                                $orderRow['is_valid'] = '0';
                                $orderRow['error'][] = $allow['msg'];
                            }
                        }

						$productArr = array(
							'product_id'=>$orderInfo['product_id'],
							'qty'=>$value['op_quantity']	
						);
						if(isset($value['declare_price'])&&$value['declare_price']!=""){
							$productArr['declare_price'] = $value['declare_price'];
						}else{
							$productArr['declare_price'] = $orderInfo['product_declared_value'];
						}
						if(isset($value['op_declared_value'])&&$value['op_declared_value']!=""){
							$productArr['op_declared_value'] = $value['op_declared_value'];
						}else{
                            $productArr['op_declared_value'] = 0.7*$productArr['declare_price'];
							/*if(isset($value['declare_price'])){
								$productArr['op_declared_value'] = 0.7*$productArr['declare_price'];
							}*/
						}
                        if(isset($value['product_title_en'])){
                            $productArr['product_title_en'] = $value['product_title_en'];
                        }
                        if(isset($value['ebay_item_id'])){
                            $productArr['ebay_item_id'] = $value['ebay_item_id'];
                        }
                        if(isset($value['ebay_transaction_id'])){
                            $productArr['ebay_transaction_id'] = $value['ebay_transaction_id'];
                        }
                        if(isset($value['ebay_buyer_id'])){
                            $productArr['ebay_buyer_id'] = $value['ebay_buyer_id'];
                        }

                        //$productArr['piecesDetail'] = array();
                        //检查包裹信息
                        /*if( $orderRow['warehouse_id']
                            && isset($warehouse[$orderRow['warehouse_id']])
                            && $warehouse[$orderRow['warehouse_id']]['warehouse_code'] == 'SZ01'
                            && $orderRow['customer_code'] == 'E0693'
                            && in_array($orderRow['sm_code'],array('HKDHL','BH-HKDHL')) ) {
                            if( !isset( $value['piecesDetail'] ) || empty( $value['piecesDetail'] ) ) {
                                $orderRow['is_valid'] = '0';
                                $error = $orderRow['error'];
                                $error[] = "sku: ".$value['product_sku'].'缺少piecesDetail数据';
                                $orderRow['error'] = $error;
                            } else {
                                if( !isset( $value['piecesDetail'][0] ) ) {
                                    $value['piecesDetail'] = array( $value['piecesDetail'] );
                                }
                                $sn = array();
                                foreach( $value['piecesDetail'] as $piece ) {
                                    $tmpError = array();
                                    if( $piece['serialNumber'] === '' ){
                                        $tmpError[] = 'sku: '.$value['product_sku'].' piecesDetail=>serialNumber不能为空';
                                    } else {
                                        if( in_array($piece['serialNumber'],$sn) )
                                            $tmpError[] = 'sku: '.$value['product_sku'].' piecesDetail存在相同的serialNumber';
                                        else
                                            $sn[] = $piece['serialNumber'];
                                    }
                                    if( !is_numeric( $piece['weight'] ) || $piece['weight'] <= 0 ){
                                        $tmpError[] = 'sku: '.$value['product_sku'].' piecesDetail=>weight不能为空,且只能为大于0的数字';
                                    } else {
                                        $piece['weight'] = round($piece['weight'],4);
                                    }
                                    if( !is_numeric( $piece['length'] ) || $piece['length'] <= 0 ){
                                        $tmpError[] = 'sku: '.$value['product_sku'].' piecesDetail=>length不能为空,且只能为大于0的数字';
                                    } else {
                                        $piece['length'] = $piece['length'];
                                    }
                                    if( !is_numeric ( $piece['width'] ) || $piece['width'] <= 0 ){
                                        $tmpError[] = 'sku: '.$value['product_sku'].' piecesDetail=>width不能为空,且只能为大于0的数字';
                                    } else {
                                        $piece['width'] = $piece['width'];
                                    }
                                    if( !is_numeric( $piece['height'] ) || $piece['height'] <= 0 ){
                                        $tmpError[] = 'sku: '.$value['product_sku'].' piecesDetail=>height不能为空,且只能为大于0的数字';
                                    } else {
                                        $piece['height'] = $piece['height'];
                                    }

                                    $productArr['piecesDetail'][] = $piece;

                                    if( $tmpError ) {
                                        $orderRow['is_valid'] = '0';
                                        $orderRow['error'] = array_merge( $orderRow['error'],$tmpError);
                                    }
                                }
                            }
                        }*/
						$orderProductArr[] = $productArr;
						//$orderProducts[$key]['product_id'] = 
					}
				}else{
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "sku: ".$value['product_sku'].' 不存在';
					$orderRow['error'] = $error;
				}
			}
		}else{
			$orderRow['is_valid'] = '0';
			$error = $orderRow['error'];
			$error[] = "产品不能为空";
			$orderRow['error'] = $error;
		}
		$orderRow['order_product'] = $orderProductArr;
		return $orderRow;
	}

    public static function checkPiecesDetail($piecesDetail,$orderRow){
        if(in_array($orderRow['customer_code'],array('E0693'))&& in_array($orderRow['sm_code'],array('HKDHL','BH-HKDHL'))){
            if( empty( $piecesDetail ) ) {
                $orderRow['is_valid'] = '0';
                $error = $orderRow['error'];
                $error[] = "缺少piecesDetail数据";
                $orderRow['error'] = $error;
            }else{
                if($orderRow['sm_code']=="HKDHL"){
                    foreach($piecesDetail as $pk=>$pv){
                        if(!isset($pv['opDescription'])||$pv['opDescription']==""){
                            $orderRow['is_valid'] = '0';
                            $error = $orderRow['error'];
                            $error[] = "HKDHL渠道piecesDetail.opDescription必填";
                            $orderRow['error'] = $error;
                            break;
                        }else if(strlen($pv['opDescription'])>90){
                            $orderRow['is_valid'] = '0';
                            $error = $orderRow['error'];
                            $error[] = "HKDHL渠道piecesDetail.opDescription最长90字符";
                            $orderRow['error'] = $error;
                            break;
                        }
                    }
                }
            }
        }
        $orderRow['piecesDetail'] = $piecesDetail;
        return $orderRow;
    }

	//校验派送地址
	public static function checkDeliveryAddress($deliveryAddress,$orderRow){
	    if($orderRow['order_mode_type'] == '1'){
	        if($orderRow['change_order']=="1"){
	            $orderRow['delivery_address'] = "";
	        }else{
	            if($deliveryAddress==""){
	                $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'] = $deliveryAddress;
	            }
	        }
	    }else{
	        $orderRow['delivery_address'] = "";
	    }
	
	    return $orderRow;
	
	}
     public static function checkPod($isPod,$orderRow){
          $orderRow['is_pod']=0;
     if($orderRow['oab_country_id']){
            if ($isPod === '') {
                if ($orderRow['oab_country_id'] == '252' && $orderRow['sm_code'] == '4PX-LYT_GH') {
                    $orderRow['is_valid'] = '0';
                    $error = $orderRow['error'];
                    $error[] = "POD必填";
                    $orderRow['error'] = $error;
                }
                
            } else {
                if ($orderRow['oab_country_id'] == '252' && $orderRow['sm_code'] == '4PX-LYT_GH'){
                     $orderRow['is_pod']=$isPod;
                 }
            }
        }
        return $orderRow;
     }

    public static function checkShippingInfo($shippingInfo,$orderRow){
		if($orderRow['sm_code']=="DGF-CARGO"){
			if(empty($shippingInfo)){
				$orderRow['is_valid'] = '0';
				$error = $orderRow['error'];
				$error[] = "shippingInfo 必填";
				$orderRow['error'] = $error;
				$orderRow['shippingInfo'] = $shippingInfo;
			}else{
				//校验具体每一项，机场三字码
				if(isset($shippingInfo['destination']) && $shippingInfo['destination']!='' && isset( $orderRow['country_code'] ) && !empty( $orderRow['country_code'] ) ){
					//查找目的港的有效性,加上国家
					//$airMap = Service_AirportCountryMap::getByField($shippingInfo['destination'],'airport_destination');
                    $condition = array(
                        'airport_destination' => $shippingInfo['destination'],
                        'country_code' => $orderRow['country_code'],
                    );
                    $airMap = Service_AirportCountryMap::getByCondition( $condition );
					if(empty($airMap)){
						$orderRow['is_valid'] = '0';
						$error = $orderRow['error'];
						$error[] = "shippingInfo 的机场三字码无效";
						$orderRow['error'] = $error;
						$orderRow['shippingInfo'] = $shippingInfo;
					}
				}else{
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "shippingInfo destination必填";
					$orderRow['error'] = $error;
					$orderRow['shippingInfo'] = $shippingInfo;
				}
				//校验具体每一项，isDGD	是(1)/否(0)危险货品申报
				if(isset($shippingInfo['isDGD'])){
					if(!in_array($shippingInfo['isDGD'],array('0','1'))){
						$orderRow['is_valid'] = '0';
						$error = $orderRow['error'];
						$error[] = "shippingInfo 危险货品申报只能填0或者1";
						$orderRow['error'] = $error;
						$orderRow['shippingInfo'] = $shippingInfo;
					}
				}else{
					$shippingInfo['isDGD']='0';
				}
				//校验具体每一项，hsDescription 货物描述及唛头
				if(!(isset($shippingInfo['hsDescription']) && $shippingInfo['hsDescription']!='')){
					//
					$orderRow['is_valid'] = '0';
					$error = $orderRow['error'];
					$error[] = "shippingInfo 货物描述及唛头必填";
					$orderRow['error'] = $error;
					$orderRow['shippingInfo'] = $shippingInfo;
					$shippingInfo['hsDescription']='0';
				}
				//校验insuredAccount
				if( isset($shippingInfo['insuredAccount']) && $shippingInfo['insuredAccount']!=='' && !is_null( $shippingInfo['insuredAccount'] ) ){
					if( !is_numeric($shippingInfo['insuredAccount']) || $shippingInfo['insuredAccount'] <= 0){
						$orderRow['is_valid'] = '0';
						$error = $orderRow['error'];
						$error[] = "shippingInfo insuredAccount必须是正数";
						$orderRow['error'] = $error;
						$orderRow['shippingInfo'] = $shippingInfo;
						$shippingInfo['hsDescription']='0';
					}

				}
			}
		}else{

		}
		$orderRow['shippingInfo'] = $shippingInfo;

        if($orderRow['order_type']=='3'||$orderRow['order_type']=='4'){
            if(!empty($shippingInfo)){
                if($orderRow['order_type']=='4'){
                    if(empty($shippingInfo['package'])){
                        $orderRow['is_valid'] = '0';
                        $error = $orderRow['error'];
                        $error[] = "shippingInfo.package 必填";
                        $orderRow['error'] = $error;
                        $orderRow['shippingInfo'] = $shippingInfo;
                    }
                }
                $orderRow['shippingInfo'] = $shippingInfo;
            }else{
                $orderRow['is_valid'] = '0';
                $error = $orderRow['error'];
                $error[] = "shippingInfo 必填";
                $orderRow['error'] = $error;
                $orderRow['shippingInfo'] = $shippingInfo;
            }
        }
        return $orderRow;
    }

}