修复:最后一次结算时间输出错误 导致显示内容错误,未显示复投信息
优化:推荐奖励 - 等级记录中等级列表按照权重大小排序 修复:推荐奖励 - 当前等级信息未输出,导致移动端显示错误,等级统计中的等级信息未改变 优化:推荐奖励 - 奖励按照预计结算时间排序
This commit is contained in:
parent
dbd05d6614
commit
ae79e2dede
|
|
@ -494,7 +494,7 @@ class IncomeService
|
|||
{
|
||||
$income_config_desc = [
|
||||
self::COMMISSION_ORDER => \Setting::get('shop.lang.zh_cn.commission.commission_amount') ? : '直推奖励',
|
||||
self::TEAM_DIVIDEND => '团队收益',
|
||||
self::TEAM_DIVIDEND => '经销商佣金',//团队收益
|
||||
self::AGENT_DIVIDEND => '代理商分红',
|
||||
self::APPOINTMENT_ORDER => '门店预约',
|
||||
self::AREA_DIVIDEND => '区域分红',
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ class PluginApplication extends \app\common\services\PluginApplication{
|
|||
return;
|
||||
});
|
||||
// 每5分钟 执行一次消费返利失效判断
|
||||
\Cron::add('rebate-lose-efficacy', '*/5 * * * *', function () {
|
||||
\Cron::add('rebate-lose-efficacy', '*/1 * * * *', function () {
|
||||
Rebate::loseEfficacy();
|
||||
return;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -54,5 +54,20 @@ class IndexController extends BaseController{
|
|||
}
|
||||
|
||||
|
||||
public function test(){
|
||||
|
||||
|
||||
// Rebate::loseEfficacy();
|
||||
|
||||
|
||||
debug("调试结束");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace Yunshop\Rebate\Api;
|
||||
|
||||
use app\common\components\ApiController;
|
||||
use app\common\facades\Setting;
|
||||
use app\common\models\Goods;
|
||||
use app\common\models\Income;
|
||||
use app\common\models\Member;
|
||||
|
|
@ -123,6 +124,8 @@ class IndexController extends ApiController{
|
|||
->where('yz_member_income.status', 0)
|
||||
->sum('yz_member_income.amount');
|
||||
// 获取全部返利信息 并且循环处理
|
||||
$set = Setting::get('plugin.rebate');
|
||||
$repurchase_day = $set['repurchase_day'] ?? 0;
|
||||
$monthList = Rebate::select(['id','quarter','month','expect_thaw_time','money','status','is_repurchase','repurchase_money','reality_thaw_time'])
|
||||
->where([
|
||||
'uid' => $uid,
|
||||
|
|
@ -148,7 +151,11 @@ class IndexController extends ApiController{
|
|||
if($quarterList[$monthInfo['quarter']]['status'] != 2) $quarterList[$monthInfo['quarter']]['status'] = (int)$monthInfo['status'];
|
||||
// 当前记录最后一次结算时间
|
||||
$reality_thaw_time = $monthInfo['reality_thaw_time'] ? strtotime($monthInfo['reality_thaw_time']) : 0;
|
||||
if((int)$reality_thaw_time > 0) $quarterList[$monthInfo['quarter']]['last_reality_thaw_time'] = (int)$reality_thaw_time;
|
||||
if(!array_key_exists('last_reality_thaw_time',$quarterList[$monthInfo['quarter']])) $quarterList[$monthInfo['quarter']]['last_reality_thaw_time'] = 0;
|
||||
if((int)$reality_thaw_time > 0) {
|
||||
$quarterList[$monthInfo['quarter']]['last_reality_thaw_time'] = (int)$reality_thaw_time;
|
||||
$quarterList[$monthInfo['quarter']]['repurchase_end_time'] = (int)strtotime(date("Y-m-d H:i:s",$reality_thaw_time)." +{$repurchase_day} day");;
|
||||
}
|
||||
// 最后一次预计结算时间
|
||||
$quarterList[$monthInfo['quarter']]['last_expect_thaw_time'] = $monthInfo['expect_thaw_time'] ? strtotime($monthInfo['expect_thaw_time']) : 0;
|
||||
}
|
||||
|
|
@ -190,12 +197,13 @@ class IndexController extends ApiController{
|
|||
$uid = \YunShop::app()->getMemberId();
|
||||
$levelId = (int)request()->input('level_id');
|
||||
// 获取全部等级
|
||||
$level_list = TeamDividendLevelModel::uniacid()->select(['id','level_name'])->get()->toArray();
|
||||
$level_list = TeamDividendLevelModel::uniacid()->select(['id','level_name'])->orderBy('level_weight','ASC')->get()->toArray();
|
||||
// 获取登记统计 不存在则使用默认第一个等级
|
||||
$levelId = $levelId <= 0 ? $level_list[0]['id'] : $levelId;
|
||||
$levelId = $levelId <= 0 ? TeamDividendAgencyModel::where('uid', $uid)->value('level') : $levelId;
|
||||
$list = TeamDividendModel::where('member_id', $uid)
|
||||
->select(['id','expect_thaw_time','dividend_amount','status','type'])
|
||||
->where('agent_level',$levelId)
|
||||
->orderBy('expect_thaw_time','ASC')
|
||||
->get()->each(function($item){
|
||||
$item['expect_thaw_time'] = date("m月d日",$item['expect_thaw_time']);
|
||||
|
||||
|
|
@ -203,10 +211,11 @@ class IndexController extends ApiController{
|
|||
})->toArray();
|
||||
// 统计
|
||||
$all_income = TeamDividendModel::where('member_id', $uid)->where('agent_level',$levelId)->sum('dividend_amount');
|
||||
$credited = TeamDividendModel::where('member_id', $uid)->where('agent_level',$levelId)->sum('dividend_amount');
|
||||
$credited = TeamDividendModel::where('member_id', $uid)->where('agent_level',$levelId)->where('status', 2)->sum('dividend_amount');
|
||||
// 当前等级
|
||||
$levelInfo = TeamDividendLevelModel::select(['id','level_name'])->where('id',$levelId)->first();
|
||||
|
||||
|
||||
return $this->successJson('success',compact('level_list','list','all_income','credited'));
|
||||
return $this->successJson('success',compact('level_list','list','all_income','credited','levelInfo'));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ use app\common\models\Goods;
|
|||
use app\common\models\Member;
|
||||
use app\common\models\Order;
|
||||
use app\common\models\OrderGoods;
|
||||
use app\common\models\UniAccount;
|
||||
use app\common\services\income\IncomeService;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
|
|
@ -47,6 +48,9 @@ class Rebate extends BaseModel{
|
|||
if($ids) $ids = $ids->toArray();
|
||||
$query->whereIn('uid',(array)$ids);
|
||||
})
|
||||
->when(isset($search['status']) && $search['status'] != '',function($query) use ($search){
|
||||
$query->where('status', $search['status']);
|
||||
})
|
||||
->with([
|
||||
'member' => function($query){
|
||||
$query->select(['uid','nickname','realname','avatar']);
|
||||
|
|
@ -211,57 +215,73 @@ class Rebate extends BaseModel{
|
|||
* Time: 2024/03/16 10:59
|
||||
*/
|
||||
public static function loseEfficacy(){
|
||||
// 分组 获取最新一条已处理数据 状态:0=冻结中,1=待结算,2=已结算,3=已失效,4=已退款(失效)
|
||||
$list = self::selectRaw('max(id) as id,max(reality_thaw_time) as max_reality_thaw_time,max(status) as status,uid,goods_id,order_id,CONCAT(uid,"_",goods_id) as group_key')
|
||||
->whereIn('status',[2,3,4])
|
||||
->groupBy('group_key')
|
||||
->get()
|
||||
->toArray();
|
||||
$ids = array_column($list, 'id');
|
||||
// 获取复购订单 状态为已结算 不存在信息的都是未复购,立即失效
|
||||
$settlement = self::select([
|
||||
'yz_rebate.id',
|
||||
'yz_order_goods.uid',
|
||||
'yz_order_goods.order_id',
|
||||
'yz_order_goods.goods_id',
|
||||
'yz_order.pay_time',
|
||||
'yz_rebate.reality_thaw_time',
|
||||
DB::raw('ims_yz_order_goods.id as order_goods_id'),
|
||||
DB::raw('CONCAT(ims_yz_order_goods.uid,"_",ims_yz_order_goods.goods_id) as group_key')
|
||||
])
|
||||
->rightJoin('yz_order_goods',function($join){
|
||||
$join->on('yz_order_goods.goods_id','=','yz_rebate.goods_id')
|
||||
->on('yz_order_goods.uid','=','yz_rebate.uid');
|
||||
})
|
||||
->rightJoin('yz_order',function($join){
|
||||
$join->on('yz_order.id','=','yz_order_goods.order_id')
|
||||
->on('yz_order.pay_time','>','yz_rebate.reality_thaw_time');
|
||||
})
|
||||
->whereIn('yz_rebate.id',$ids)
|
||||
->where('yz_rebate.status',2)
|
||||
->where('yz_rebate.is_repurchase',1)
|
||||
->get()
|
||||
->toArray();
|
||||
// 获取两个数组差异
|
||||
$set = Setting::get('plugin.rebate');
|
||||
$repurchase_day = $set['repurchase_day'] ?? 0;
|
||||
$groupKey = array_column($settlement,'group_key');
|
||||
// 循环判断 处理失效内容
|
||||
foreach($list as $item){
|
||||
// 判断: 不存在复购信息;并且最后一条结算时间+N天 小于等于当前时间;最后一条信息状态为已结算 = 信息失效
|
||||
$endTime = strtotime(date("Y-m-d H:i:s",$item['max_reality_thaw_time'])." +{$repurchase_day} day");
|
||||
if(!in_array($item['group_key'], $groupKey) && $endTime <= time() && $item['status'] == 2){
|
||||
self::where([
|
||||
'status' => 0,
|
||||
'uid' => $item['uid'],
|
||||
'goods_id' => $item['goods_id'],
|
||||
'order_id' => $item['order_id'],
|
||||
])->update([
|
||||
'status' => 3,
|
||||
'reality_thaw_time' => time()
|
||||
]);
|
||||
set_time_limit(0);
|
||||
DB::beginTransaction();
|
||||
try{
|
||||
// 循环平台 进行处理
|
||||
$uniAccount = UniAccount::getEnable() ?: [];
|
||||
foreach ($uniAccount as $u) {
|
||||
Setting::$uniqueAccountId = \YunShop::app()->uniacid = $u->uniacid;
|
||||
// 分组 获取最新一条已处理数据 状态:0=冻结中,1=待结算,2=已结算,3=已失效,4=已退款(失效)
|
||||
$list = self::selectRaw('max(id) as id,max(reality_thaw_time) as max_reality_thaw_time,max(status) as status,uid,goods_id,order_id,CONCAT(uid,"_",goods_id) as group_key')
|
||||
->whereIn('status',[2,3,4])
|
||||
->groupBy('group_key')
|
||||
->get()
|
||||
->toArray();
|
||||
$ids = array_column($list, 'id');
|
||||
// 获取复购订单 状态为已结算 不存在信息的都是未复购,立即失效
|
||||
$settlement = self::select([
|
||||
'yz_rebate.id',
|
||||
'yz_order_goods.uid',
|
||||
'yz_order_goods.order_id',
|
||||
'yz_order_goods.goods_id',
|
||||
'yz_order.pay_time',
|
||||
'yz_rebate.reality_thaw_time',
|
||||
DB::raw('ims_yz_order_goods.id as order_goods_id'),
|
||||
DB::raw('CONCAT(ims_yz_order_goods.uid,"_",ims_yz_order_goods.goods_id) as group_key')
|
||||
])
|
||||
->rightJoin('yz_order_goods',function($join){
|
||||
$join->on('yz_order_goods.goods_id','=','yz_rebate.goods_id')
|
||||
->on('yz_order_goods.uid','=','yz_rebate.uid');
|
||||
})
|
||||
->rightJoin('yz_order',function($join){
|
||||
$join->on('yz_order.id','=','yz_order_goods.order_id')
|
||||
->on('yz_order.pay_time','>','yz_rebate.reality_thaw_time');
|
||||
})
|
||||
->whereIn('yz_rebate.id',$ids)
|
||||
->where('yz_rebate.status',2)
|
||||
->where('yz_rebate.is_repurchase',1)
|
||||
->get()
|
||||
->toArray();
|
||||
// 获取两个数组差异
|
||||
$set = Setting::get('plugin.rebate');
|
||||
$repurchase_day = $set['repurchase_day'] ?? 0;
|
||||
$groupKey = array_column($settlement,'group_key');
|
||||
// 循环判断 处理失效内容
|
||||
foreach($list as $item){
|
||||
// 判断: 不存在复购信息;并且最后一条结算时间+N天 小于等于当前时间;最后一条信息状态为已结算 = 信息失效
|
||||
$endTime = strtotime(date("Y-m-d H:i:s",$item['max_reality_thaw_time'])." +{$repurchase_day} day");
|
||||
if(!in_array($item['group_key'], $groupKey) && $endTime <= time() && $item['status'] == 2){
|
||||
self::where([
|
||||
'status' => 0,
|
||||
'uid' => $item['uid'],
|
||||
'goods_id' => $item['goods_id'],
|
||||
'order_id' => $item['order_id'],
|
||||
])->update([
|
||||
'status' => 3,
|
||||
'reality_thaw_time' => time()
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
DB::commit();
|
||||
}catch(\Exception $e){
|
||||
\Log::debug('--- 消费返利 - 失效判断 - 错误:'.$e->getMessage());
|
||||
DB::rollBack();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -63,6 +63,23 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-11 col-xs-12">
|
||||
<div class="row row-fix tpl-category-container" >
|
||||
<div class="col-xs-12 col-sm-8 col-lg-3">
|
||||
{{--状态:0=冻结中,1=待结算,2=已结算,3=已失效,4=已退款(失效)--}}
|
||||
<select class="form-control tpl-category-parent" name="search[status]">
|
||||
<option value="" @if (!$search['status'] && $search['status'] != 0) selected="selected" @endif>全部</option>
|
||||
<option value="0" @if ($search['status'] === '0') selected="selected" @endif>冻结中</option>
|
||||
<option value="1" @if ($search['status'] == 1) selected="selected" @endif>待结算</option>
|
||||
<option value="2" @if ($search['status'] == 2) selected="selected" @endif>已结算</option>
|
||||
<option value="3" @if ($search['status'] == 3) selected="selected" @endif>已失效</option>
|
||||
<option value="4" @if ($search['status'] == 4) selected="selected" @endif>已退款</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-6">
|
||||
<button class="btn btn-success" id="search"><i class="fa fa-search"></i> 搜索</button>
|
||||
|
|
|
|||
Loading…
Reference in New Issue