Commit 855dfb86 authored by liuyuzhen's avatar liuyuzhen

新订单确认页面

parent ecd4f9e0
...@@ -122,6 +122,31 @@ class CartController extends \Our\Controller_AbstractApi{ ...@@ -122,6 +122,31 @@ class CartController extends \Our\Controller_AbstractApi{
} }
/**
* 购物车购买
*/
public function checkoutNewAction(){
$cartService = \Business\Cart\CartServiceModel::getInstance();
$data = $this->req[\Our\NameConst::data];
$sess=\Yaf\Session::getInstance();
$currentAddress = $sess->get('currentAddress');
$address = $cartService->checkCurrentAddress($currentAddress,$this->memberId);
$storeCartList = $cartService->checkCart($data,$this->memberId);
$pBundlingService = \Business\Goods\GroupSaleServiceModel::getInstance();
$cartList = $pBundlingService->getFormatCartListForOrder($storeCartList,$this->memberId,true);
$gcIds = isset($cartList['gcIds'])?$cartList['gcIds']:array();
$storeCartData = array('cartList'=>$cartList['list'],'storeIds'=>$storeCartList['storeIds'],'goodsIds'=>$storeCartList['goodsIds'],'goodsCommonIds'=>$storeCartList['goodsCommonIds'],'blIds'=>$storeCartList['blIds'],'gcIds'=>$gcIds);
//var_dump($storeCartData);
$storeCartData = $cartService->checkCouponForCart($storeCartData,$this->memberId);
//$this->success($storeCartData);
$storeCartData = $cartService->getDeliveryTypeForCartNew($address,$storeCartData);
$data = $cartService->getFormatCartListForOrderNew($storeCartData,$address);
$this->success($data);
}
/** /**
* 立即购买 * 立即购买
*/ */
...@@ -144,6 +169,28 @@ class CartController extends \Our\Controller_AbstractApi{ ...@@ -144,6 +169,28 @@ class CartController extends \Our\Controller_AbstractApi{
} }
/**
* 立即购买
*/
public function buyNowNewAction(){
$cartService = \Business\Cart\CartServiceModel::getInstance();
$data = $this->req[\Our\NameConst::data];
$sess=\Yaf\Session::getInstance();
$currentAddress = $sess->get('currentAddress');
$address = $cartService->checkCurrentAddress($currentAddress,$this->memberId);
$cartService->checkBuynow($data,$this->memberId);
$pBundlingService = \Business\Goods\GroupSaleServiceModel::getInstance();
$cartList = $pBundlingService->getFormatBuyNowListForOrder($data,$this->memberId);
$gcIds = isset($cartList['gcIds'])?$cartList['gcIds']:array();
$storeCartData = array('cartList'=>$cartList['list'],'storeIds'=>array_keys($cartList['list']),'goodsIds'=>$cartList['goodsIds'],'goodsCommonIds'=>$cartList['goodsCommonIds'],'blIds'=>$cartList['blIds'],'gcIds'=>$gcIds);
$storeCartData = $cartService->checkCouponForCart($storeCartData,$this->memberId);
$storeCartData = $cartService->getDeliveryTypeForCartNew($address,$storeCartData);
//$this->success($storeCartData);
$data = $cartService->getFormatCartListForOrderNew($storeCartData,$address);
$this->success($data);
}
public function addOrderAction(){ public function addOrderAction(){
$cartService = \Business\Cart\CartServiceModel::getInstance(); $cartService = \Business\Cart\CartServiceModel::getInstance();
$data = $this->req[\Our\NameConst::data]; $data = $this->req[\Our\NameConst::data];
......
...@@ -22,6 +22,8 @@ class ApiConst ...@@ -22,6 +22,8 @@ class ApiConst
//一个小时 //一个小时
const oneHour = 3600; const oneHour = 3600;
const halfHour = 1800;
const twoMinSecond = 120; const twoMinSecond = 120;
const fiveMinutes=180; const fiveMinutes=180;
...@@ -35,6 +37,7 @@ class ApiConst ...@@ -35,6 +37,7 @@ class ApiConst
//八小时秒数 //八小时秒数
const EightHoursSecond = 28800; const EightHoursSecond = 28800;
const hundred = 100; const hundred = 100;
const thousand = 1000;
//1分钟秒数 //1分钟秒数
const oneMinSecond = 60; const oneMinSecond = 60;
//成功状态码 //成功状态码
......
<?php <?php
namespace Business\Cart; namespace Business\Cart;
use Our\ApiConst;
use Our\DbNameConst;
/** /**
* User: liuyuzhen * User: liuyuzhen
...@@ -643,6 +641,94 @@ class CartServiceModel extends \Business\AbstractModel{ ...@@ -643,6 +641,94 @@ class CartServiceModel extends \Business\AbstractModel{
} }
$deliverySetting['expressDistribution'] = $store['express_distribution']; $deliverySetting['expressDistribution'] = $store['express_distribution'];
$deliverySetting['expressDistribution'] = \Our\ApiConst::zero;
//if($deliverySetting['expressDistribution']&&$storeCarts['is_transport']==\Our\ApiConst::one&&$storeCarts['transport_id']){
if($deliverySetting['expressDistribution']){
if($storeCarts['goodsFreight']){ //商品免邮
$shippingFee = \Our\ApiConst::zero;
}else{
$shippingFee = $this->calcTransport($storeCarts['transport_id'],$storeCarts['storeExpressNum'], $address['city_id']);
}
$deliverySetting['shippingFee'] = $shippingFee;
}else{
$deliverySetting['expressDistribution'] = \Our\ApiConst::zero;
}
$storeCartData['cartList'][$storeId]['deliverySetting'] = $deliverySetting;
}
return $storeCartData;
}
/**
* 获取店铺配送方式和支付方式信息
* @param $address
* @param $storeCartData
*/
public function getDeliveryTypeForCartNew($address,$storeCartData,$dbName = \Our\DbNameConst::salveDBConnectName){
$storeIds = $storeCartData['storeIds'];
$storeDao = \DAO\StoreModel::getInstance();
$deliveryFormulaDao = \DAO\DeliveryFormulaModel::getInstance($dbName);
foreach($storeIds as $storeId){
$store = $storeDao->get($storeId,false);
$storeCarts = $storeCartData['cartList'][$storeId];
$deliverySetting['onelinePay'] = $store['wx_pay'];//是否支持线上支付
$deliverySetting['offlinePay'] = $store['offline_pay'];
$deliverySetting['offlinePayway'] = array('payway'=>'','imageUrls'=>array());
if($deliverySetting['offlinePay']){
$offlinePaywayArray = unserialize($store['offline_payway']);
if($offlinePaywayArray){
foreach($offlinePaywayArray['images'] as $image){
if($image){
$offlinePaywayArray['imageUrls'][] = \Our\Common::getStaticFile($image, \Our\ImageConst::storeLabel);
}
}
$deliverySetting['offlinePayway'] = $offlinePaywayArray;
}
}
$deliverySetting['aogPay'] = $store['aog_pay'];
$deliverySetting['buyerDistribution'] = $store['buyer_distribution'];
$deliverySetting['selfDeliveryTimeList'] = array();
//自提需要的店铺地址
$deliverySetting['storeAddress'] = array(
'address' => ($store['store_address'].$store['store_subaddress']),
'longitude' => $store['store_longitude'],
'latitude' => $store['store_latitude'],
'cityCode' => $store['store_citycode']
);
if($deliverySetting['buyerDistribution']){
$deliverySetting['selfDeliveryTimeList'] = $deliveryFormulaDao->getBuyerFormulaForCart($store);
}
$deliverySetting['sellerDistribution'] = $store['seller_distribution'];
if($deliverySetting['sellerDistribution']){
$deliverySetting['leftAmount'] = \Our\ApiConst::zero;
$deliverySetting['inServiceAreaFlag'] = \Our\ApiConst::zero;
if((isset($store['start_shipping_price'])&&$store['start_shipping_price']>\Our\ApiConst::zero)&&$storeCarts['storeTotalPrice']<$store['start_shipping_price']){
//$deliverySetting['sellerDistribution'] = \Our\ApiConst::zero;
$deliverySetting['leftAmount'] = $store['start_shipping_price']-$storeCarts['storeTotalPrice'];//差价
}else{
$deliveryFreeFlag = $storeCarts['deliveryFreeFlag'];
if((isset($store['free_shipping_price'])&&$store['free_shipping_price']>\Our\ApiConst::zero)&&$storeCarts['storeTotalPrice']>=$store['free_shipping_price']){
$deliveryFreeFlag = \Our\ApiConst::one;
}
$deliverySetting['deliverTimeList'] =array();
if($address){
$result = \Store\StoreUtil::getInstance()->checkAddressInServiceArea(array('lng'=>$address['lng'],'lat'=>$address['lat']),$storeId);
$storeDistance = \Our\CommonExtension::getDistance($address['lat'],$address['lng'],$store['store_latitude'],$store['store_longitude'],\Our\ApiConst::one);
if($result){
$deliverySetting['inServiceAreaFlag'] = \Our\ApiConst::one;
$deliverTimeList = $deliveryFormulaDao->getDeliveryFormulaForCartNew($store,$storeDistance,$deliveryFreeFlag);
if($deliverTimeList){
$deliverySetting['deliverTimeList'] =$deliverTimeList['timeList'];
$storeCartData['cartList'][$storeId]['storeDistance'] = $storeDistance;
$deliverySetting['defaultFee'] = $deliverTimeList['default']?$deliverTimeList['default']:\Our\ApiConst::zero;
}
}
}
}
}else{
$deliverySetting['sellerDistribution'] = \Our\ApiConst::zero;
}
$deliverySetting['expressDistribution'] = $store['express_distribution'];
$deliverySetting['expressDistribution'] = \Our\ApiConst::zero;
//if($deliverySetting['expressDistribution']&&$storeCarts['is_transport']==\Our\ApiConst::one&&$storeCarts['transport_id']){ //if($deliverySetting['expressDistribution']&&$storeCarts['is_transport']==\Our\ApiConst::one&&$storeCarts['transport_id']){
if($deliverySetting['expressDistribution']){ if($deliverySetting['expressDistribution']){
if($storeCarts['goodsFreight']){ //商品免邮 if($storeCarts['goodsFreight']){ //商品免邮
...@@ -838,7 +924,7 @@ class CartServiceModel extends \Business\AbstractModel{ ...@@ -838,7 +924,7 @@ class CartServiceModel extends \Business\AbstractModel{
return false; return false;
} }
public function getFormatCartListForOrder($storeCartData,$address){ public function getFormatCartListForOrderNew($storeCartData,$address){
$storeCartsList = $storeCartData['cartList']; $storeCartsList = $storeCartData['cartList'];
$choosedCouponIds = array(); $choosedCouponIds = array();
$returnData = array(); $returnData = array();
...@@ -867,8 +953,170 @@ class CartServiceModel extends \Business\AbstractModel{ ...@@ -867,8 +953,170 @@ class CartServiceModel extends \Business\AbstractModel{
//获取默认配送方式 快递默认优先级:商家配送大于快递订单大于买家自提 //获取默认配送方式 快递默认优先级:商家配送大于快递订单大于买家自提
$deliverySetting = $storeCarts['deliverySetting']; $deliverySetting = $storeCarts['deliverySetting'];
$deliverySettings = array(); $deliverySettings = array();
$newStoreData['leftAmount'] = \Our\ApiConst::zero;
$newStoreData['inServiceAreaFlag'] = \Our\ApiConst::zero;
$newStoreData['storeAddress'] = $deliverySetting['storeAddress'];
if($deliverySetting['sellerDistribution']==\Our\ApiConst::one&&$deliverySetting['deliverTimeList']){ if($deliverySetting['sellerDistribution']==\Our\ApiConst::one&&$deliverySetting['deliverTimeList']){
$deliveryTimes = $deliverySetting['deliverTimeList']; $deliveryTimes = $deliverySetting['deliverTimeList'];
$newStoreData['inServiceAreaFlag'] = $deliverySetting['inServiceAreaFlag'];
$newStoreData['leftAmount'] = $deliverySetting['leftAmount'];
$delivery = array();
$delivery['name'] = \Our\DescribeConst::deliveryNameStore;
$delivery['type'] = \Our\ApiConst::deliveryStore;
$deliveryFee = $deliverySetting['defaultFee'];
$shippingFee = $deliveryFee;
$delivery['isChoosed'] = \Our\ApiConst::one;
$delivery['deliveryFee'] = $deliveryFee;
$delivery['timeList'] = $deliveryTimes;
$deliverySettings[]= $delivery;
$storeSumData['deliveryFee'] = $deliveryFee;
}
if($deliverySetting['expressDistribution']==\Our\ApiConst::one){
$deliveryFee = $deliverySetting['shippingFee'];
$delivery = array();
$delivery['name'] = \Our\DescribeConst::deliveryNameExpress;
$delivery['type'] = \Our\ApiConst::deliveryExpress;
if(isset($shippingFee)){
$delivery['isChoosed'] = \Our\ApiConst::zero;
}else{
$shippingFee = $deliveryFee;
$delivery['isChoosed'] = \Our\ApiConst::one;
$storeSumData['deliveryFee'] = $deliveryFee;
}
$delivery['deliveryFee'] = $deliveryFee;
$deliverySettings[]= $delivery;
}
if($deliverySetting['buyerDistribution']==\Our\ApiConst::one){
$deliveryFee = \Our\ApiConst::zero;//到店自提
$delivery = array();
$delivery['name'] = \Our\DescribeConst::deliveryNameBuyer;
$delivery['type'] = \Our\ApiConst::deliveryBuyer;
if(isset($shippingFee)){
$delivery['isChoosed'] = \Our\ApiConst::zero;
}else{
$shippingFee = $deliveryFee;
$delivery['isChoosed'] = \Our\ApiConst::one;
$storeSumData['deliveryFee'] = $deliveryFee;
}
$delivery['deliveryFee'] = $deliveryFee;
$delivery['timeList'] = $deliverySetting['selfDeliveryTimeList'];
$deliverySettings[]= $delivery;
}
$newStoreData['deliverys']=$deliverySettings;
/*if(!isset($shippingFee)){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::storeNoDeliveryTypeForBuy);
}*/
$storeCarts['deliverys'] = $deliverySettings;
//获取支付方式 优先级:线上支付大于线下支付大于货到付款
$payways = array();
$paywayFlag = \Our\ApiConst::zero;
if($deliverySetting['onelinePay']==\Our\ApiConst::one){
$payway = array();
$payway['name'] = \Our\DescribeConst::payOnlineName;
$payway['type'] = \Our\ApiConst::payOnline;
$paywayFlag= \Our\ApiConst::one;
$payway['isChoosed'] = \Our\ApiConst::one;
$payways[] =$payway;
$storeSumData['paywayName'] = $payway['name'];
}
if($deliverySetting['offlinePay']==\Our\ApiConst::one){
$payway = array();
$payway['name'] = \Our\DescribeConst::payOfflineName;
$payway['type'] = \Our\ApiConst::payOffline;
$payway['offlinePayway'] = $deliverySetting['offlinePayway']?$deliverySetting['offlinePayway']:\Our\NameConst::emptyString;//线下支付方式内容
if($paywayFlag== \Our\ApiConst::zero){
$paywayFlag= \Our\ApiConst::one;
$payway['isChoosed'] = \Our\ApiConst::one;
$storeSumData['paywayName'] = $payway['name'];
$storeSumData['paywayMemo'] = $payway['offlinePayway'];//支付方式备注
}else{
$payway['isChoosed'] = \Our\ApiConst::zero;
}
$payways[] =$payway;
}
if($deliverySetting['aogPay']==\Our\ApiConst::one){
$payway = array();
$payway['name'] = \Our\DescribeConst::payAogName;
$payway['type'] = \Our\ApiConst::payAog;
if($paywayFlag== \Our\ApiConst::zero){
$paywayFlag= \Our\ApiConst::one;
$payway['isChoosed'] = \Our\ApiConst::one;
$storeSumData['paywayName'] = $payway['name'];
}else{
$payway['isChoosed'] = \Our\ApiConst::zero;
}
$payways[] =$payway;
}
/*if($paywayFlag == \Our\ApiConst::zero){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::storeNoPaywayForBuy);
}*/
$storeSumData['reliefAmount'] = $storeCouponMinusMoney;//优惠券减免金额
$storeSumData['storeName'] = $storeCarts['storeName'];
$storeSumData['storeGoodsPrice'] = $storeCarts['storeTotalPrice'];
$storeTotalPrice = $storeCarts['storeTotalPrice']- $storeCouponMinusMoney + $shippingFee;
if($storeTotalPrice<\Our\ApiConst::zero){
$storeTotalPrice = \Our\ApiConst::zero;
}
$storeSumData['totalPrice'] = $storeTotalPrice;
$newStoreData['payways'] = $payways;//支付方式
$newStoreData['storeCarts'] = $storeCarts['storeCarts'];//店铺商品
$newStoreData['storeId'] = $storeCarts['storeId'];
$newStoreData['storeName'] = $storeCarts['storeName'];
$newStoreData['totalPrice'] = $storeTotalPrice;
$newStoreData['totalGoodsNum'] = $storeCarts['totalGoodsNum'];
$newStoreData['storeGoodsPrice']= $storeCarts['storeTotalPrice'];
$totalPrice += $storeTotalPrice;
$returnData['stores'][]=$newStoreData;
$returnData['sum'][] = $storeSumData;
}
$returnData['totalPrice'] = $totalPrice;
$returnData['address'] = new \stdClass();
if($address){
unset($address['lat']);
unset($address['lng']);
unset($address['city_id']);
$returnData['address'] = $address;
}
return $returnData;
}
public function getFormatCartListForOrder($storeCartData,$address){
$storeCartsList = $storeCartData['cartList'];
$choosedCouponIds = array();
$returnData = array();
$totalPrice = \Our\ApiConst::zero;
foreach($storeCartsList as $key=>$storeCarts){
$newStoreData = array();
$storeCouponMinusMoney = \Our\ApiConst::zero; //店铺优惠券减免金额
$shippingFee = \Our\ApiConst::zero; //默认配送费
$storeSumData= array();//店铺汇总信息;
//第一步获取选中优惠券
if(isset($storeCarts['coupons'])&&count($storeCarts['coupons'])>0){
foreach($storeCarts['coupons'] as $keyCoupon=>$coupon){
if($choosedCouponIds&&in_array($coupon['couponId'],$choosedCouponIds)){
continue;
}else{
$storeCarts['coupons'][$keyCoupon]['chooseFlag'] = \Our\ApiConst::one;
$storeCouponMinusMoney = $coupon['reliefAmount'];
$choosedCouponIds[] = $coupon['couponId'];
break;
}
}
$newStoreData['coupons'] = $storeCarts['coupons'];
}else{
$newStoreData['coupons'] = array();
}
//获取默认配送方式 快递默认优先级:商家配送大于快递订单大于买家自提
$deliverySetting = $storeCarts['deliverySetting'];
$deliverySettings = array();
if($deliverySetting['sellerDistribution']==\Our\ApiConst::one){
$deliveryTimes = $deliverySetting['deliverTimeList'];
$delivery = array(); $delivery = array();
array_multisort(array_column($deliverySetting['deliverTimeList'],'isDefault'),SORT_DESC,$deliverySetting['deliverTimeList']); array_multisort(array_column($deliverySetting['deliverTimeList'],'isDefault'),SORT_DESC,$deliverySetting['deliverTimeList']);
$tempDeliverTimeList = $deliverySetting['deliverTimeList']; $tempDeliverTimeList = $deliverySetting['deliverTimeList'];
......
...@@ -6,9 +6,9 @@ use Our\ImageUtil; ...@@ -6,9 +6,9 @@ use Our\ImageUtil;
class GroupSaleServiceModel extends \Business\AbstractModel { class GroupSaleServiceModel extends \Business\AbstractModel {
private $pBundingField = 'han_p_bundling.bl_id AS blId,bl_name AS name,bl_title,store_id,store_name,bl_state,bl_quota_starttime,bl_image,bl_storage,bl_discount_price AS discountPrice,bl_sum_price AS sumPrice,bl_quota_endtime AS endTime,image,is_transport,transport_id,snapshot_id,goods_freight,goods_free'; private $pBundingField = 'han_p_bundling.bl_id AS blId,bl_name AS name,bl_title,store_id,store_name,bl_state,bl_quota_starttime,bl_image,bl_storage,bl_discount_price AS discountPrice,bl_sum_price AS sumPrice,bl_quota_endtime AS endTime,image,is_transport,transport_id,snapshot_id,goods_freight,goods_free,delivery_template_id';
private $pBundingFieldWithDel = 'han_p_bundling.bl_id AS blId,bl_name AS name,bl_title,store_id,store_name,bl_state,bl_quota_starttime,bl_image,bl_storage,bl_discount_price AS discountPrice,bl_sum_price AS sumPrice,bl_quota_endtime AS endTime,image,is_transport,transport_id,snapshot_id,goods_freight,goods_free,is_del'; private $pBundingFieldWithDel = 'han_p_bundling.bl_id AS blId,bl_name AS name,bl_title,store_id,store_name,bl_state,bl_quota_starttime,bl_image,bl_storage,bl_discount_price AS discountPrice,bl_sum_price AS sumPrice,bl_quota_endtime AS endTime,image,is_transport,transport_id,snapshot_id,goods_freight,goods_free,is_del,delivery_template_id';
private $pBundingGoodsField = 'bl_count_price AS discountPrice,num,goods_id,bl_id'; private $pBundingGoodsField = 'bl_count_price AS discountPrice,num,goods_id,bl_id';
...@@ -693,6 +693,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel { ...@@ -693,6 +693,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel {
$tempObj['goodsList'] = \Our\Common::convertUnderline($pBundling['goodsList']); $tempObj['goodsList'] = \Our\Common::convertUnderline($pBundling['goodsList']);
$tempObj['goodsOriginalPrice'] = $pBundling['sumPrice']; $tempObj['goodsOriginalPrice'] = $pBundling['sumPrice'];
$tempObj['snapshot_id'] = (isset($pBundling['snapshot_id'])&&$pBundling['snapshot_id']>\Our\ApiConst::zero)?$pBundling['snapshot_id']:\Our\ApiConst::zero; $tempObj['snapshot_id'] = (isset($pBundling['snapshot_id'])&&$pBundling['snapshot_id']>\Our\ApiConst::zero)?$pBundling['snapshot_id']:\Our\ApiConst::zero;
$tempObj['delivery_template_id'] = (isset($pBundling['delivery_template_id'])&&$pBundling['delivery_template_id'])?$pBundling['delivery_template_id']:\Our\ApiConst::zero;
} else if ($tempCart['type'] == \Our\ApiConst::addGoodsToCart) { } else if ($tempCart['type'] == \Our\ApiConst::addGoodsToCart) {
$priceArray = \Goods\GoodsUtil::getInstance()->getRealPrice($tempCart['goods_id'],$memberId,null, \Our\ApiConst::addGoodsToCart,$dbName,true); $priceArray = \Goods\GoodsUtil::getInstance()->getRealPrice($tempCart['goods_id'],$memberId,null, \Our\ApiConst::addGoodsToCart,$dbName,true);
if(is_array($priceArray)){ if(is_array($priceArray)){
...@@ -737,6 +738,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel { ...@@ -737,6 +738,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel {
$tempObj['gc_id']=$goodsCommonStorages[$tempCart['goods_commonid']]['gc_id']; $tempObj['gc_id']=$goodsCommonStorages[$tempCart['goods_commonid']]['gc_id'];
$tempObj['gc_id_2']=$goodsCommonStorages[$tempCart['goods_commonid']]['gc_id_2']; $tempObj['gc_id_2']=$goodsCommonStorages[$tempCart['goods_commonid']]['gc_id_2'];
$tempObj['gc_id_3']=$goodsCommonStorages[$tempCart['goods_commonid']]['gc_id_3']; $tempObj['gc_id_3']=$goodsCommonStorages[$tempCart['goods_commonid']]['gc_id_3'];
$tempObj['delivery_template_id']=$goodsCommonStorages[$tempCart['goods_commonid']]['delivery_template_id']?$goodsCommonStorages[$tempCart['goods_commonid']]['delivery_template_id']:\Our\ApiConst::zero;
$allGcIds[] = $tempObj['gcId']; $allGcIds[] = $tempObj['gcId'];
$storeGcIds[] = $tempObj['gcId']; $storeGcIds[] = $tempObj['gcId'];
if ($goodsStorage['onlineFlag'] == \Our\ApiConst::one) { if ($goodsStorage['onlineFlag'] == \Our\ApiConst::one) {
...@@ -887,6 +889,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel { ...@@ -887,6 +889,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel {
} }
$storeTotalPrice += $pBundling['discountPrice']*$tempObj['goodsNum']; $storeTotalPrice += $pBundling['discountPrice']*$tempObj['goodsNum'];
$tempObj['goodsList'] = \Our\Common::convertUnderline($pBundling['goodsList']); $tempObj['goodsList'] = \Our\Common::convertUnderline($pBundling['goodsList']);
$tempObj['delivery_template_id'] = $pBundling['delivery_template_id']?$pBundling['delivery_template_id']:\Our\ApiConst::zero;
$tempObj['goodsOriginalPrice'] = $pBundling['sumPrice']; $tempObj['goodsOriginalPrice'] = $pBundling['sumPrice'];
}else if(isset($data['goodsId'])){ }else if(isset($data['goodsId'])){
...@@ -945,6 +948,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel { ...@@ -945,6 +948,7 @@ class GroupSaleServiceModel extends \Business\AbstractModel {
$tempObj['gc_id']=$goodsCommonStorages[$goods['goods_commonid']]['gc_id']; $tempObj['gc_id']=$goodsCommonStorages[$goods['goods_commonid']]['gc_id'];
$tempObj['gc_id_2']=$goodsCommonStorages[$goods['goods_commonid']]['gc_id_2']; $tempObj['gc_id_2']=$goodsCommonStorages[$goods['goods_commonid']]['gc_id_2'];
$tempObj['gc_id_3']=$goodsCommonStorages[$goods['goods_commonid']]['gc_id_3']; $tempObj['gc_id_3']=$goodsCommonStorages[$goods['goods_commonid']]['gc_id_3'];
$tempObj['delivery_template_id']=$goodsCommonStorages[$goods['goods_commonid']]['delivery_template_id']?$goodsCommonStorages[$goods['goods_commonid']]['delivery_template_id']:\Our\ApiConst::zero;
$allGcIds[] = $tempObj['gcId']; $allGcIds[] = $tempObj['gcId'];
$storeGcIds[] = $tempObj['gcId']; $storeGcIds[] = $tempObj['gcId'];
if ($goodsStorage['onlineFlag'] == \Our\ApiConst::one) { if ($goodsStorage['onlineFlag'] == \Our\ApiConst::one) {
......
...@@ -60,6 +60,248 @@ class DeliveryFormulaModel extends \DAO\AbstractModel { ...@@ -60,6 +60,248 @@ class DeliveryFormulaModel extends \DAO\AbstractModel {
} }
/**
* 获取店铺自提时间段列表
* @param $store
* @return array
*/
public function getBuyerFormulaForCart($store){
$currentTime = TIMESTAMP;
$time = date('Y-m-d', $currentTime);
if ($store['store_start_time'] && $store['store_close_time']) {
$todayStartTime = strtotime($time . ' ' . $store['store_start_time']);
$todayEndTime = strtotime($time . ' ' . $store['store_close_time']);
} else {
$todayStartTime = $time + \Our\ApiConst::deliveryStartTime;
$todayEndTime = $time + \Our\ApiConst::deliveryEndTime;
}
if($currentTime<$todayStartTime){
$currentTime = $todayStartTime;
}
$return[]=array();
$time = date('Y-m-d',$currentTime);
$todayUnixTime = strtotime($time);
$todayList = $this->getBuyerFormulaList($currentTime,$todayEndTime,\Our\ApiConst::one);
$isDefault = \Our\ApiConst::zero;
if($todayList){
$return[] = array('time'=>$todayUnixTime,'list'=>$todayList);
}else{
$isDefault = \Our\ApiConst::one;
}
$tommorowStartTime = $todayStartTime + \Our\ApiConst::oneDaySecond;
$tommorowEndTime = $todayEndTime + \Our\ApiConst::oneDaySecond;
$tommorowUnixTime = $todayUnixTime + \Our\ApiConst::oneDaySecond;
$tromorrowList = $this->getBuyerFormulaList($tommorowStartTime,$tommorowEndTime,$isDefault);
if($tommorowUnixTime){
$return[]= array('time'=>$tommorowUnixTime,'list'=>$tromorrowList);
}
$isDefault = \Our\ApiConst::zero;
if(!($todayList&&$tromorrowList)){
$isDefault = \Our\ApiConst::one;
}
$nextStartTime = $todayStartTime + \Our\ApiConst::oneDaySecond*2;
$nextEndTime = $todayEndTime + \Our\ApiConst::oneDaySecond*2;
$nextUnixTime = $todayUnixTime + \Our\ApiConst::oneDaySecond*2;
$nextList = $this->getBuyerFormulaList($nextStartTime,$nextEndTime,$isDefault);
if($tommorowUnixTime){
$return[]= array('time'=>$nextUnixTime,'list'=>$nextList);
}
return $return;
}
/**
* 新的配送公式
* @param $store
* @param $storeCarts
* @param $distance
* @param bool $deliveryFreeFlag
* @return array
* @throws \Our\Exception
*/
public function getDeliveryFormulaForCartNew($store,$storeCarts,$distance,$deliveryFreeFlag=false){
$delivery_template_ids = array_unique(array_column($storeCarts,'delivery_template_id'));
$deliveryFormula = \Our\RedisHelper::cachedFunction(\Redis\Db6\DeliveryFormulaRedisModel::getInstance(),array(&$this, 'getOne'),array('*',array('store_id'=>$store['store_id'])),\Our\ApiConst::sevenDaySecond,array($store['store_id']));
if(!$deliveryFormula){
return false;
}
$formulaList = unserialize($deliveryFormula['formula']);
$fullFormulaList = array_column($formulaList, 'list', 'template_id');
$myFormulaList =array_intersect_key($fullFormulaList,array_flip($delivery_template_ids));
$distanceFormulaList = array();
foreach($myFormulaList as $tempFormulaList){
foreach($tempFormulaList as $tempFormula){
if($tempFormula['distance']=='other'){
$distanceFormulaList[] = $tempFormula;
break;
}else{
if($distance<(intval($tempFormula['distance'])*\Our\ApiConst::thousand)){
$distanceFormulaList[] = $tempFormula;
break;
}
}
}
}
$formula = array();
$formula['half'] = max(array_column($distanceFormulaList,'half'));
$formula['one'] = max(array_column($distanceFormulaList,'one'));
$formula['two'] = max(array_column($distanceFormulaList,'two'));
$formula['oneday'] = max(array_column($distanceFormulaList,'oneday'));
$formula['other'] = max(array_column($distanceFormulaList,'other'));
$currentTime =TIMESTAMP;
$time = date('Y-m-d',$currentTime);
$todayUnixTime = strtotime($time);
if($store['store_dis_sta_time']&&$store['store_dis_end_time']){
$todayStartTime = strtotime($time.' '.$store['store_dis_sta_time']);
$todayEndTime = strtotime($time.' '.$store['store_dis_end_time']);
}else{
$todayStartTime = $time+\Our\ApiConst::deliveryStartTime;
$todayEndTime = $time+\Our\ApiConst::deliveryEndTime;
}
if($todayStartTime>$currentTime){
$currentTime = $todayStartTime;
}
$defaultFee = $formula['half'];
$return = array();
$formulaList = $this->getTodayFormulaList($currentTime,$todayEndTime,$formula,$deliveryFreeFlag);
$tommorowDefault = \Our\ApiConst::zero;
if(!$formulaList){
$tommorowDefault = \Our\ApiConst::one;
}else{
$defaultFee = $formula['other'];
$return[]= array('time'=>$todayUnixTime,'list'=>$formulaList);
}
$tommorowStartTime = $todayStartTime + \Our\ApiConst::oneDaySecond;
$tommorowEndTime = $todayEndTime + \Our\ApiConst::oneDaySecond;
$tommorowUnixTime = $todayUnixTime + \Our\ApiConst::oneDaySecond;
$tromorrowList = $this->getOtherDayFormulaList($tommorowStartTime,$tommorowEndTime,$formula['other'],$deliveryFreeFlag,$tommorowDefault);
if($tommorowUnixTime){
$return[]= array('time'=>$tommorowUnixTime,'list'=>$tromorrowList);
}
$nextStartTime = $todayStartTime + \Our\ApiConst::oneDaySecond*2;
$nextEndTime = $todayEndTime + \Our\ApiConst::oneDaySecond*2;
$nextUnixTime = $todayUnixTime + \Our\ApiConst::oneDaySecond*2;
$isDefault = \Our\ApiConst::zero;
if(!($formulaList&&$tromorrowList)){
$isDefault = \Our\ApiConst::one;
}
$nextList = $this->getOtherDayFormulaList($nextStartTime,$nextEndTime,$formula['other'],$deliveryFreeFlag,$isDefault);
if($tommorowUnixTime){
$return[]= array('time'=>$nextUnixTime,'list'=>$nextList);
}
if($return){
return array('timeList'=>$return,'default'=>$defaultFee);
}
return $return;
}
public function getTodayFormulaList($beginTime,$endTime,$formulaPrice,$deliveryFreeFlag){
$formulaList = array();
$initMinute = intval(date('i',$beginTime));
if($initMinute==0||$initMinute==30){
$startTime = $beginTime;
}else{
if($initMinute<30){
$startTime = mktime(date('H',$beginTime),30,0,date('m',$beginTime),date('d',$beginTime),date('Y',$beginTime));
}else if($initMinute<60){
$startTime = mktime(date('H',$beginTime),60,0,date('m',$beginTime),date('d',$beginTime),date('Y',$beginTime));
}
}
if($startTime+\Our\ApiConst::halfHour<$endTime){
$interval =\Our\ApiConst::zero;
for($i=$startTime;$i<$endTime;$i = $i+(\Our\ApiConst::halfHour)){
$interval += \Our\ApiConst::halfHour;
$temp = array();
$temp['time'] = $i;
$temp['interval'] = \Our\ApiConst::halfHour;
$temp['isDefault'] = \Our\ApiConst::zero;
if($interval==\Our\ApiConst::halfHour*1){//半小时内的价格
$temp['price'] = $formulaPrice['half'];
$temp['isDefault'] = \Our\ApiConst::one;
}else if($interval<=\Our\ApiConst::halfHour*2){
$temp['price'] = $formulaPrice['one'];
}else if($interval<=\Our\ApiConst::halfHour*4){
$temp['price'] = $formulaPrice['two'];
}else{
$temp['price'] = $formulaPrice['oneday'];
}
if($deliveryFreeFlag){
$temp['price'] = \Our\ApiConst::zero;
}
$temp['price'] = $temp['price']?$temp['price']:\Our\ApiConst::zero;
$formulaList[] = $temp;
}
}
return $formulaList;
}
public function getOtherDayFormulaList($beginTime,$endTime,$price,$deliveryFreeFlag,$isDefault = \Our\ApiConst::zero){
$formulaList = array();
$initMinute = intval(date('i',$beginTime));
if($initMinute==0||$initMinute==30){
$startTime = $beginTime;
}else{
if($initMinute<30){
$startTime = mktime(date('H',$beginTime),30,0,date('m',$beginTime),date('d',$beginTime),date('Y',$beginTime));
}else if($initMinute<60){
$startTime = mktime(date('H',$beginTime),60,0,date('m',$beginTime),date('d',$beginTime),date('Y',$beginTime));
}
}
if($startTime+\Our\ApiConst::halfHour<$endTime){
for($i=$startTime;$i<$endTime;$i = $i+(\Our\ApiConst::halfHour)){
$temp = array();
$temp['time'] = $i;
$temp['interval'] = \Our\ApiConst::halfHour;
$temp['price'] = $price?$price:\Our\ApiConst::zero;
if($deliveryFreeFlag){
$temp['price'] = \Our\ApiConst::zero;
}
$temp['isDefault'] = $isDefault;
$isDefault = \Our\ApiConst::zero;
$formulaList[] = $temp;
}
}
return $formulaList;
}
/**
* 获取自提时间段
* @param $beginTime
* @param $endTime
* @param int $isDefault
* @return array
*/
public function getBuyerFormulaList($beginTime,$endTime,$isDefault = \Our\ApiConst::zero){
$formulaList = array();
$initMinute = intval(date('i',$beginTime));
if($initMinute==0||$initMinute==30){
$startTime = $beginTime;
}else{
if($initMinute<30){
$startTime = mktime(date('H',$beginTime),30,0,date('m',$beginTime),date('d',$beginTime),date('Y',$beginTime));
}else if($initMinute<60){
$startTime = mktime(date('H',$beginTime),60,0,date('m',$beginTime),date('d',$beginTime),date('Y',$beginTime));
}
}
if($startTime+\Our\ApiConst::halfHour<$endTime){
for($i=$startTime;$i<$endTime;$i = $i+(\Our\ApiConst::halfHour)){
$temp = array();
$temp['time'] = $i;
$temp['interval'] = \Our\ApiConst::halfHour;
$temp['isDefault'] = $isDefault;
$temp['price'] = \Our\ApiConst::zero;
$isDefault = \Our\ApiConst::zero;
$formulaList[] = $temp;
}
}
return $formulaList;
}
public function getDeliveryFormulaForCart($store,$distance,$deliveryFreeFlag=false){ public function getDeliveryFormulaForCart($store,$distance,$deliveryFreeFlag=false){
$deliveryFormula = \Our\RedisHelper::cachedFunction(\Redis\Db6\DeliveryFormulaRedisModel::getInstance(),array(&$this, 'getOne'),array('*',array('store_id'=>$store['store_id'])),\Our\ApiConst::sevenDaySecond,array($store['store_id'])); $deliveryFormula = \Our\RedisHelper::cachedFunction(\Redis\Db6\DeliveryFormulaRedisModel::getInstance(),array(&$this, 'getOne'),array('*',array('store_id'=>$store['store_id'])),\Our\ApiConst::sevenDaySecond,array($store['store_id']));
if(!$deliveryFormula){ if(!$deliveryFormula){
......
...@@ -261,7 +261,7 @@ class GoodsModel extends \DAO\AbstractModel { ...@@ -261,7 +261,7 @@ class GoodsModel extends \DAO\AbstractModel {
} }
if($fromCart){ if($fromCart){
$sql = \Our\Common::format(' goods_commonid in ({0})',implode(',',$goodsCommonIds)); $sql = \Our\Common::format(' goods_commonid in ({0})',implode(',',$goodsCommonIds));
$field = 'goods_commonid,goods_id,goods_storage,goods_state,goods_verify,is_transport,transport_id,gc_id,gc_id_1,gc_id_2,gc_id_3,snapshot_id,goods_image,goods_freight,goods_free'; $field = 'goods_commonid,goods_id,goods_storage,goods_state,goods_verify,is_transport,transport_id,gc_id,gc_id_1,gc_id_2,gc_id_3,snapshot_id,goods_image,goods_freight,goods_free,delivery_template_id';
}else if($noRedisGoodsCommonIds){ }else if($noRedisGoodsCommonIds){
$sql = \Our\Common::format(' goods_commonid in ({0})',implode(',',$noRedisGoodsCommonIds)); $sql = \Our\Common::format(' goods_commonid in ({0})',implode(',',$noRedisGoodsCommonIds));
$field = 'goods_commonid,goods_id,goods_storage,goods_state,goods_verify'; $field = 'goods_commonid,goods_id,goods_storage,goods_state,goods_verify';
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment