0)?$buyNum:1; //验证传过来的商品是否合法 $chk = $this->checkGoodsSaleSpec($goodsId,$goodsSpecId); if($chk['status']==-1)return $chk; $goodsSpecId = $chk['data']['goodsSpecId']; //检测库存是否足够 if($chk['data']['stock']<$buyNum){ return WSTReturn("购买失败,商品库存不足", -1); } $carts = []; $carts['goodsId'] = $goodsId; $carts['goodsSpecId'] = $goodsSpecId; $carts['buyNum'] = $buyNum; $carts['goodsType'] = $goodsType; session('HYH_CARTS',$carts); return WSTReturn("添加成功", 1); } /** * 现在购买 * isSettlement 是结算页面 * uId 会员ID,默认为当前ID * userAddress 会员地址 */ public function buyNow($areaId2=0, $uId=0){ $hyhCarts = session('HYH_CARTS'); $goodsId = $hyhCarts['goodsId']; $goodsSpecId =$hyhCarts['goodsSpecId']; $buyNum = $hyhCarts['buyNum']; $areaId2 = ($areaId2==0)?input('areaId2/d'):$areaId2; $userId = ($uId==0)?(int)session('WST_USER.userId'):$uId; if(!$goodsId){ exit(jsonReturn('请勿重新下单!',-2)); } if(!$userId){ exit(jsonReturn('请重新登录下单!',-999)); } $where = []; $where['g.goodsId'] = $goodsId; $where['g.dataFlag'] = 1; $where['g.goodsStatus'] = 1; $where['g.isSale'] = 1; $where['s.dataFlag'] = 1; $where['s.shopStatus'] = 1; $where['s.status'] = 1; if($goodsSpecId){ $where['gs.id'] = $goodsSpecId; } //获取商品和商店信息 $rs = Db::name('goods g') ->join('__SHOPS__ s','s.shopId=g.shopId','left') ->join('__GOODS_SPECS__ gs','g.goodsId=gs.goodsId','left') ->where($where) ->field('s.userId,s.shopId,s.shopName,s.userId shopUserId,s.shopLevel,g.goodsId,g.goodsName,g.shopPrice,g.goodsStock,g.isSpec,g.marketPrice,gs.specPrice,gs.specStock,g.goodsImg,gs.specIds,g.goodsCatId,g.freight,g.isFreeShipping,gs.initNum,gs.whslePrice') ->find(); if(!$rs){ exit(jsonReturn('商品读取失败',-1)); } $cartsInfo[$rs['shopId']]['isFreeShipping'] = (bool)$rs['isFreeShipping']; $cartsInfo[$rs['shopId']]['promotion'] = []; $cartsInfo[$rs['shopId']]['promotionMoney'] = 0; $cartsInfo[$rs['shopId']]['shopId'] = $rs['shopId']; $cartsInfo[$rs['shopId']]['shopName'] = $rs['shopName']; $cartsInfo[$rs['shopId']]['userId'] = $rs['userId']; if($rs['isSpec']==1){ $rs['shopPrice'] = $rs['specPrice']; $rs['goodsStock'] = $rs['specStock']; }else{ $rs['initNum'] = 0; $rs['whslePrice'] = 0; } $hyhCarts['goodsType'] = (int) $hyhCarts['goodsType']; if(2 == $hyhCarts['goodsType']){//助微吧购物判断店主等级 $tm = Model('common/Table'); $tm->setTable('shops'); //换算为3级循环等级 //助微吧限销售额为≥?元 9900 。 提示:具体功能没实现,合并原“初始”、“一级”、“二级”、“三级”4项 @ 2020/09/19 $maxSaleMoney = dataConf('helpLevel0MaxSaleMoney'); $tm->setTable('shops'); //当前销售值 $nowSaleMoney = $tm->getSum(['userId'=>$rs['shopUserId']],'helpSaleMoney'); if($nowSaleMoney > $maxSaleMoney ){ exit(jsonReturn('当前助微吧商户可销售额不足!',-1)); } } $cartsInfo[$rs['shopId']]['goodsMoney'] = $rs['shopPrice'] * $buyNum; //判断能否购买,预设allowBuy值为10,为将来的各种情况预留10个情况值,从0到9 $rs['allowBuy'] = 10; if($rs['goodsStock']<=0){ //$rs['allowBuy'] = 0;//库存不足 exit(jsonReturn('库存不足',-1)); }else if($rs['goodsStock']<$buyNum){ //$rs['allowBuy'] = 1;//库存比购买数小 $buyNum = $rs['goodsStock']; } $rs['specNames'] = []; //加载规格值 if($goodsSpecId>0){ $specs = DB::name('spec_items')->alias('s')->join('__SPEC_CATS__ sc','s.catId=sc.catId','left') ->where(['s.goodsId'=>$rs['goodsId'],'s.dataFlag'=>1])->field('catName,itemId,itemName')->select(); if(count($specs)>0){ $specMap = []; foreach ($specs as $key =>$v){ $specMap[$v['itemId']] = $v; } $strName = []; if($rs['specIds']!=''){ $str = explode(':',$rs['specIds']); foreach ($str as $vv){ if(isset($specMap[$vv]))$strName[] = $specMap[$vv]; } $rs['specNames'] = $strName; } } } $cartsInfo[$rs['shopId']]['list']['0'] = $rs; $cartsInfo[$rs['shopId']]['list']['0']['promotion'] = []; $cartsInfo[$rs['shopId']]['list']['0']['goodsSpecId'] = $goodsSpecId; $cartsInfo[$rs['shopId']]['list']['0']['cartNum'] = $buyNum; $cartsInfo[$rs['shopId']]['list']['0']['cartId'] = $goodsSpecId; $goodsTotalMoney = $rs['shopPrice'] * $buyNum ; $goodsTotalNum = 1; $cartData = ['carts'=>$cartsInfo,'goodsTotalMoney'=>$goodsTotalMoney,'goodsTotalNum'=>$goodsTotalNum,'promotionMoney'=>0]; //秒杀活动监听 hook("beforeSettlement",["carts"=>&$cartData]); $allShippingMoney = 0; if(empty($cartData['carts']['is_seckilling'])){ //批发插件 mart hsf 20171116 hook("mobileControllerCartsSettlement",["carts"=>&$cartData]); //店铺优惠活动监听 hook('afterQueryCarts',["carts"=>&$cartData,'isSettlement'=>true,'isVirtual'=>false,'uId'=>$userId]); //ect整合相关优惠还有判断不能和在线支付商品一块 hook("ectIntegration",["carts"=>&$cartData,'isSettlement'=>true,'uId'=>$userId]); //11.11会场商品结算钩子 hook("orderCatsDoubleEleven",["carts"=>&$cartData,'isSettlement'=>true,'uId'=>$userId]); } //添加运费计算 if($rs['isFreeShipping']){ $cartData['carts'][$rs['shopId']]["shippingMoney"] = 0; }else{ $cartData['carts'][$rs['shopId']]["shippingMoney"] = $rs['freight']; // if($areaId2){ // $cartData['carts'][$rs['shopId']]["shippingMoney"] = WSTOrderFreight($rs['shopId'],$areaId2); // }else{ // $cartData['carts'][$rs['shopId']]["shippingMoney"] = WSTOrderFreight($rs['shopId'],-1); // } $allShippingMoney += $cartData['carts'][$rs['shopId']]["shippingMoney"]; } if($allShippingMoney){ $cartData['goodsTotalMoney'] += $allShippingMoney; } $cartData['allShippingMoney'] = $allShippingMoney;//添加总运费 $cartData['goodsType'] = $hyhCarts['goodsType']; return $cartData; } /** * 计算订单金额 */ public function getMoney($areaId2=0, $uId=0){ $data = ['shops'=>[],'totalMoney'=>0,'totalGoodsMoney'=>0]; $userId = $uId==0?(int)session('WST_USER.userId'):$uId; $areaId = input('post.areaId2/d',-1); //计算各店铺运费及金额 $deliverType = (int)input('deliverType');//0是快递,1是自提,自提的不要运费,先取消 $carts = $this->buyNow($areaId,$userId); $shopFreight = 0; $maxScoreMoney = 0;//初始化最大可用惠宝数 mark hsf 20171117 $total_promotion_money = 0;//初始化合计优惠 mark hsf 20170303 $data['maxScoreMoneySum'] = 0; foreach ($carts['carts'] as &$v){//优化一下循环效率 mark hsf 20171118 // if($v['isFreeShipping']){ // $data['shops'][$v['shopId']]['freight'] = 0; // }else{ // $shopFreight = ($deliverType==1)?0:WSTOrderFreight($v['shopId'],$areaId); // $data['shops'][$v['shopId']]['freight'] = $shopFreight; // } if($v['isFreeShipping']){ $shopFreight = 0; }else{ if($deliverType == 0){ $shopFreight = $v['shippingMoney']; } } $data['shops'][$v['shopId']]['freight'] = $shopFreight; $data['shops'][$v['shopId']]['oldGoodsMoney'] = $v['goodsMoney']; $data['shops'][$v['shopId']]['goodsMoney'] = $v['goodsMoney']+$shopFreight-$v['promotionMoney']; $data['totalGoodsMoney'] += $v['goodsMoney']-$v['promotionMoney']; $data['totalMoney'] += $v['goodsMoney'] + $shopFreight-$v['promotionMoney']; $total_promotion_money += $v['promotionMoney'];//合计优惠 mark hsf 20170303 /* * 计算最大可用惠宝,添加验证批发价的惠宝可抵用 mark hsf 20171117 */ // foreach ($v['list'] as &$val) { // if(isset($val['isWhsle'])){//是批发价的 // $maxScoreMoney += (int)($val['shopPrice'] * $val['cartNum'] * HuiWhsleScale());//可用惠宝默认抵10% // }else{ // $maxScoreMoney += (int)($val['shopPrice'] * $val['cartNum'] * HuiScale()); // } // } /* *----------end------------- */ } //批发插件 mart hsf 20171116 hook("mobileControllerCartsSettlement",["carts"=>&$carts]); //放钩子计算11.11订单的分类商品使用优惠券后的金额 hook("orderCatsCouponEleven",['data'=>&$data,'carts'=>&$carts,'isSettlement'=>true,'uId'=>$userId]); if(isset($data['couponMoney']) && $data['couponMoney'] > 0 ){ $total_promotion_money += $data['couponMoney']; } //此处放钩子计算商家使用优惠券后的金额-根据优惠券ID计算 hook("afterCalculateCartMoney",["data"=>&$data,'carts'=>$carts,'isVirtual'=>false,'uId'=>$userId]); //ect整合相关优惠还有判断不能和在线支付商品一块 hook("ectIntegration",["carts"=>&$carts,'isSettlement'=>true,'uId'=>$userId]); $maxScoreMoney = $data['maxScoreMoneySum']-($total_promotion_money * HuiScale());//减去优惠过的 $maxScoreMoney = $maxScoreMoney < 0 ? 0 : $maxScoreMoney; $data['totalGoodsMoney'] = ($data['totalGoodsMoney']>$data['totalMoney'])?$data['totalMoney']:$data['totalGoodsMoney']; //echo $data['totalGoodsMoney']; $data['maxScore'] = 0; $data['maxScoreMoney'] = 0; $data['useScore'] = 0; $data['scoreMoney'] = 0; // //计算最大可用惠宝 // /** // * 最多金额抵用20% mark 20170907 // */ // //$maxScoreMoney = (int)($data['totalGoodsMoney'] * HuiScale());//$data['totalGoodsMoney']; //惠宝最多可抵用20% mark 20170907 // $maxScore = WSTScoreToMoney($maxScoreMoney,true);//WSTScoreToMoney($data['totalGoodsMoney'],true); // /* // -------------------end---------------- // */ // //最大可用惠宝不能大于用户惠宝 // $user = model('users')->getFieldsById($userId,'userScore'); // if($maxScore>$user['userScore']){ // $maxScore = $user['userScore']; // $maxScoreMoney = WSTScoreToMoney($maxScore); // } // $data['maxScore'] = $maxScore; // $data['maxScoreMoney'] = $maxScoreMoney; // //判断是否使用惠宝 // $isUseScore = (int)input('isUseScore'); // if($isUseScore==1){ // //不能比用户惠宝还多 // $useScore = (float)input('useScore'); // if($useScore>$maxScore)$useScore = $maxScore; // $data['useScore'] = $useScore; // $data['scoreMoney'] = WSTScoreToMoney($useScore); // } // if((isset($carts['is_seckilling']) && $carts['is_seckilling'] == 1) || (isset($carts['promotion_goods']) && $carts['promotion_goods'] == 1)){//不可抵用惠宝 // $data['useScore']=0; // $data['scoreMoney']=0; // } //$carts['promotionMoney'] = isset($carts['promotionMoney']) ? $carts['promotionMoney'] : 0; $data['couponMoney'] = isset($data['couponMoney']) ? $data['couponMoney'] : 0; $data['realTotalMoney'] = WSTPositiveNum($data['totalMoney'] - $data['scoreMoney'] - $data['couponMoney']); //dump($data); return WSTReturn('',1,$data); } }