From 3c53f8a4ab5fa964ae9a650f86937f28bfc3be06 Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Sat, 16 Mar 2024 11:51:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E6=B6=88=E8=B4=B9?= =?UTF-8?q?=E8=BF=94=E5=88=A9=20-=20=E5=A4=8D=E8=B4=AD=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/models/goods/Privilege.php | 21 +++++++++++-- .../orderGoods/models/PreOrderGoods.php | 23 ++++++++++++++ .../price/option/BaseOrderGoodsPrice.php | 30 +++++++++++++++++-- plugins/rebate/src/models/Rebate.php | 1 + 4 files changed, 70 insertions(+), 5 deletions(-) diff --git a/app/common/models/goods/Privilege.php b/app/common/models/goods/Privilege.php index 58b77c6f..3eb0a1d4 100644 --- a/app/common/models/goods/Privilege.php +++ b/app/common/models/goods/Privilege.php @@ -17,6 +17,7 @@ use app\common\models\Member; use app\common\models\MemberGroup; use app\common\models\MemberLevel; use app\common\models\Order; +use app\common\models\OrderGoods; use Carbon\Carbon; use Illuminate\Support\Facades\DB; use app\common\facades\Setting; @@ -588,9 +589,15 @@ class Privilege extends BaseModel } } - - - // 消费返利商品判断 + /** + * Common: 消费返利商品判断 - 是否允许购买 + * Author: wu-hui + * Time: 2024/03/16 11:01 + * @param $member + * @param $num + * @return false|void + * @throws AppException + */ public function validateRebate($member,$num){ // 判断:是否开启消费返利 $goodsRebate = GoodsRebate::where('goods_id',$this->goods_id)->first(); @@ -625,6 +632,14 @@ class Privilege extends BaseModel $limitTime = strtotime(date("Y-m-d H:i:s",$maxTime)." +{$repurchase_day} day"); // 判断:最后复购时间 小于等于 当前时间,超出复购时间,禁止复购 if($limitTime <= time()) throw new AppException('已超过复购时间'); + // 是否已经存在复购订单 + $isHas = (int)OrderGoods::where('is_rebate',1) + ->where('created_at', '>', $maxTime)// 在最后一次返利后的订单 + ->where('created_at', '<=', $limitTime)// 在复购时间内的订单 + ->where('goods_id', $this->goods_id)// 同一个商品 + ->where('uid', $member->uid)// 同一个用户 + ->value('id'); + if($isHas > 0) throw new AppException('请勿重复复购!'); } } diff --git a/app/common/modules/orderGoods/models/PreOrderGoods.php b/app/common/modules/orderGoods/models/PreOrderGoods.php index 1c7ba074..64cddd70 100644 --- a/app/common/modules/orderGoods/models/PreOrderGoods.php +++ b/app/common/modules/orderGoods/models/PreOrderGoods.php @@ -29,6 +29,8 @@ use Yunshop\CulturalSpace\models\CulturalFund; use Yunshop\CulturalSpace\models\GoodsCulturalSpace; use Yunshop\PointMall\models\PointMallGoodsModel; use Yunshop\PointMall\models\PointMallGoodsOptionsModel; +use Yunshop\Rebate\models\GoodsRebate; +use Yunshop\Rebate\models\Rebate; /** * Class PreOrderGoods @@ -174,6 +176,27 @@ class PreOrderGoods extends OrderGoods $this->legumes_exchange_price = $legumes_exchange_price; $this->use_legumes_exchange = (float)ceil(sprintf("%.2f",$legumes_exchange_price / $current_fee)); } + // 判断:是否开启消费返利 + $this->is_rebate = 0; + $goodsRebate = GoodsRebate::where('goods_id',$this->goods_id)->first(); + if($goodsRebate->is_open == 1){ + // 判断:当前返利记录是否已经失效 + $endTime = Rebate::where('uid',(int)$this->uid) + ->where('goods_id', $this->goods_id) + ->max('reality_thaw_time'); + // 不存在返利记录 原价购买 + if(empty($endTime)) return $this->price; + // 存在返利记录 判断最后一条信息的状态 + $endInfo = Rebate::where('uid', (int)$this->uid) + ->where('goods_id', $this->goods_id) + ->where('reality_thaw_time', $endTime) + ->first(); + // 已失效 原价购买 + if($endInfo->status == 2) $this->is_rebate = 1; + } + + + // 判断:当前商品是否存在积分商品设置 /*if((int)$this->pointGoods->id > 0){ $this->point_status = 1; diff --git a/app/frontend/modules/orderGoods/price/option/BaseOrderGoodsPrice.php b/app/frontend/modules/orderGoods/price/option/BaseOrderGoodsPrice.php index cd740482..306ed5f3 100644 --- a/app/frontend/modules/orderGoods/price/option/BaseOrderGoodsPrice.php +++ b/app/frontend/modules/orderGoods/price/option/BaseOrderGoodsPrice.php @@ -9,6 +9,8 @@ namespace app\frontend\modules\orderGoods\price\option; * Time: 下午6:04 */ +use app\common\exceptions\AppException; +use app\common\facades\Setting; use app\common\helpers\Serializer; use app\frontend\models\order\PreOrderCoinExchange; use app\frontend\models\orderGoods\PreOrderGoodsCoinExchange; @@ -26,6 +28,8 @@ use app\frontend\modules\orderGoods\price\adapter\GoodsAdapterManager; use app\frontend\modules\orderGoods\taxFee\BaseTaxFee; use Yunshop\CulturalSpace\models\CulturalFund; use Yunshop\CulturalSpace\models\GoodsCulturalSpace; +use Yunshop\Rebate\models\GoodsRebate; +use Yunshop\Rebate\models\Rebate; abstract class BaseOrderGoodsPrice extends OrderGoodsPrice { @@ -99,11 +103,33 @@ abstract class BaseOrderGoodsPrice extends OrderGoodsPrice if((int)request()->input('is_legumes_exchange') == 1) return 0; if (isset($this->price)) return $this->price; if ($this->isCoinExchange()) return 0; - // 商品销售价 - 等级优惠金额 $this->price = $this->getGoodsPrice(); - $this->price = max($this->price, 0); + // 判断:是否开启消费返利 + $goodsRebate = GoodsRebate::where('goods_id',$this->orderGoods->goods_id)->first(); + if($goodsRebate->is_open == 1){ + // 判断:当前返利记录是否已经失效 + $endTime = Rebate::where('uid', $this->orderGoods->uid) + ->where('goods_id', $this->orderGoods->goods_id) + ->max('reality_thaw_time'); + // 不存在返利记录 原价购买 + if(empty($endTime)) return $this->price; + // 存在返利记录 判断最后一条信息的状态 + $endInfo = Rebate::where('uid', $this->orderGoods->uid) + ->where('goods_id', $this->orderGoods->goods_id) + ->where('reality_thaw_time', $endTime) + ->first(); + // 已失效 原价购买 + if($endInfo->status == 2){ + // 复购 + $endInfo = $endInfo->toArray(); + $goodsRebate = $goodsRebate->toArray(); + $quarter = $goodsRebate['quarter_list'][$endInfo['quarter']]; + $this->price = $quarter['repurchase_money'] ?? 0; + } + } + return $this->price; } diff --git a/plugins/rebate/src/models/Rebate.php b/plugins/rebate/src/models/Rebate.php index 1208345b..ed734765 100644 --- a/plugins/rebate/src/models/Rebate.php +++ b/plugins/rebate/src/models/Rebate.php @@ -148,6 +148,7 @@ class Rebate extends BaseModel{ ]) ->leftjoin('yz_goods_rebate','yz_goods_rebate.goods_id','=','yz_order_goods.goods_id') ->where('yz_order_goods.order_id',$orderId) + ->where('yz_order_goods.is_rebate',0) ->where('yz_goods_rebate.is_open', 1) ->get() ->makeHidden(['order','after_sales','buttons'])