예제 #1
0
 /**
  * ShipfeeQueryModel::cal_eub_jiete()
  * 中国邮政EUB捷特运费计算
  * @param float $weight 重量
  * @param string $countryname 发往国家
  * @param $data 待定
  * @param $discount 是否有折扣
  * @return false or array
  */
 public function cal_eub_jiete($weight, $countryname, $data, $discount = true)
 {
     $totalfee = 0;
     $arealist = array();
     $maxWeight = 0;
     $chAlias = 'eub_fujian';
     $res = array();
     $res = TransOpenApiModel::cacheCarrierInfoByChannelAli("trans_channels", "channelAlias='{$chAlias}'", "{$chAlias}_carrier", 600, 0);
     $maxWeight = !empty($res['weightMax']) ? floatval($res['weightMax']) : 0;
     if (!empty($maxWeight)) {
         if ($weight > $maxWeight) {
             return false;
         }
     }
     $arealist = TransOpenApiModel::cacheTableInfo('trans_freight_eub_jiete', '1', 'cal_eub_jiete', 86400, 0);
     if (empty($arealist)) {
         return false;
     }
     $arearow = array();
     foreach ($arealist as $value) {
         $countrys = explode(',', $value['countrys']);
         $countrys = array_map(array($this, 'callback_trimspace'), $countrys);
         if (in_array($countryname, $countrys)) {
             $arearow = $value;
             break;
         }
     }
     if (empty($arearow)) {
         return false;
     }
     $rate1 = empty($arearow['discount']) ? 0 : floatval($arearow['discount']);
     $rate2 = empty($arearow['discount1']) ? 0 : floatval($arearow['discount1']);
     $rate = 0;
     $rateweight = empty($arearow['nextweight']) ? 0 : floatval($arearow['nextweight']);
     $noweight = empty($arearow['noWeight']) ? 0 : intval($arearow['noWeight']) / 1000;
     if ($weight <= $rateweight) {
         if ($weight <= $noweight && $noweight > 0) {
             $shipfee = $arearow['unitprice'] * $noweight + $arearow['handlefee'];
         } else {
             $shipfee = $arearow['unitprice'] * $weight + $arearow['handlefee'];
         }
         $totalfee = $shipfee;
         if ($rate1 > 0) {
             $shipfee = $shipfee * $rate1;
             $rate = $rate1;
         }
     } else {
         $shipfee = $arearow['unitprice'] * $weight + $arearow['handlefee'];
         $totalfee = $shipfee;
         if ($rate2 > 0) {
             $shipfee = $shipfee * $rate2;
             $rate = $rate2;
         }
     }
     return array('discount' => $rate, 'fee' => $shipfee, 'totalfee' => $totalfee);
 }