123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- <?php
- namespace Home\Model;
- use Think\Model;
- class TransportModel{
- public function __construct()
- {
- }
-
-
- public function calc_transport($transport_id, $quantity, $buy_num, $area_id) {
-
-
-
- if (empty($transport_id) || empty($area_id)) return 0;
-
-
- $extend_list = M('lionfish_comshop_shipping')->where( array('id' => $transport_id ) )->select();
-
-
-
-
- if (empty($extend_list)) {
- return 0;
- } else {
- return $this->calc_unit($area_id,$quantity, $buy_num,$extend_list);
- }
- }
-
- private function calc_unit($area_id, $quantity, $weight, $extend){
-
-
- $area_info = M('lionfish_comshop_area')->where( array('id' => $area_id ) )->find();
-
- if (!empty($extend) && is_array($extend)){
-
- $calc_total=array(
- 'error'=>'该地区不配送!!'
- );
-
- $defult_extend = array();
-
-
- foreach ($extend as $v) {
-
-
- $area_price_list = unserialize($v['areas']);
- $cal_price = 0;
-
- if( !empty($area_price_list) )
- {
- $s_count = count($area_price_list);
- $i =0;
-
- foreach($area_price_list as $area_price)
- {
- $area_price['citys_code'] = explode(';', $area_price['citys_code']);
-
- $i++;
-
- if( !empty($area_info['code']) && !empty($area_price['citys_code']) && in_array($area_info['code'], $area_price['citys_code']) )
- {
- unset($calc_total['error']);
-
- $frist = $area_price['frist'];
- $frist_price = $area_price['frist_price'];
- $second = $area_price['second'];
- $second_price = $area_price['second_price'];
-
-
- if($v['type'] == 1)
- {
- if ($weight <= $frist){
-
- $calc_total['price'] = $frist_price;
- }else{
-
- $calc_total['price'] = sprintf('%.2f',($frist_price + ceil(($weight-$frist)/$second)*$second_price));
- }
-
-
-
-
- $cal_price = $calc_total['price'];
- break;
- }else if($v['type'] == 2){
-
- if ($quantity <= $frist){
-
- $calc_total['price'] = $frist_price;
- }else{
-
- $calc_total['price'] = sprintf('%.2f',($frist_price + ceil(($quantity-$frist)/$second)*$second_price));
- }
-
-
-
- $cal_price = $calc_total['price'];
- break;
- }
-
- }else if($i == $s_count){
-
- unset($calc_total['error']);
-
-
- if($v['type'] == 1)
- {
- if ($weight <= $v['firstweight']){
-
- $calc_total['price'] = $v['firstprice'];
- }else{
-
- $calc_total['price'] = sprintf('%.2f',($v['firstprice'] + ceil(($weight-$v['firstweight'])/$v['secondweight'])*$v['secondprice']));
- }
-
- $cal_price = $calc_total['price'];
- }else if($v['type'] == 2){
-
- if ($quantity <= $v['firstnum']){
-
- $calc_total['price'] = $v['firstnumprice'];
- }else{
-
- $calc_total['price'] = sprintf('%.2f',($v['firstnumprice'] + ceil(($quantity-$v['firstnum'])/$v['secondnum'])* $v['secondnumprice']));
- }
-
-
- $cal_price = $calc_total['price'];
- break;
- }
- }
-
- if (strpos($v['area_id'],",".$area_id.",") !== false){
-
- unset($calc_total['error']);
-
-
- if ($num <= $v['snum']){
-
- $calc_total['price'] = $v['sprice'];
- }else{
-
- $calc_total['price'] = sprintf('%.2f',($v['sprice'] + ceil(($num-$v['snum'])/$v['xnum'])*$v['xprice']));
- }
-
-
- $cal_price = $calc_total['price'];
- break;
- }
- }
- }else{
-
-
- if($v['type'] == 1)
- {
- if ($weight <= $v['firstweight']){
-
- $calc_total['price'] = $v['firstprice'];
- }else{
-
- $calc_total['price'] = sprintf('%.2f',($v['firstprice'] + ceil(($weight-$v['firstweight'])/$v['secondweight'])*$v['secondprice']));
- }
-
- $cal_price = $calc_total['price'];
- }else if($v['type'] == 2){
-
- if ($quantity <= $v['firstnum']){
-
- $calc_total['price'] = $v['firstnumprice'];
- }else{
-
- $calc_total['price'] = sprintf('%.2f',($v['firstnumprice'] + ceil(($quantity-$v['firstnum'])/$v['secondnum'])* $v['secondnumprice']));
- }
-
- $cal_price = $calc_total['price'];
- }
-
- }
-
- return $cal_price;
-
- }
- return 0;
- }
-
- }
-
- }
|