TransportExtend.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. namespace app\model;
  3. use think\Model;
  4. class TransportExtend extends Model
  5. {
  6. protected $connection = 'mysql';
  7. protected $pk = 'id';
  8. protected $name = 'transport_extend';
  9. public function calc_transport($buy_num, $area_id)
  10. {
  11. if (empty($area_id)) {
  12. return 0;
  13. }
  14. $extend_list = TransportExtend::where(['weid' =>weid()])->order('id asc')->select()->toArray();
  15. if (empty($extend_list)) {
  16. return 0;
  17. } else {
  18. return $this->calc_unit($area_id, $buy_num, $extend_list);
  19. }
  20. }
  21. /**
  22. * 计算某个具单元的运费
  23. *
  24. * @param 配送地区 $area_id
  25. * @param 购买数量 $num
  26. * @param 运费模板内容 $extend
  27. * @return number 总运费
  28. */
  29. private function calc_unit($area_id, $num, $extend)
  30. {
  31. if (!empty($extend) && is_array($extend)) {
  32. $calc_total = array(
  33. 'error' => '该地区不配送!!'
  34. );
  35. //dump($extend);
  36. foreach ($extend as $v) {
  37. /**
  38. * strpos函数返回字符串在另一个字符串中第一次出现的位置,没有该字符返回false
  39. * 参数1,字符串
  40. * 参数2,要查找的字符
  41. */
  42. if (strpos($v['area_id'], "," . $area_id . ",") !== false) {
  43. unset($calc_total['error']);
  44. $areaarray = Area::find($area_id);
  45. if (!empty($areaarray)) {
  46. $areaarray = $areaarray->toArray();
  47. }
  48. if ($num <= $v['snum']) {
  49. //在首重数量范围内
  50. $calc_total['price'] = $v['sprice'];
  51. } else {
  52. //超出首重数量范围,需要计算续重
  53. $calc_total['price'] = sprintf('%.2f', ($v['sprice'] + ceil(($num - $v['snum']) / $v['xnum']) * $v['xprice']));
  54. }
  55. $calc_total['info'] = $areaarray['area_name'] . ',首重(小于等于1千克KG) ' . $v['sprice'] . '元'
  56. . ' 续重(每千克KG) ' . $v['xprice'] . '元,总计 ' . $num . ' 千克KG';
  57. return $calc_total;
  58. }
  59. }
  60. //没有找到则选择默认运费选项
  61. if (isset($extend[0]) && is_array($extend)) {
  62. unset($calc_total['error']);
  63. $areaarray = Area::find($area_id);
  64. if (!empty($areaarray)) {
  65. $areaarray = $areaarray->toArray();
  66. }
  67. if ($num <= $extend[0]['snum']) {
  68. //在首重数量范围内
  69. $calc_total['price'] = $extend[0]['sprice'];
  70. } else {
  71. //超出首重数量范围,需要计算续重
  72. $calc_total['price'] = sprintf('%.2f', ($extend[0]['sprice'] + ceil(($num - $extend[0]['snum']) / $extend[0]['xnum']) * $extend[0]['xprice']));
  73. }
  74. $calc_total['info'] = $areaarray['area_name'] . ',首重(小于等于1千克KG) ' . $extend[0]['sprice'] . '元'
  75. . ' 续重(每千克KG) ' . $extend[0]['xprice'] . '元,总计 ' . $num . ' 千克KG';
  76. return $calc_total;
  77. }
  78. return $calc_total;
  79. }
  80. }
  81. }