添加:参与消费返利商品指定时间段内只能购买一次该商品

This commit is contained in:
wuhui_zzw 2024-03-15 18:13:47 +08:00
parent 77ee4bbf34
commit 7b3570a8a6
5 changed files with 67 additions and 9 deletions

View File

@ -20,6 +20,8 @@ use app\common\models\Order;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use app\common\facades\Setting;
use Yunshop\Rebate\models\GoodsRebate;
use Yunshop\Rebate\models\Rebate;
/**
* Class Privilege
@ -180,6 +182,8 @@ class Privilege extends BaseModel
$this->validateMemberGroupLimit($member);
$this->validateBuyMultipleLimit($num);
$this->validateTimeLimits($member,$num);
$this->validateRebate($member,$num);
}
/**
@ -203,6 +207,8 @@ class Privilege extends BaseModel
$this->validateMemberGroupLimit($member);
$this->validateBuyMultipleLimit($num);
$this->validateTimeLimits($member,$num);
$this->validateRebate($member,$num);
}
@ -582,4 +588,45 @@ class Privilege extends BaseModel
}
}
// 消费返利商品判断
public function validateRebate($member,$num){
// 判断:是否开启消费返利
$goodsRebate = GoodsRebate::where('goods_id',$this->goods_id)->first();
if($goodsRebate->is_open == 1){
// 判断:当前返利记录是否已经失效 最后一条返利信息已失效或者已结算 则允许重新购买 状态0=冻结中1=待结算,2=已结算3=已失效4=已退款(失效)
$endTime = Rebate::where('uid', $member->uid)
->where('goods_id', $this->goods_id)
->max('expect_thaw_time');
if(empty($endTime)) return false;
$endInfo = Rebate::where('uid', $member->uid)
->where('goods_id', $this->goods_id)
->where('expect_thaw_time', $endTime)
->first();
if(!$endInfo || in_array($endInfo->status,[2,3,4])) return false;
// 获取已经返利的 最大时间
$maxTime = Rebate::where('uid', $member->uid)
->where('goods_id', $this->goods_id)
->where('status', 2)
->max('reality_thaw_time');
if(empty($maxTime)) return false;
$lastInfo = Rebate::where('uid', $member->uid)
->where('goods_id', $this->goods_id)
->where('status', 2)
->where('reality_thaw_time', $maxTime)
->first();
if(!$lastInfo) return false;
$lastInfo = $lastInfo->toArray();
if($lastInfo['is_repurchase'] != 1) throw new AppException('未到复购时间');
// 判断:需要复购 最后一次结算时间N天内
$set = Setting::get('plugin.rebate');
$repurchase_day = $set['repurchase_day'] ?? 0;
$limitTime = strtotime(date("Y-m-d H:i:s",$maxTime)." +{$repurchase_day} day");
if($limitTime >= time()) throw new AppException('已超过复购时间');
}
}
}

View File

@ -159,10 +159,12 @@ class Rebate extends BaseModel{
public static function rebateThaw(){
$time = time();
// 预计解冻时间 低于当前时间 解冻
self::where('expect_thaw_time','<=', $time)->update([
'status' => 1,
'reality_thaw_time' => $time
]);
self::where('expect_thaw_time','<=',$time)
->where('status',0)
->update([
'status' => 1,
'reality_thaw_time' => $time
]);
// 执行 已解冻佣金结算到账
self::rebateSettlement();
}

View File

@ -73,6 +73,12 @@
</div>
</el-form-item>
<template v-if="set.is_switch == 1">
<el-form-item label="复购限制时间">
<el-input v-model.number="set.repurchase_day" min="0" type="number" class="shortInput">
<template slot="prepend">需要在复购返利结算后</template>
<template slot="append">天内复购</template>
</el-input>
</el-form-item>
<el-form-item label="返利季度">
<el-input placeholder="请输入返利总季度" v-model.number="set.total_quarter" min="0" type="number" class="shortInput">
<template slot="prepend">总共返利</template>
@ -137,6 +143,7 @@
// 设置信息
set:{
is_switch: Number("{{ $set['is_switch'] ?? 0 }}"),
repurchase_day: Number("{{ $set['repurchase_day'] ?? 0 }}"),
total_quarter: "{{ $set['total_quarter'] ?? '' }}",
quarter_list: JSON.parse('{!! json_encode($set['quarter_list']) !!}') || {},
},

View File

@ -735,7 +735,7 @@ class PluginApplication extends \app\common\services\PluginApplication
});
// 经销商佣金解冻 每5分钟执行一次
\Cron::add('Team-dividend', '*/5 * * * *', function () {
\Cron::add('Team-dividend-rebate-thaw', '*/5 * * * *', function () {
(new \Yunshop\TeamDividend\services\TimedTaskService)->rebateThaw();
return;
});

View File

@ -398,10 +398,12 @@ class TimedTaskService
public static function rebateThaw(){
$time = time();
// 预计解冻时间 低于当前时间 解冻
TeamDividendModel::where('expect_thaw_time','<=', $time)->update([
'status' => 0,
'reality_thaw_time' => $time
]);
TeamDividendModel::where('expect_thaw_time','<=',$time)
->where('status',2)
->update([
'status' => 0,
'reality_thaw_time' => $time
]);
}