<?php
class Service_ServiceTrackingNumber extends Common_Service
{
    /**
     * @var null
     */
    public static $_modelClass = null;

    /**
     * @return Table_ServiceTrackingNumber|null
     */
    public static function getModelInstance()
    {
        if (is_null(self::$_modelClass)) {
            self::$_modelClass = new Table_ServiceTrackingNumber();
        }
        return self::$_modelClass;
    }

    /**
     * @param $row
     * @return mixed
     */
    public static function add($row)
    {
        $model = self::getModelInstance();
        return $model->add($row);
    }


    /**
     * @param $row
     * @param $value
     * @param string $field
     * @return mixed
     */
    public static function update($row, $value, $field = "stn_id")
    {
        $model = self::getModelInstance();
        return $model->update($row, $value, $field);
    }

    /**
     * @param $value
     * @param string $field
     * @return mixed
     */
    public static function delete($value, $field = "stn_id")
    {
        $model = self::getModelInstance();
        return $model->delete($value, $field);
    }

    /**
     * @param $value
     * @param string $field
     * @param string $colums
     * @return mixed
     */
    public static function getByField($value, $field = 'stn_id', $colums = "*")
    {
        $model = self::getModelInstance();
        return $model->getByField($value, $field, $colums);
    }

    /**
     * @return mixed
     */
    public static function getAll()
    {
        $model = self::getModelInstance();
        return $model->getAll();
    }

    /**
     * @param array $condition
     * @param string $type
     * @param int $pageSize
     * @param int $page
     * @param string $order
     * @return mixed
     */
    public static function getByCondition($condition = array(), $type = '*', $pageSize = 0, $page = 1, $order = "")
    {
        $model = self::getModelInstance();
        return $model->getByCondition($condition, $type, $pageSize, $page, $order);
    }
    /**
     * @author william-fan
     * @todo 锁表操作
     */
    public static function getByConditionLock($condition = array(), $type = '*', $pageSize = 0, $page = 1, $order = "")
    {
        $model = self::getModelInstance();
        return $model->getByConditionLock($condition, $type, $pageSize, $page, $order);
    }

    /**
     * @param $val
     * @return array
     */
    public static function validator($val)
    {
        $validateArr = $error = array();
        
        return  Common_Validator::formValidator($validateArr);
    }


    /**
     * @param array $params
     * @return array
     */
    public  function getFields()
    {
        $row = array(
        
              'E0'=>'stn_id',
              'E1'=>'order_code',
              'E2'=>'stn_code',
              'E3'=>'sm_code',
              'E4'=>'stn_status',
              'E5'=>'stn_add_time',
              'E6'=>'stn_update_time',
			  'E7'=>'warehouse_id',
        );
        return $row;
    }
	/**
	 * @author william-fan
	 * @todo 用于服务商单号获取
	 */
    public static function getTrackingNumber($sm_code,$trackingNumber){
    	/* switch(strtoupper($sm_code)){
            case "BH-MMP":
                $trackingNumber = self::getSWPTTracking($trackingNumber);
                break;
    		case "HKEMS":
    			$trackingNumber = self::getHKEMSTracking($trackingNumber);
    			break;
    		default:	
    	} */
    	return $trackingNumber;
    }
    public static function getHKEMSTracking($trackingNumber) {
    	try{
    		//RE638100013SE
    		$start = substr($trackingNumber, 0,2);
    		$middleStr = substr($trackingNumber, 2,8);
    		$end = substr($trackingNumber, -2,2);
    		$endNumber = 0;
    		$endNumber = $endNumber+(int)$middleStr[0]*8;
    		$endNumber = $endNumber+(int)$middleStr[1]*6;
    		$endNumber = $endNumber+(int)$middleStr[2]*4;
    		$endNumber = $endNumber+(int)$middleStr[3]*2;
    		$endNumber = $endNumber+(int)$middleStr[4]*3;
    		$endNumber = $endNumber+(int)$middleStr[5]*5;
    		$endNumber = $endNumber+(int)$middleStr[6]*9;
    		$endNumber = $endNumber+(int)$middleStr[7]*7;
    		$endNumber = 11 - $endNumber%11;
    		$tracking_number = $start.$middleStr.$endNumber.$end;
    		return $tracking_number;
    	}catch(Exception $e){
    		return '';
    	}
    
    }

    public static function getSWPTTracking($trackingNumber) {
        try{
            //RE638100013SE
            $start = substr($trackingNumber, 0,2);
            $middleStr = substr($trackingNumber, 2,8);
            $end = substr($trackingNumber, -2,2);
            $endNumber = 0;
            $endNumber = $endNumber+(int)$middleStr[0]*8;
            $endNumber = $endNumber+(int)$middleStr[1]*6;
            $endNumber = $endNumber+(int)$middleStr[2]*4;
            $endNumber = $endNumber+(int)$middleStr[3]*2;
            $endNumber = $endNumber+(int)$middleStr[4]*3;
            $endNumber = $endNumber+(int)$middleStr[5]*5;
            $endNumber = $endNumber+(int)$middleStr[6]*9;
            $endNumber = $endNumber+(int)$middleStr[7]*7;
            $endNumber = 11 - $endNumber%11;
            if($endNumber==10){
                $endNumber = 0;
            }elseif($endNumber==11){
                $endNumber = 5;
            }else{
                $endNumber = $endNumber;
            }
            $tracking_number = $start.$middleStr.$endNumber.$end;
            return $tracking_number;
        }catch(Exception $e){
            return $trackingNumber;
        }
    }
	
	
	

	/*
	 状态列表 colin 2014-08-18
	*/
	public static function get_status_array(){
	
		return array(
			'0'=>'未分配',
			'1'=>'已分配'
		);
	
	
	}
	

   /* 
   	 删除colin 2014-08-18
   */
  public static function deleteOneRow($stn_id){
   
   		$message = "";
		$tracking = self::getByField($stn_id,'stn_id');
		
		if(empty($tracking)){
			return "ID为{$stn_id}的记录不存在";
		}elseif($tracking['stn_status']!=0){					
			return "服务商单号{$tracking['stn_code']}不是未分配状态，无法删除";
		}else{		
			$status = self::delete($stn_id,"stn_id");
			if($status===false){
				return "服务商单号{$tracking['stn_code']}由于不明原因删除失败";
			
			}else{
				return "服务商单号{$tracking['stn_code']}删除成功";
			}			
		
		}   
   
   
  }
  	
	
	
}