123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <?php
- namespace app\model;
- use think\Model;
- class TransportExtend extends Model
- {
- protected $connection = 'mysql';
- protected $pk = 'id';
- protected $name = 'transport_extend';
- public function calc_transport($buy_num, $area_id)
- {
- if (empty($area_id)) {
- return 0;
- }
- $extend_list = TransportExtend::where(['weid' =>weid()])->order('id asc')->select()->toArray();
- if (empty($extend_list)) {
- return 0;
- } else {
- return $this->calc_unit($area_id, $buy_num, $extend_list);
- }
- }
- /**
- * 计算某个具单元的运费
- *
- * @param 配送地区 $area_id
- * @param 购买数量 $num
- * @param 运费模板内容 $extend
- * @return number 总运费
- */
- private function calc_unit($area_id, $num, $extend)
- {
- if (!empty($extend) && is_array($extend)) {
- $calc_total = array(
- 'error' => '该地区不配送!!'
- );
- //dump($extend);
- foreach ($extend as $v) {
- /**
- * strpos函数返回字符串在另一个字符串中第一次出现的位置,没有该字符返回false
- * 参数1,字符串
- * 参数2,要查找的字符
- */
- if (strpos($v['area_id'], "," . $area_id . ",") !== false) {
- unset($calc_total['error']);
- $areaarray = Area::find($area_id);
- if (!empty($areaarray)) {
- $areaarray = $areaarray->toArray();
- }
- 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']));
- }
- $calc_total['info'] = $areaarray['area_name'] . ',首重(小于等于1千克KG) ' . $v['sprice'] . '元'
- . ' 续重(每千克KG) ' . $v['xprice'] . '元,总计 ' . $num . ' 千克KG';
- return $calc_total;
- }
- }
- //没有找到则选择默认运费选项
- if (isset($extend[0]) && is_array($extend)) {
- unset($calc_total['error']);
- $areaarray = Area::find($area_id);
- if (!empty($areaarray)) {
- $areaarray = $areaarray->toArray();
- }
- if ($num <= $extend[0]['snum']) {
- //在首重数量范围内
- $calc_total['price'] = $extend[0]['sprice'];
- } else {
- //超出首重数量范围,需要计算续重
- $calc_total['price'] = sprintf('%.2f', ($extend[0]['sprice'] + ceil(($num - $extend[0]['snum']) / $extend[0]['xnum']) * $extend[0]['xprice']));
- }
- $calc_total['info'] = $areaarray['area_name'] . ',首重(小于等于1千克KG) ' . $extend[0]['sprice'] . '元'
- . ' 续重(每千克KG) ' . $extend[0]['xprice'] . '元,总计 ' . $num . ' 千克KG';
- return $calc_total;
- }
- return $calc_total;
- }
- }
- }
|