LocaltownDeliveryModel.class.php 71 KB

1
  1. <?php namespace Home\Model; use Think\Model; /** * 同城配送模型 * @author fish * */ class LocaltownDeliveryModel { public $table = 'pin'; public $state_arr = array( 0 =>'未付款,未配送', 1=>'已付款,未被抢', 2=>'已付款,待配送,已被抢单', 3=>'已拿货,配送中', 4=>'已送达', 5=>'已取消' ); /** * 计算大约送达时间 * 大约送达时间的总和为 :出单时间 + 配送时间 */ public function get_order_dispatchtime($seller_goodss) { $delivery_time = ""; $total_time = 0; foreach($seller_goodss as $store_id=>$v){ if($store_id == 0){ $localtown_outorder_time = D('Home/Front')->get_config_by_name('localtown_outorder_time');//出单时长 分钟 $localtown_outorder_time = isset($localtown_outorder_time) && $localtown_outorder_time > 0 ? $localtown_outorder_time:0; $localtown_delivery_time = D('Home/Front')->get_config_by_name('localtown_delivery_time'); $localtown_delivery_time = isset($localtown_delivery_time) && $localtown_delivery_time > 0 ? $localtown_delivery_time : 0; $total_time_txt = $localtown_outorder_time + $localtown_delivery_time; if($total_time_txt > $total_time){ $total_time = $total_time_txt; } }else{ $localtown_outorder_time = D('Home/Front')->get_supply_config_by_name('localtown_outorder_time',$store_id);//出单时长 分钟 $localtown_outorder_time = isset($localtown_outorder_time) && $localtown_outorder_time > 0 ? $localtown_outorder_time:0; $localtown_delivery_time = D('Home/Front')->get_supply_config_by_name('localtown_delivery_time',$store_id); $localtown_delivery_time = isset($localtown_delivery_time) && $localtown_delivery_time > 0 ? $localtown_delivery_time : 0; $total_time_txt = $localtown_outorder_time + $localtown_delivery_time; if($total_time_txt > $total_time){ $total_time = $total_time_txt; } } } //营业时间段是否开启 $localtown_business_hours_status = D('Home/Front')->get_config_by_name('localtown_business_hours_status'); //营业开始时间 $localtown_business_hours_begin = D('Home/Front')->get_config_by_name('localtown_business_hours_begin'); //营业结束时间 $localtown_business_hours_end = D('Home/Front')->get_config_by_name('localtown_business_hours_end'); $delivery_time = date('H:i',strtotime("+".$total_time." minute")); if(isset($localtown_business_hours_status) && $localtown_business_hours_status == 1){ if(strtotime(date('H:i')) < strtotime($localtown_business_hours_begin)){ $delivery_time = date('H:i',strtotime($localtown_business_hours_begin." +".$total_time." minute")); } if(strtotime($delivery_time) < strtotime($localtown_business_hours_begin)){ $delivery_time = date('m-d H:i',strtotime($delivery_time." +1 day")); }else{ if(strtotime($delivery_time) > strtotime($localtown_business_hours_end)){ $delivery_time = date('m-d H:i',strtotime($localtown_business_hours_begin." +1 day")); } } } return $delivery_time; } /* * 购物车商品的包装费 * *//** public function calc_packing_money( $seller_goodss ) { //设置商品统一包装费 $localtown_delivery_packingmoney = D('Home/Front')->get_config_by_name('localtown_delivery_packingmoney'); //是否叠加, 0 叠加,1不叠加 $localtown_superposition_pickingmoney = D('Home/Front')->get_config_by_name('localtown_superposition_pickingmoney'); $localtown_superposition_pickingmoney = isset($localtown_superposition_pickingmoney) ? $localtown_superposition_pickingmoney : 0; $packing_arr = array(); if( $localtown_superposition_pickingmoney == 0 ) { $picking_totalmoney = 0; foreach( $seller_goodss as $store_id => $val) { $store_packing_fare = 0; foreach($val['goods'] as $kk =>$d_goods) { $store_packing_fare += $d_goods['packing_free']*$d_goods['quantity']; } $packing_arr[$store_id] = $store_packing_fare; $picking_totalmoney += $store_packing_fare; } $packing_arr['total_picking_fare'] = $picking_totalmoney; return $packing_arr; }else if( $localtown_superposition_pickingmoney == 1 )//todo..不叠加的包装费 { $picking_totalmoney = 0; foreach( $seller_goodss as $store_id => $val) { $store_packing_fare = 0; foreach($val['goods'] as $kk =>$d_goods) { if( $d_goods['packing_free'] > $store_packing_fare ) { $store_packing_fare = $d_goods['packing_free']; } } $packing_arr[$store_id] = $store_packing_fare; $picking_totalmoney += $store_packing_fare; } $packing_arr['total_picking_fare'] = $picking_totalmoney; return $packing_arr; } }*/ /** * 购物车商品的包装费 * */ public function calc_packing_money( $seller_goodss ) { $packing_arr = array(); $total_picking_fare = 0; foreach( $seller_goodss as $store_id => $val) { if($store_id == 0){ //设置商品统一包装费 $localtown_delivery_packingmoney = D('Home/Front')->get_config_by_name('localtown_delivery_packingmoney'); //是否叠加, 0 叠加,1不叠加 $localtown_superposition_pickingmoney = D('Home/Front')->get_config_by_name('localtown_superposition_pickingmoney'); $localtown_superposition_pickingmoney = isset($localtown_superposition_pickingmoney) ? $localtown_superposition_pickingmoney : 0; $picking_totalmoney = 0; $store_packing_fare = 0; if( $localtown_superposition_pickingmoney == 0 ) { foreach($val['goods'] as $kk =>$d_goods) { $store_packing_fare += $d_goods['packing_free']*$d_goods['quantity']; } $packing_arr[$store_id] = $store_packing_fare; $picking_totalmoney += $store_packing_fare; $total_picking_fare = $total_picking_fare + $picking_totalmoney; }else if( $localtown_superposition_pickingmoney == 1 )//todo..不叠加的包装费 { foreach($val['goods'] as $kk =>$d_goods) { if( $d_goods['packing_free'] > $store_packing_fare ) { $store_packing_fare = $d_goods['packing_free']; } } $packing_arr[$store_id] = $store_packing_fare; $picking_totalmoney += $store_packing_fare; $total_picking_fare = $total_picking_fare + $picking_totalmoney; } }else{ //设置商品统一包装费 $localtown_delivery_packingmoney = D('Home/Front')->get_supply_config_by_name('localtown_delivery_packingmoney',$store_id); //是否叠加, 0 叠加,1不叠加 $localtown_superposition_pickingmoney = D('Home/Front')->get_supply_config_by_name('localtown_superposition_pickingmoney',$store_id); $localtown_superposition_pickingmoney = isset($localtown_superposition_pickingmoney) ? $localtown_superposition_pickingmoney : 0; $picking_totalmoney = 0; $store_packing_fare = 0; if( $localtown_superposition_pickingmoney == 0 ) { foreach($val['goods'] as $kk =>$d_goods) { $store_packing_fare += $d_goods['packing_free']*$d_goods['quantity']; } $packing_arr[$store_id] = $store_packing_fare; $picking_totalmoney += $store_packing_fare; $total_picking_fare = $total_picking_fare + $picking_totalmoney; }else if( $localtown_superposition_pickingmoney == 1 )//todo..不叠加的包装费 { foreach($val['goods'] as $kk =>$d_goods) { if( $d_goods['packing_free'] > $store_packing_fare ) { $store_packing_fare = $d_goods['packing_free']; } } $packing_arr[$store_id] = $store_packing_fare; $picking_totalmoney += $store_packing_fare; $total_picking_fare = $total_picking_fare + $picking_totalmoney; } } } $packing_arr['total_picking_fare'] = $total_picking_fare; return $packing_arr; } /** * 计算购物车商品配送费 * * D('Home/LocaltownDelivery')->calc_shipping_fare( $lon, $lat , $seller_goodss ); public function calc_shipping_fare( $lon, $lat , $seller_goodss ) { $localtown_delivery_moneytype = D('Home/Front')->get_config_by_name('localtown_delivery_moneytype'); $localtown_delivery_moneytype = isset($localtown_delivery_moneytype) ? $localtown_delivery_moneytype : 0; /** * 结构: * store_id * shipping_fare =x * is_fare_shipping = 1/0 * qi_fare_money =x * is_can_qisong = 1 * * total_info * shipping_fare =x * is_fare_shipping = 1/0 * qi_fare_money =x * is_can_qisong = 1 * * localtown_moneytype_fixed_money if( $localtown_delivery_moneytype == 0 ) { //配送费 $localtown_moneytype_fixed_money = D('Home/Front')->get_config_by_name('localtown_moneytype_fixed_money'); $localtown_moneytype_fixed_money = isset($localtown_moneytype_fixed_money) ? $localtown_moneytype_fixed_money : 0; //起送价格 $localtown_moneytype_fixed_deliverymoney = D('Home/Front')->get_config_by_name('localtown_moneytype_fixed_deliverymoney'); $localtown_moneytype_fixed_deliverymoney = isset($localtown_moneytype_fixed_deliverymoney) ? $localtown_moneytype_fixed_deliverymoney : 0; //达到多少免配送费 $localtown_moneytype_fixed_freemoney = D('Home/Front')->get_config_by_name('localtown_moneytype_fixed_freemoney'); $localtown_moneytype_fixed_freemoney = isset($localtown_moneytype_fixed_freemoney) ? $localtown_moneytype_fixed_freemoney : 0; //加价配送费 $localtown_makeup_delivery_money = D('Home/Front')->get_config_by_name('localtown_makeup_delivery_money'); $localtown_makeup_delivery_money = isset($localtown_makeup_delivery_money) ? $localtown_makeup_delivery_money : 0; $shipping_fare_arr = array(); $total_shipping_fare = 0;//这一单所有的配送费 $total_yl_shipping_fare = 0;//这一单原来配送费 //固定配送费 foreach( $seller_goodss as $store_id => $val) { $store_total_fare = 0; $store_shipping_fare = $localtown_moneytype_fixed_money;//运费 $is_can_qisong =0; $is_fare_shipping = 0; $yl_shipping_fare = 0;//这一单原来配送费 $localtown_add_shipping_fare = 0;//订单加价配送费 foreach($val['goods'] as $kk =>$d_goods) { $store_total_fare += $d_goods['total']; } $yl_shipping_fare = $store_shipping_fare; //先判断是否免配送费 if( $localtown_moneytype_fixed_freemoney > 0 && $store_total_fare >= $localtown_moneytype_fixed_freemoney) { $store_shipping_fare = 0; $is_fare_shipping = 1; } //判断是否符合起送价格 if( $store_total_fare >=$localtown_moneytype_fixed_deliverymoney ) { $is_can_qisong = 1; }else{ if($localtown_moneytype_fixed_deliverymoney > 0){ $localtown_add_shipping_fare = $localtown_makeup_delivery_money; } } $total_shipping_fare += $store_shipping_fare; $total_yl_shipping_fare += $yl_shipping_fare; $shipping_fare_arr[$store_id] = array( 'shipping_fare' => $store_shipping_fare, 'is_can_qisong' => $is_can_qisong, 'is_fare_shipping' => $is_fare_shipping, 'store_total_fare' => $store_total_fare, 'yl_shipping_fare'=>$yl_shipping_fare, 'localtown_add_shipping_fare'=>$localtown_add_shipping_fare ); } $shipping_fare_arr['total_shipping_fare'] = $total_shipping_fare; $shipping_fare_arr['total_yl_shipping_fare'] = $total_yl_shipping_fare; return $shipping_fare_arr; }else if( $localtown_delivery_moneytype == 1 ){ //根据距离计算配送费 //起步价 $localtown_moneytype_basedistance_deliverymoney = D('Home/Front')->get_config_by_name('localtown_moneytype_basedistance_deliverymoney'); $localtown_moneytype_basedistance_deliverymoney = isset($localtown_moneytype_basedistance_deliverymoney) ? $localtown_moneytype_basedistance_deliverymoney : 0; //起送价格 $localtown_moneytype_fixed_deliverymoney = D('Home/Front')->get_config_by_name('localtown_moneytype_fixed_deliverymoney'); $localtown_moneytype_fixed_deliverymoney = isset($localtown_moneytype_fixed_deliverymoney) ? $localtown_moneytype_fixed_deliverymoney : 0; //达到多少免配送费 $localtown_moneytype_fixed_freemoney = D('Home/Front')->get_config_by_name('localtown_moneytype_fixed_freemoney'); $localtown_moneytype_fixed_freemoney = isset($localtown_moneytype_fixed_freemoney) ? $localtown_moneytype_fixed_freemoney : 0; //配送范围内公里数 $localtown_moneytype_basedistance = D('Home/Front')->get_config_by_name('localtown_moneytype_basedistance'); $localtown_moneytype_basedistance = isset($localtown_moneytype_basedistance) && $localtown_moneytype_basedistance > 0 ? $localtown_moneytype_basedistance: 0; //超出配送范围内, 每公里收取多少钱 $localtown_moneytype_base_perkmaddmoney = D('Home/Front')->get_config_by_name('localtown_moneytype_base_perkmaddmoney'); $localtown_moneytype_base_perkmaddmoney = isset($localtown_moneytype_base_perkmaddmoney) && $localtown_moneytype_base_perkmaddmoney >0 ? $localtown_moneytype_base_perkmaddmoney : 0; //最多收取配送费多少钱 $localtown_moneytype_base_maxdeliverymoney = D('Home/Front')->get_config_by_name('localtown_moneytype_base_maxdeliverymoney'); $localtown_moneytype_base_maxdeliverymoney = isset($localtown_moneytype_base_maxdeliverymoney) && $localtown_moneytype_base_maxdeliverymoney > 0 ? $localtown_moneytype_base_maxdeliverymoney : 0; //商家位置经纬度 $localtown_shop_lon = D('Home/Front')->get_config_by_name('localtown_shop_lon'); $localtown_shop_lon = isset($localtown_shop_lon) && $localtown_shop_lon > 0 ? $localtown_shop_lon : 0; $localtown_shop_lat = D('Home/Front')->get_config_by_name('localtown_shop_lat'); $localtown_shop_lat = isset($localtown_shop_lat) && $localtown_shop_lat >0 ? $localtown_shop_lat:0; $distince = D('Seller/Communityhead')->GetDistance($localtown_shop_lon,$localtown_shop_lat, $lon, $lat); $distince = ceil($distince / 1000);//KM距离 $shipping_fare_arr = array(); $total_shipping_fare = 0;//这一单所有的配送费 $total_yl_shipping_fare = 0;//这一单原来配送费 $localtown_add_shipping_fare = 0;//订单加价配送费 //固定配送费 foreach( $seller_goodss as $store_id => $val) { $yl_shipping_fare = 0;//这一单原来配送费 $store_total_fare = 0; //$store_shipping_fare = $localtown_moneytype_fixed_money;//运费 if( $distince > $localtown_moneytype_basedistance ) { $store_shipping_fare = $localtown_moneytype_basedistance_deliverymoney + ($distince - $localtown_moneytype_basedistance ) * $localtown_moneytype_base_perkmaddmoney; if( $localtown_moneytype_base_maxdeliverymoney > 0 && $store_shipping_fare > $localtown_moneytype_base_maxdeliverymoney ) { $store_shipping_fare = $localtown_moneytype_base_maxdeliverymoney; } }else { $store_shipping_fare = $localtown_moneytype_basedistance_deliverymoney; } $is_can_qisong = 1; $is_fare_shipping = 0; foreach ($val['goods'] as $kk => $d_goods) { $store_total_fare += $d_goods['total']; } //先判断是否免配送费 if( $localtown_moneytype_fixed_freemoney > 0 && $store_total_fare > $localtown_moneytype_fixed_freemoney) { $store_shipping_fare = 0; $is_fare_shipping = 1; } //判断是否符合起送价格 /*if( $store_total_fare >=$localtown_moneytype_fixed_deliverymoney ) { $is_can_qisong = 1; } $total_shipping_fare += $store_shipping_fare; $yl_shipping_fare = $store_shipping_fare; $total_yl_shipping_fare += $yl_shipping_fare; $shipping_fare_arr[$store_id] = array( 'shipping_fare' => $store_shipping_fare, 'is_can_qisong' => $is_can_qisong, 'is_fare_shipping' => $is_fare_shipping, 'store_total_fare' => $store_total_fare, 'yl_shipping_fare' => $yl_shipping_fare, 'localtown_add_shipping_fare'=>$localtown_add_shipping_fare ); } $shipping_fare_arr['total_shipping_fare'] = $total_shipping_fare; $shipping_fare_arr['total_yl_shipping_fare'] = $total_yl_shipping_fare; return $shipping_fare_arr; } }*/ /** * @author cy 2020.08.03 * 计算购物车商品配送费 * * D('Home/LocaltownDelivery')->calc_shipping_fare( $lon, $lat , $seller_goodss ); */ public function calc_shipping_fare( $lon, $lat , $seller_goodss ) { $shipping_fare_arr = array(); $total_shipping_fare = 0;//这一单所有的配送费 $total_yl_shipping_fare = 0;//这一单原来配送费 foreach( $seller_goodss as $store_id => $val){ if($store_id == 0){//平台自营 $localtown_delivery_moneytype = D('Home/Front')->get_config_by_name('localtown_delivery_moneytype'); $localtown_delivery_moneytype = isset($localtown_delivery_moneytype) ? $localtown_delivery_moneytype : 0; if( $localtown_delivery_moneytype == 0 ) { //配送费 $localtown_moneytype_fixed_money = D('Home/Front')->get_config_by_name('localtown_moneytype_fixed_money'); $localtown_moneytype_fixed_money = isset($localtown_moneytype_fixed_money) ? $localtown_moneytype_fixed_money : 0; //起送价格 $localtown_moneytype_fixed_deliverymoney = D('Home/Front')->get_config_by_name('localtown_moneytype_fixed_deliverymoney'); $localtown_moneytype_fixed_deliverymoney = isset($localtown_moneytype_fixed_deliverymoney) ? $localtown_moneytype_fixed_deliverymoney : 0; //达到多少免配送费 $localtown_moneytype_fixed_freemoney = D('Home/Front')->get_config_by_name('localtown_moneytype_fixed_freemoney'); $localtown_moneytype_fixed_freemoney = isset($localtown_moneytype_fixed_freemoney) ? $localtown_moneytype_fixed_freemoney : 0; //加价配送费 $localtown_makeup_delivery_money = D('Home/Front')->get_config_by_name('localtown_makeup_delivery_money'); $localtown_makeup_delivery_money = isset($localtown_makeup_delivery_money) ? $localtown_makeup_delivery_money : 0; $store_total_fare = 0;//订单总金额 $store_shipping_fare = $localtown_moneytype_fixed_money;//运费 $is_can_qisong = 0; $is_fare_shipping = 0; $yl_shipping_fare = 0;//这一单原来配送费 $localtown_add_shipping_fare = 0;//订单加价配送费 foreach($val['goods'] as $kk =>$d_goods) { $store_total_fare += $d_goods['total']; } $yl_shipping_fare = $store_shipping_fare; //先判断是否免配送费 if( $localtown_moneytype_fixed_freemoney > 0 && $store_total_fare >= $localtown_moneytype_fixed_freemoney) { $store_shipping_fare = 0; $is_fare_shipping = 1; } //判断是否符合起送价格 if( $store_total_fare >=$localtown_moneytype_fixed_deliverymoney ) { $is_can_qisong = 1; }else{ if($localtown_moneytype_fixed_deliverymoney > 0){ $localtown_add_shipping_fare = $localtown_makeup_delivery_money; } } $total_shipping_fare += $store_shipping_fare; $total_yl_shipping_fare += $yl_shipping_fare; $shipping_fare_arr[$store_id] = array( 'shipping_fare' => $store_shipping_fare, 'is_can_qisong' => $is_can_qisong, 'is_fare_shipping' => $is_fare_shipping, 'store_total_fare' => $store_total_fare, 'yl_shipping_fare'=>$yl_shipping_fare, 'localtown_add_shipping_fare'=>$localtown_add_shipping_fare ); }else if( $localtown_delivery_moneytype == 1 ) { //根据距离计算配送费 //起步价 $localtown_moneytype_basedistance_deliverymoney = D('Home/Front')->get_config_by_name('localtown_moneytype_basedistance_deliverymoney'); $localtown_moneytype_basedistance_deliverymoney = isset($localtown_moneytype_basedistance_deliverymoney) ? $localtown_moneytype_basedistance_deliverymoney : 0; //起送价格 /*$localtown_moneytype_fixed_deliverymoney = D('Home/Front')->get_config_by_name('localtown_moneytype_fixed_deliverymoney'); $localtown_moneytype_fixed_deliverymoney = isset($localtown_moneytype_fixed_deliverymoney) ? $localtown_moneytype_fixed_deliverymoney : 0; //达到多少免配送费 $localtown_moneytype_fixed_freemoney = D('Home/Front')->get_config_by_name('localtown_moneytype_fixed_freemoney'); $localtown_moneytype_fixed_freemoney = isset($localtown_moneytype_fixed_freemoney) ? $localtown_moneytype_fixed_freemoney : 0;*/ //配送范围内公里数 $localtown_moneytype_basedistance = D('Home/Front')->get_config_by_name('localtown_moneytype_basedistance'); $localtown_moneytype_basedistance = isset($localtown_moneytype_basedistance) && $localtown_moneytype_basedistance > 0 ? $localtown_moneytype_basedistance : 0; //超出配送范围内, 每公里收取多少钱 $localtown_moneytype_base_perkmaddmoney = D('Home/Front')->get_config_by_name('localtown_moneytype_base_perkmaddmoney'); $localtown_moneytype_base_perkmaddmoney = isset($localtown_moneytype_base_perkmaddmoney) && $localtown_moneytype_base_perkmaddmoney > 0 ? $localtown_moneytype_base_perkmaddmoney : 0; //最多收取配送费多少钱 $localtown_moneytype_base_maxdeliverymoney = D('Home/Front')->get_config_by_name('localtown_moneytype_base_maxdeliverymoney'); $localtown_moneytype_base_maxdeliverymoney = isset($localtown_moneytype_base_maxdeliverymoney) && $localtown_moneytype_base_maxdeliverymoney > 0 ? $localtown_moneytype_base_maxdeliverymoney : 0; //商家位置经纬度 $localtown_shop_lon = D('Home/Front')->get_config_by_name('localtown_shop_lon'); $localtown_shop_lon = isset($localtown_shop_lon) && $localtown_shop_lon > 0 ? $localtown_shop_lon : 0; $localtown_shop_lat = D('Home/Front')->get_config_by_name('localtown_shop_lat'); $localtown_shop_lat = isset($localtown_shop_lat) && $localtown_shop_lat > 0 ? $localtown_shop_lat : 0; $distince = D('Seller/Communityhead')->GetDistance($localtown_shop_lon, $localtown_shop_lat, $lon, $lat); $distince = ceil($distince / 1000);//KM距离 $localtown_add_shipping_fare = 0;//订单加价配送费 $yl_shipping_fare = 0;//这一单原来配送费 $store_total_fare = 0; $store_shipping_fare = 0;//配送运费 if ($distince > $localtown_moneytype_basedistance) { $store_shipping_fare = $localtown_moneytype_basedistance_deliverymoney + ($distince - $localtown_moneytype_basedistance) * $localtown_moneytype_base_perkmaddmoney; if ($localtown_moneytype_base_maxdeliverymoney > 0 && $store_shipping_fare > $localtown_moneytype_base_maxdeliverymoney) { $store_shipping_fare = $localtown_moneytype_base_maxdeliverymoney; } } else { $store_shipping_fare = $localtown_moneytype_basedistance_deliverymoney; } $is_can_qisong = 1; $is_fare_shipping = 0; foreach($val['goods'] as $kk =>$d_goods) { $store_total_fare += $d_goods['total']; } $total_shipping_fare += $store_shipping_fare; $yl_shipping_fare = $store_shipping_fare; $total_yl_shipping_fare += $yl_shipping_fare; $shipping_fare_arr[$store_id] = array( 'shipping_fare' => $store_shipping_fare, 'is_can_qisong' => $is_can_qisong, 'is_fare_shipping' => $is_fare_shipping, 'store_total_fare' => $store_total_fare, 'yl_shipping_fare' => $yl_shipping_fare, 'localtown_add_shipping_fare' => $localtown_add_shipping_fare ); } }else if($store_id > 0){//供应商商品 $localtown_delivery_moneytype = D('Home/Front')->get_supply_config_by_name('localtown_delivery_moneytype',$store_id); $localtown_delivery_moneytype = isset($localtown_delivery_moneytype) ? $localtown_delivery_moneytype : 0; if( $localtown_delivery_moneytype == 0 ) { //配送费 $localtown_moneytype_fixed_money = D('Home/Front')->get_supply_config_by_name('localtown_moneytype_fixed_money',$store_id); $localtown_moneytype_fixed_money = isset($localtown_moneytype_fixed_money) ? $localtown_moneytype_fixed_money : 0; //起送价格 $localtown_moneytype_fixed_deliverymoney = D('Home/Front')->get_supply_config_by_name('localtown_moneytype_fixed_deliverymoney',$store_id); $localtown_moneytype_fixed_deliverymoney = isset($localtown_moneytype_fixed_deliverymoney) ? $localtown_moneytype_fixed_deliverymoney : 0; //达到多少免配送费 $localtown_moneytype_fixed_freemoney = D('Home/Front')->get_supply_config_by_name('localtown_moneytype_fixed_freemoney',$store_id); $localtown_moneytype_fixed_freemoney = isset($localtown_moneytype_fixed_freemoney) ? $localtown_moneytype_fixed_freemoney : 0; //加价配送费 $localtown_makeup_delivery_money = D('Home/Front')->get_supply_config_by_name('localtown_makeup_delivery_money',$store_id); $localtown_makeup_delivery_money = isset($localtown_makeup_delivery_money) ? $localtown_makeup_delivery_money : 0; $store_total_fare = 0;//订单总金额 $store_shipping_fare = $localtown_moneytype_fixed_money;//运费 $is_can_qisong = 0; $is_fare_shipping = 0; $yl_shipping_fare = 0;//这一单原来配送费 $localtown_add_shipping_fare = 0;//订单加价配送费 foreach($val['goods'] as $kk =>$d_goods) { $store_total_fare += $d_goods['total']; } $yl_shipping_fare = $store_shipping_fare; //先判断是否免配送费 if( $localtown_moneytype_fixed_freemoney > 0 && $store_total_fare >= $localtown_moneytype_fixed_freemoney) { $store_shipping_fare = 0; $is_fare_shipping = 1; } //判断是否符合起送价格 if( $store_total_fare >=$localtown_moneytype_fixed_deliverymoney ) { $is_can_qisong = 1; }else{ if($localtown_moneytype_fixed_deliverymoney > 0){ $localtown_add_shipping_fare = $localtown_makeup_delivery_money; } } $total_shipping_fare += $store_shipping_fare; $total_yl_shipping_fare += $yl_shipping_fare; $shipping_fare_arr[$store_id] = array( 'shipping_fare' => $store_shipping_fare, 'is_can_qisong' => $is_can_qisong, 'is_fare_shipping' => $is_fare_shipping, 'store_total_fare' => $store_total_fare, 'yl_shipping_fare'=>$yl_shipping_fare, 'localtown_add_shipping_fare'=>$localtown_add_shipping_fare ); }else if( $localtown_delivery_moneytype == 1 ) { //根据距离计算配送费 //起步价 $localtown_moneytype_basedistance_deliverymoney = D('Home/Front')->get_supply_config_by_name('localtown_moneytype_basedistance_deliverymoney',$store_id); $localtown_moneytype_basedistance_deliverymoney = isset($localtown_moneytype_basedistance_deliverymoney) ? $localtown_moneytype_basedistance_deliverymoney : 0; //配送范围内公里数 $localtown_moneytype_basedistance = D('Home/Front')->get_supply_config_by_name('localtown_moneytype_basedistance',$store_id); $localtown_moneytype_basedistance = isset($localtown_moneytype_basedistance) && $localtown_moneytype_basedistance > 0 ? $localtown_moneytype_basedistance : 0; //超出配送范围内, 每公里收取多少钱 $localtown_moneytype_base_perkmaddmoney = D('Home/Front')->get_supply_config_by_name('localtown_moneytype_base_perkmaddmoney',$store_id); $localtown_moneytype_base_perkmaddmoney = isset($localtown_moneytype_base_perkmaddmoney) && $localtown_moneytype_base_perkmaddmoney > 0 ? $localtown_moneytype_base_perkmaddmoney : 0; //最多收取配送费多少钱 $localtown_moneytype_base_maxdeliverymoney = D('Home/Front')->get_supply_config_by_name('localtown_moneytype_base_maxdeliverymoney',$store_id); $localtown_moneytype_base_maxdeliverymoney = isset($localtown_moneytype_base_maxdeliverymoney) && $localtown_moneytype_base_maxdeliverymoney > 0 ? $localtown_moneytype_base_maxdeliverymoney : 0; //商家位置经纬度 $localtown_shop_lon = D('Home/Front')->get_supply_config_by_name('localtown_shop_lon',$store_id); $localtown_shop_lon = isset($localtown_shop_lon) && $localtown_shop_lon > 0 ? $localtown_shop_lon : 0; $localtown_shop_lat = D('Home/Front')->get_supply_config_by_name('localtown_shop_lat',$store_id); $localtown_shop_lat = isset($localtown_shop_lat) && $localtown_shop_lat > 0 ? $localtown_shop_lat : 0; $distince = D('Seller/Communityhead')->GetDistance($localtown_shop_lon, $localtown_shop_lat, $lon, $lat); $distince = ceil($distince / 1000);//KM距离 $localtown_add_shipping_fare = 0;//订单加价配送费 $yl_shipping_fare = 0;//这一单原来配送费 $store_total_fare = 0; $store_shipping_fare = 0;//配送运费 if ($distince > $localtown_moneytype_basedistance) { $store_shipping_fare = $localtown_moneytype_basedistance_deliverymoney + ($distince - $localtown_moneytype_basedistance) * $localtown_moneytype_base_perkmaddmoney; if ($localtown_moneytype_base_maxdeliverymoney > 0 && $store_shipping_fare > $localtown_moneytype_base_maxdeliverymoney) { $store_shipping_fare = $localtown_moneytype_base_maxdeliverymoney; } } else { $store_shipping_fare = $localtown_moneytype_basedistance_deliverymoney; } $is_can_qisong = 1; $is_fare_shipping = 0; foreach($val['goods'] as $kk =>$d_goods) { $store_total_fare += $d_goods['total']; } $total_shipping_fare += $store_shipping_fare; $yl_shipping_fare = $store_shipping_fare; $total_yl_shipping_fare += $yl_shipping_fare; $shipping_fare_arr[$store_id] = array( 'shipping_fare' => $store_shipping_fare, 'is_can_qisong' => $is_can_qisong, 'is_fare_shipping' => $is_fare_shipping, 'store_total_fare' => $store_total_fare, 'yl_shipping_fare' => $yl_shipping_fare, 'localtown_add_shipping_fare' => $localtown_add_shipping_fare ); } } } $shipping_fare_arr['total_shipping_fare'] = $total_shipping_fare; $shipping_fare_arr['total_yl_shipping_fare'] = $total_yl_shipping_fare; return $shipping_fare_arr; } /** * 更改配送单状态,改为已支付TODO */ public function change_distribution_order_state( $order_id, $orderdistribution_id, $state, $is_front) { switch( $state ) { case 1://已付款,备货中 M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 1) ); $info = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->find(); $this->write_redis_distribution_info( $info['id'] ); $remark = '商家已接单'; $this->write_distribution_log( $order_id, $orderdistribution_id, $state, $remark ); break; case 2://2 已付款,待配送,已被抢单 M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id , 'orderdistribution_id' => $orderdistribution_id ) )->save( array('state' => 2) ); $info = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->find(); $this->del_redis_distribution_info( $info['id'] ); $orderdistribution = M('lionfish_comshop_orderdistribution')->where( array('id' => $orderdistribution_id ) )->find(); $remark = '配送员:'.$orderdistribution['username'].',抢单成功'; $this->write_distribution_log( $order_id, $orderdistribution_id , $state ,$remark ); break; case 3://3,已拿货,配送中 M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id , 'orderdistribution_id' => $orderdistribution_id ) )->save( array('state' => 3) ); $orderdistribution = M('lionfish_comshop_orderdistribution')->where( array('id' => $orderdistribution_id ) )->find(); $remark = '配送员:'.$orderdistribution['username'].', 已到店拿货,配送中'; $this->write_distribution_log( $order_id, $orderdistribution_id , $state ,$remark ); break; case 4://4、已送达 M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id , 'orderdistribution_id' => $orderdistribution_id ) )->save( array('state' => 4) ); $orderdistribution = M('lionfish_comshop_orderdistribution')->where( array('id' => $orderdistribution_id ) )->find(); $remark = '配送员:'.$orderdistribution['username'].', 配送完成'; M('lionfish_comshop_orderdistribution')->where( array('id' => $orderdistribution_id ) )->setInc('has_send_count', 1); $this->write_distribution_log( $order_id, $orderdistribution_id , $state ,$remark ); if($is_front){ D('Home/Frontorder')->receive_order($order_id); } break; } } /** * 第三方配送公司 更改配送单状态,改为已支付TODO */ public function change_thirth_distribution_order_state( $order_id, $state, $other_data) { switch( $state ) { case 1://已付款,备货中 if($other_data['data_type'] == 'imdada'){ M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 1,'shipping_money'=>$other_data['delivery_fee'],'third_distribution_type'=>$other_data['data_type'], 'is_admin_assign'=>1,'delivery_type'=>2) ); }else if($other_data['data_type'] == 'sf'){ M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 1, 'shipping_money'=>$other_data['delivery_fee'], 'third_distribution_type'=>$other_data['data_type'], 'is_admin_assign'=>1, 'third_id'=>$other_data['delivery_bill_id'], 'third_order_id'=>$other_data['delivery_order_id'],'delivery_type'=>2 ) ); }else if( $other_data['data_type'] == 'make' ) { M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 1,'shipping_money'=>$other_data['delivery_fee'], 'third_distribution_type'=>$other_data['data_type'], 'third_order_id'=>$other_data['delivery_order_id'], 'is_admin_assign'=>1) ); }else if($other_data['data_type'] == 'ele'){//蜂鸟即配 M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 1, 'shipping_money'=>$other_data['delivery_fee'], 'third_distribution_type'=>$other_data['data_type'], 'is_admin_assign'=>1, 'third_order_id'=>$other_data['delivery_order_id'], 'delivery_type'=>2 ) ); } $remark = $other_data['delivery_company'].'已接单'; $this->write_distribution_log( $order_id, 0, $state, $remark ); break; case 2://2 已付款,待配送,已被抢单 if($other_data['data_type'] == 'imdada'){ $res = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 2,'dm_id'=>$other_data['dm_id'],'dm_name'=>$other_data['dm_name'],'dm_mobile'=>$other_data['dm_mobile'],'third_id'=>$other_data['third_id']) ); $info = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->find(); $this->del_redis_distribution_info( $info['id'] ); $remark = $other_data['delivery_company'].'配送员:'.$other_data['dm_name'].'已接单待取货'; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); }else if($other_data['data_type'] == 'sf'){ $res = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 2,'dm_name'=>$other_data['operator_name'],'dm_mobile'=>$other_data['operator_phone']) ); $info = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->find(); $this->del_redis_distribution_info( $info['id'] ); $operator_action = ""; if($other_data['order_status'] == 10){ $operator_action = "确认订单"; }else if($other_data['order_status'] == 12){ $operator_action = "到店"; } $remark = $other_data['delivery_company'].'配送员:'.$other_data['operator_name'].$operator_action; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); }else if($other_data['data_type'] == 'make'){ M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 2,'dm_name'=>$other_data['dm_name'],'dm_mobile'=>$other_data['dm_mobile']) ); $info = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->find(); $remark = $other_data['delivery_company'].'配送员:'.$other_data['dm_name'].'已接单待取货'; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); }else if($other_data['data_type'] == 'ele'){//蜂鸟即配 M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 2,'dm_name'=>$other_data['operator_name'],'dm_mobile'=>$other_data['operator_phone']) ); $info = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->find(); $remark = $other_data['delivery_company'].$other_data['desc']; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); } break; case 3://3,已拿货,配送中 if($other_data['data_type'] == 'imdada'){ $res = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 3,'dm_id'=>$other_data['dm_id'],'dm_name'=>$other_data['dm_name'],'dm_mobile'=>$other_data['dm_mobile'],'third_id'=>$other_data['third_id']) ); $remark = $other_data['delivery_company'].'配送员:'.$other_data['dm_name'].', 已到店拿货,配送中'; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); }else if($other_data['data_type'] == 'sf'){ $res = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 3,'dm_name'=>$other_data['operator_name'],'dm_mobile'=>$other_data['operator_phone']) ); $operator_action = ""; if($other_data['order_status'] == 15){ $operator_action = "配送中"; } $remark = $other_data['delivery_company'].'配送员:'.$other_data['operator_name'].$operator_action; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); }else if($other_data['data_type'] == 'make'){ M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 3,'dm_name'=>$other_data['dm_name'],'dm_mobile'=>$other_data['dm_mobile']) ); $remark = $other_data['delivery_company'].'配送员:'.$other_data['dm_name'].', 已到店拿货,配送中'; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); }else if($other_data['data_type'] == 'ele'){//蜂鸟即配 M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 3,'dm_name'=>$other_data['operator_name'],'dm_mobile'=>$other_data['operator_phone']) ); $remark = $other_data['delivery_company'].$other_data['desc']; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); } break; case 4://4、已送达 M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id ) )->save( array('state' => 4,'is_statement'=>1) ); $orderdistribution = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id ) )->find(); $remark = $other_data['delivery_company'].'配送员:'.$orderdistribution['dm_name'].', 配送完成'; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); break; case 5://5、已取消 if($other_data['data_type'] == 'imdada'){ $orderdistribution = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id ) )->find(); $cancel_reason = $other_data['cancel_reason']; if($other_data['order_status'] == 5){ if($other_data['cancel_from'] == 1){//达达配送员取消 $cancel_reason = $cancel_reason.",(".$orderdistribution['dm_name'].",".$orderdistribution['dm_mobile'].")"; }else if($other_data['cancel_from'] == 2){//商家主动取消 $cancel_reason = $cancel_reason; }else if($other_data['cancel_from'] == 3){//系统或客服取消 $cancel_reason = $cancel_reason; } }else if($other_data['order_status'] == 9 || $other_data['order_status'] == 10){ if(!empty($orderdistribution['dm_name'])){ $cancel_reason = $cancel_reason.",(".$orderdistribution['dm_name'].','.$orderdistribution['dm_mobile'].")"; } }else if($other_data['order_status'] == 100){ $cancel_reason = $cancel_reason; } M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id ) )->save( array('state' => 5,'cancel_reason'=>$cancel_reason,'delivery_type'=>0) ); $remark = $other_data['delivery_company'].'已取消,取消原因:'.$cancel_reason; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); }else if($other_data['data_type'] == 'sf'){ if($other_data['order_status'] == 2){//取消订单 M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id ) )->save( array('state' => 5,'cancel_reason'=>$other_data['status_desc'],'delivery_type'=>0) ); $remark = $other_data['delivery_company'].'取消订单,取消原因:'.$other_data['status_desc']; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); }else if($other_data['order_status'] == 0){//订单异常回调 M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id ) )->save( array('state' => 5,'cancel_reason'=>$other_data['ex_id'].$other_data['ex_content'],'delivery_type'=>0) ); $remark = $other_data['delivery_company'].'订单异常,异常详情:'.$other_data['ex_content']; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); } }else if($other_data['data_type'] == 'make'){ }else if($other_data['data_type'] == 'ele'){//蜂鸟即配 if($other_data['order_status'] == 100){//订单异常回调 M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id ) )->save( array('state' => 5,'cancel_reason'=>$other_data['desc'],'delivery_type'=>0) ); $remark = $other_data['delivery_company'].'订单异常,异常详情:'.$other_data['desc']; $this->write_distribution_log( $order_id, 0 , $state ,$remark ); } } break; } } /** * 用户取消配送单 */ public function member_cancle_order( $order_id ) { M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 5) ); $remark = '用户取消订单'; $this->write_distribution_log( $order_id, 0 , 5 ,$remark ); } /** * 后台管理员整单退款 */ public function admin_cancle_order( $order_id ) { M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id) )->save( array('state' => 5) ); $orderdistribution_order = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id ) )->find(); $state_arr = $this->state_arr; $remark = '管理员取消订单, 当前配送单状态: '.$state_arr[ $orderdistribution_order['state'] ]; $this->write_distribution_log( $order_id, 0 , 5 ,$remark ); } /** * @auth yj 2020-06-04 * @desc 配送员 获得订单(后台分配跟前台抢成功,都进入这里) * @param $orderdistribution_id * @param $order_id */ public function distribution_get_order( $orderdistribution_id , $order_id) { M()->startTrans(); $distribution_order = M('lionfish_comshop_orderdistribution_order')->lock(true)->where( array('order_id' => $order_id) )->find(); if( empty($distribution_order) ) { M()->rollback(); return false; }else{ //未发送第三方配送状态为1 已付款未配送 或者 已发送第三方配送状态为 5 已取消 if($distribution_order['state'] == 1 && ($distribution_order['delivery_type'] == 0 && (empty($distribution_order['third_distribution_type']) || ($distribution_order['state'] == 5 && !empty($distribution_order['third_distribution_type'])))) || ($distribution_order['delivery_type'] == 1)){ }else{ $distribution_order = null; } if( empty($distribution_order) ) { M()->rollback(); return false; }else{ M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id ) )->save( array('orderdistribution_id' => $orderdistribution_id) ); $shipping_money = M('lionfish_comshop_orderdistribution_order')->where( array('order_id' => $order_id ) )->find(); D('Seller/Supply')->update_supply_commission($order_id,$shipping_money["shipping_money"]); //分配一下订单 $this->change_distribution_order_state( $order_id, $orderdistribution_id, 2); M()->commit(); //删除redis内容, //清空发送配送员通知消息队列 D('Seller/Redisorder')->clear_distribution_delivery_redis($order_id); return true; } } } /** * @auth fish 2020-06-04 * @desc 订单被配送员已拿货,配送中 * @param $order_id */ public function distribution_deliverying_order( $order_id ) { M()->startTrans(); $distribution_order = M('lionfish_comshop_orderdistribution_order')->lock(true)->where( array('order_id' => $order_id , 'state' => 2 ) )->find(); if( empty($distribution_order) ) { M()->rollback(); return false; }else{ $this->change_distribution_order_state( $order_id, $distribution_order['orderdistribution_id'], 3); M()->commit(); return true; } } /** * @auth fish 2020-06-04 * @desc 货已送达了 * @param $order_id * @boolean $is_front 1、前端,0、后端 * @return bool */ public function distribution_arrived_order( $order_id ,$is_front = true) { M()->startTrans(); $distribution_order = M('lionfish_comshop_orderdistribution_order')->lock(true)->where( array('order_id' => $order_id , 'state' => 3 ) )->find(); if( empty($distribution_order) ) { M()->rollback(); return false; }else{ $this->change_distribution_order_state( $order_id, $distribution_order['orderdistribution_id'], 4 , $is_front); M()->commit(); return true; } } /** * @author yj 2020-06-04 * @desc 结算 * @param $order_id */ public function statement_orderdistribution_order( $order_id ) { M()->startTrans(); $distribution_order = M('lionfish_comshop_orderdistribution_order')->lock(true)->where( array('order_id' => $order_id , 'state' => 4 , 'is_statement' => 0 ) )->find(); if( empty($distribution_order) ) { M()->rollback(); return false; }else{ //插入配送员佣金 $orderdistribution_info = $this->get_info_by_distributionid( $distribution_order['orderdistribution_id'] ); $this->check_commiss_account($distribution_order['orderdistribution_id'], $orderdistribution_info['member_id'] ); $up_data = array(); $up_data['is_statement'] = 1; M('lionfish_comshop_orderdistribution_order')->where( array('id' => $distribution_order['id'] ) )->save($up_data); //M('lionfish_comshop_orderdistribution_commiss')->where( array('orderdistribution_id' => $distribution_order['orderdistribution_id'] ) )->setInc( array('money' => $distribution_order['shipping_money']) ); M('lionfish_comshop_orderdistribution_commiss')->where( array('orderdistribution_id' => $distribution_order['orderdistribution_id'] ) )->setInc( money,$distribution_order['shipping_money']); M()->commit(); return true; } } /** * @author yj 2020-04-06 * @desc 根据配送员id查找 会员id * @param $orderdistribution_id */ public function get_info_by_distributionid( $orderdistribution_id ) { $info = M('lionfish_comshop_orderdistribution')->where( array('id' => $orderdistribution_id ) )->find(); if( empty($info) ) { return array(); }else{ return $info; } } /** * @author yj 2020-06-04 * @desc 检查是否有佣金账户 * @param $orderdistribution_id * @param int $member_id */ public function check_commiss_account( $orderdistribution_id , $member_id = 0 ) { $info = M('lionfish_comshop_orderdistribution_commiss')->where( array('orderdistribution_id' => $orderdistribution_id ) )->find(); if( empty($info) ) { $data = array(); $data['orderdistribution_id'] = $orderdistribution_id; $data['member_id'] = $member_id; $data['money'] = 0; $data['dongmoney'] = 0; $data['getmoney'] = 0; $data['addtime'] = time(); M('lionfish_comshop_orderdistribution_commiss')->add( $data ); } } /** * 写入配送日志 */ public function write_distribution_log( $order_id, $orderdistribution_id , $state ,$remark ) { $data = array(); $data['order_id'] = $order_id; $data['orderdistribution_id'] = $orderdistribution_id; $data['state'] = $state; $data['remark'] = $remark; $data['addtime'] = time(); M('lionfish_comshop_orderdistribution_log')->add($data); } /** 将发货配送单,放到redis 中 **/ public function write_redis_distribution_info( $id ) { $val = M('lionfish_comshop_orderdistribution_order')->where( array( 'id' => $id , 'state' => 1) )->find(); //获取供应商信息 $order_info = M('lionfish_comshop_order')->where(array( 'order_id' => $val['order_id']))->find(); $store_id = $order_info['store_id']; $open_redis_server = D('Home/Front')->get_config_by_name('open_redis_server'); if($open_redis_server == 1) { $redis = D('Seller/Redisorder')->get_redis_object_do(); } $lon = $val['shop_lon']; $lat = $val['shop_lat']; if(!empty($store_id)){//独立供应商订单 $redis->getRedis()->rawCommand('geoadd', '_distributionorder_'.$store_id, $lon, $lat, $val['id'] ); }else{ $redis->getRedis()->rawCommand('geoadd', '_distributionorder', $lon, $lat, $val['id'] ); } } //zRem(key, member) /** 被人抢到时,删除键geoadd值 **/ public function del_redis_distribution_info( $id ) { $open_redis_server = D('Home/Front')->get_config_by_name('open_redis_server'); if($open_redis_server == 1) { $redis = D('Seller/Redisorder')->get_redis_object_do(); } $val = M('lionfish_comshop_orderdistribution_order')->where( array( 'id' => $id) )->find(); //获取供应商信息 $order_info = M('lionfish_comshop_order')->where(array( 'order_id' => $val['order_id']))->find(); if( !empty($order_info['store_id']) ){ $redis->zRem('_distributionorder_'.$order_info['store_id'], $id ); }else{ $redis->zRem('_distributionorder', $id ); } } //begin /*** 会员配送费佣金申请,余额 审核流程 **/ public function send_apply_yuer( $id ) { M()->startTrans(); $info = M('lionfish_comshop_orderdistribution_tixian_order')->lock(true)->where( array('id' => $id ) )->find(); if( $info['type'] == 1 && $info['state'] == 0 ) { $del_money = $info['money'] - $info['service_charge_money']; if( $del_money >0 ) { D('Seller/User')->sendMemberMoneyChange($info['member_id'], $del_money, 12, '配送佣金提现到余额,提现id:'.$id); } M('lionfish_comshop_orderdistribution_tixian_order')->where( array('id' => $id ) )->save( array('state' => 1,'shentime' => time() ) ); $money = $info['money']; //将冻结的钱划一部分到已提现的里面 M('lionfish_comshop_orderdistribution_commiss')->where( array('member_id' => $info['member_id']) )->setInc('getmoney',$money ); M('lionfish_comshop_orderdistribution_commiss')->where( array('member_id' => $info['member_id']) )->setInc('dongmoney',-$money ); M()->commit(); return array('code' => 0,'msg' => '提现成功'); }else{ M()->rollback(); return array('code' => 1,'msg' => '提现失败'); } } /** 提现到微信零钱 **/ public function send_apply_weixin_yuer($id) { $lib_path = dirname(dirname( dirname(__FILE__) )).'/Lib/'; require_once $lib_path."/Weixin/lib/WxPay.Api.php"; $open_weixin_qiye_pay = D('Home/Front')->get_config_by_name('open_weixin_qiye_pay'); M()->startTrans(); $info = M('lionfish_comshop_orderdistribution_tixian_order')->lock(true)->where( array('id' => $id ) )->find(); if( empty($open_weixin_qiye_pay) || $open_weixin_qiye_pay ==0 ) { M()->rollback(); return array('code' => 1,'msg' => '未开启企业付款'); }else{ if( $info['type'] == 2 && $info['state'] == 0 ) { $del_money = $info['money'] - $info['service_charge_money']; if( $del_money >0 ) { $mb_info = M('lionfish_comshop_member')->field('we_openid')->where( array('member_id' => $info['member_id'] ) )->find(); $partner_trade_no = build_order_no($info['id']); $desc = date('Y-m-d H:i:s').'申请的提现已到账'; $username = $info['bankusername']; $amount = $del_money * 100; $openid = $mb_info['we_openid']; $res = \WxPayApi::payToUser($openid,$amount,$username,$desc,$partner_trade_no); if(empty($res) || $res['result_code'] =='FAIL') { //show_json(0, $res['err_code_des']); return array('code' => 1,'msg' => $res['err_code_des'] ); }else{ M('lionfish_comshop_orderdistribution_tixian_order')->where( array('id' => $id ) )->save( array('state' => 1,'shentime' => time() ) ); $money = $info['money']; //将冻结的钱划一部分到已提现的里面 M('lionfish_comshop_orderdistribution_commiss')->where( array('member_id' => $info['member_id'] ) )->setInc('getmoney',$money); M('lionfish_comshop_orderdistribution_commiss')->where( array('member_id' => $info['member_id'] ) )->setInc('dongmoney',-$money); M()->commit(); return array('code' => 0,'msg' => '提现成功'); } } }else{ M()->commit(); return array('code' => 1,'msg' => '已提现'); } } } /*** 提现到支付宝,提现到银行卡 **/ public function send_apply_alipay_bank($id) { M()->startTrans(); $info = M('lionfish_comshop_orderdistribution_tixian_order')->lock(true)->where( array('id' => $id ) )->find(); if( ( $info['type'] == 3 || $info['type'] == 4) && $info['state'] == 0 ) { M('lionfish_comshop_orderdistribution_tixian_order')->where( array('id' => $id ) )->save( array('state' => 1,'shentime' => time() ) ); $money = $info['money']; //将冻结的钱划一部分到已提现的里面 M('lionfish_comshop_orderdistribution_commiss')->where( array('member_id' => $info['member_id']) )->setInc('getmoney',$money); M('lionfish_comshop_orderdistribution_commiss')->where( array('member_id' => $info['member_id']) )->setInc('dongmoney',-$money); M()->commit(); return array('code' => 0,'msg' => '提现成功'); }else{ M()->rollback(); return array('code' => 1,'msg' => '已提现'); } } /** * 获取预计送达时间段 */ public function get_expected_delivery($localtown_dispatchtime){ $result = array(); //预计送达时间段是否开启,1、开启,0、关闭 $localtown_expected_delivery_status = D('Home/Front')->get_config_by_name('localtown_expected_delivery_status'); $localtown_delivery_space_time = D('Home/Front')->get_config_by_name('localtown_delivery_space_time'); //营业状态 $localtown_business_hours_status = D('Home/Front')->get_config_by_name('localtown_business_hours_status'); //营业开始时间 $localtown_business_hours_begin = D('Home/Front')->get_config_by_name('localtown_business_hours_begin'); //营业结束时间 $localtown_business_hours_end = D('Home/Front')->get_config_by_name('localtown_business_hours_end'); $time = time(); $localtown_delivery_space_time_list = array(); $month = ""; $now_time = $localtown_dispatchtime; $count_2 = 0; if($localtown_expected_delivery_status == 1 && $localtown_delivery_space_time > 0){ $month = date('m-d'); if($time <= strtotime($localtown_dispatchtime)){ $count = intval((strtotime("24:00")-strtotime($now_time))%86400/60/$localtown_delivery_space_time); $k = 0; for($i = 0;$i < $count;$i++){ $b_time = round($i*$localtown_delivery_space_time); $e_time = round(($i+1)*$localtown_delivery_space_time); $begin_time = date('H:i', strtotime ("+".$b_time." minute", strtotime($now_time))); $end_time = date('H:i', strtotime ("+".$e_time." minute", strtotime($now_time))); if($localtown_business_hours_status == 1){ if($this->checkBusinessTime($begin_time,$end_time,$localtown_business_hours_begin,$localtown_business_hours_end)){ $localtown_delivery_space_time_list[$month][$k]['time'] = $begin_time.'-'.$end_time; $k++; } }else{ $localtown_delivery_space_time_list[$month][$k]['time'] = $begin_time.'-'.$end_time; $k++; } } }else{ $localtown_delivery_space_time_list[$month][0]['time'] = ""; } $month_2 = date("m-d",strtotime("+1 day",strtotime(date('Y-m-d')))); //$count_2 = intval(24*60/$localtown_delivery_space_time); $count_2 = intval((strtotime("24:00")-strtotime($localtown_business_hours_begin))%86400/60/$localtown_delivery_space_time); $k = 0; for($j = 0;$j < $count_2;$j++){ $b_time = round($j*$localtown_delivery_space_time); $e_time = round(($j+1)*$localtown_delivery_space_time); $begin_time = date('H:i', strtotime ("+".$b_time." minute", strtotime($localtown_business_hours_begin))); $end_time = date('H:i', strtotime ("+".$e_time." minute", strtotime($localtown_business_hours_begin))); if($localtown_business_hours_status == 1) { if ($this->checkBusinessTime($begin_time, $end_time, $localtown_business_hours_begin, $localtown_business_hours_end)) { $localtown_delivery_space_time_list[$month_2][$k]['time'] = $begin_time . '-' . $end_time; $k++; } }else{ $localtown_delivery_space_time_list[$month_2][$k]['time'] = $begin_time . '-' . $end_time; $k++; } } } $result['localtown_expected_delivery_status'] = $localtown_expected_delivery_status; $result['localtown_delivery_space_time_list'] = $localtown_delivery_space_time_list; $result['localtown_delivery_space_month'] = $month; return $result; } /** * 验证时间是否在营业时间之中,是 true,否 false * @param $begin_time * @param $end_time * @param $localtown_business_hours_begin * @param $localtown_business_hours_end */ public function checkBusinessTime($begin_time,$end_time,$localtown_business_hours_begin,$localtown_business_hours_end){ if(strtotime($localtown_business_hours_end) > strtotime($localtown_business_hours_begin)){ if($end_time != '00:00'){ if(strtotime($begin_time) >= strtotime($localtown_business_hours_begin) && strtotime($end_time) <= strtotime($localtown_business_hours_end)){ return true; }else{ return false; } }else{ if(strtotime($begin_time) >= strtotime($localtown_business_hours_begin) && (strtotime($end_time)+24*60*60) <= strtotime($localtown_business_hours_end)){ return true; }else{ return false; } } }else{ if(strtotime($begin_time) >= strtotime($localtown_business_hours_begin) && strtotime($end_time) <= (strtotime($localtown_business_hours_end)+24*60*60)){ return true; }else{ if((strtotime($begin_time)+24*60*60) >= strtotime($localtown_business_hours_begin) && strtotime($begin_time) <= strtotime($localtown_business_hours_end) && strtotime($end_time) <= strtotime($localtown_business_hours_end)){ return true; }else{ return false; } } } } /** * 保存第三方配送日志 */ public function save_orderdistribution_thirth_log( $order_id, $third_distribution_type , $state ,$remark ) { $data = array(); $data['order_id'] = $order_id; $data['third_distribution_type'] = $third_distribution_type; $data['state'] = $state; $data['remark'] = $remark; $data['addtime'] = time(); M('lionfish_comshop_orderdistribution_thirth_log')->add($data); } //end } ?>