diff --git a/plugins/team-dividend/src/jobs/NewUpgrateJob.php b/plugins/team-dividend/src/jobs/NewUpgrateJob.php index f6597e27..5158c9ef 100644 --- a/plugins/team-dividend/src/jobs/NewUpgrateJob.php +++ b/plugins/team-dividend/src/jobs/NewUpgrateJob.php @@ -428,6 +428,10 @@ class NewUpgrateJob implements ShouldQueue ]; (new LoveChangeService())->teamLevelAward($data); } + // 升级赠送权重值 + (new WeightValue())->upgradeGiveInit($uid,(int)$level->id); + // 升级赠送画 + // CollectionRoomModel::addInfo($member->uid); } /** @@ -506,7 +510,5 @@ class NewUpgrateJob implements ShouldQueue 'relation' => $member->yzMember->relation, 'upgrade_at' => time(), ]); - // 会员升级经销商 赠送一幅画 - CollectionRoomModel::addInfo($member->uid); } } \ No newline at end of file diff --git a/plugins/team-dividend/src/observers/DealerObserver.php b/plugins/team-dividend/src/observers/DealerObserver.php index b56d8195..b7317ac4 100644 --- a/plugins/team-dividend/src/observers/DealerObserver.php +++ b/plugins/team-dividend/src/observers/DealerObserver.php @@ -10,19 +10,9 @@ use Yunshop\CollectionRoom\models\CollectionRoomModel; use Yunshop\TeamDividend\events\LevelChangeEvent; use Yunshop\TeamDividend\models\TeamDividendAgencyModel; use Yunshop\TeamDividend\models\TeamDividendLevelModel; +use Yunshop\WeightValue\models\WeightValue; -class DealerObserver extends BaseObserver -{ - // 添加后 - public function created(Model $model){ - \Log::debug('新增经销商 - created - 用户uid:',$model->toArray()); - if((int)$model->uid > 0){ - // 会员升级经销商 赠送一幅画 - CollectionRoomModel::addInfo((int)$model->uid); - } - - } - +class DealerObserver extends BaseObserver{ // 修改前 public function updating(Model $model){ if ($model->getOriginal('level') != $model->level) { @@ -48,4 +38,26 @@ class DealerObserver extends BaseObserver if((int)$levelNumberLimit <= $hasNum && (int)$levelNumberLimit > 0) return false; } + + + // 保存后 添加|编辑 + public function saved(Model $model){ + \Log::debug('经销商信息保存 - 保存成功后:',['old_lv'=>$model->getOriginal('level'),'lv'=>$model->level]); + // 经销商等级变更 + if((int)$model->uid > 0 && (int)$model->getOriginal('level') != (int)$model->level){ + // 经销商升级赠送权重值处理 + (new WeightValue())->upgradeGiveInit($model->uid,(int)$model->level); + + + + // 会员升级经销商 赠送一幅画 + // CollectionRoomModel::addInfo((int)$model->uid); + } + } + + + + + + } diff --git a/plugins/weight-value/src/admin/IndexController.php b/plugins/weight-value/src/admin/IndexController.php index ad8570b5..735e10e1 100644 --- a/plugins/weight-value/src/admin/IndexController.php +++ b/plugins/weight-value/src/admin/IndexController.php @@ -35,7 +35,13 @@ class IndexController extends BaseController{ return view('Yunshop\WeightValue::index.index',$data)->render(); } - // 查看变更记录 + /** + * Common: 查看变更记录 + * Author: wu-hui + * Time: 2023/10/16 17:48 + * @return array|\Illuminate\Http\JsonResponse|string + * @throws \Throwable + */ public function changeRecord(){ // 参数获取 $memberId = (int)request()->input('member_id'); @@ -72,11 +78,17 @@ class IndexController extends BaseController{ + public function test(){ + // (new WeightValue())->upgradeGiveInit(1,1); + } + + + } diff --git a/plugins/weight-value/src/models/WeightValue.php b/plugins/weight-value/src/models/WeightValue.php index d207f330..3dc49386 100644 --- a/plugins/weight-value/src/models/WeightValue.php +++ b/plugins/weight-value/src/models/WeightValue.php @@ -31,7 +31,7 @@ class WeightValue extends BaseModel{ // 当前订单全部商品 $goodsList = $this->getGoodsList($model->id); // 获取当前用户及上级信息 - $agents = $this->getParent($model->uid);// 全部上级信息(包含购买人) + $agents = $this->getParent($model->uid); // 循环处理每个商品 $changeRecord = [];// 变更记录 foreach($goodsList as $goodsInfo){ @@ -203,6 +203,83 @@ class WeightValue extends BaseModel{ return (float)0; } } + /** + * Common: 经销商升级赠送权重值 - 开始处理 + * Author: wu-hui + * Time: 2023/10/16 18:24 + * @param $uid + * @param $levelId + */ + public function upgradeGiveInit($uid,$levelId){ + \Log::debug('------经销商升级赠送权重值 - 开始处理------',['uid'=>$uid,'level_id'=>$levelId]); + $parents = $this->getParent($uid);// 获取当前用户及上级信息 + $levelWvSet = $this->getLevelWeightValue($levelId);// 等级赠送设置信息 + if(!$levelWvSet){ + \Log::debug('------经销商升级赠送权重值 - 错误 - 当前等级不存在设置信息------',$levelId); + return; + } + $changeRecord = [];// 变更记录 + // 判断:赠送等级为二级时,删除第三个用户 赠送等级:0=二级,1=三级 + if($levelWvSet['lv_type'] == 1 && count($parents) >= 3) unset($parents[2]); + // 获取:当前需要操作的所有经销商的领取记录 是否已经领取升级赠送的权重值 + $parentUidS = array_column($parents,'uid'); + $getRecord = WeightValueLog::uniacid() + ->whereIn('member_id',$parentUidS) + ->where('source',1) + ->where('team_dividend_agency_level_id',$levelId) + ->pluck('member_id'); + $getRecord = $getRecord ? $getRecord->toArray() : [];// 已领取记录列表 + // 循环上级信息 处理每一个用户 + foreach($parents as $agentKey => $agentInfo){ + // 判断:当前用户是否已经领取 已领取不可重复领取 + if(in_array($agentInfo['uid'],$getRecord)) continue; + // 用户当前持有的权重值 + $currentAgentHasWeightValue = (float)$parents[$agentKey]['weight_value']['quantity'] ?? 0; + // 获取当前用户应得的权重值 + $weightValue = (float)sprintf("%.2f",$this->getWeightValue($levelWvSet,$agentInfo)); + // 应得权重值大于0 记录改变信息并且修改持有权重值 + if((float)$weightValue > 0){ + $changeAfter = sprintf("%.2f",($currentAgentHasWeightValue + $weightValue)); + $changeRecord[] = [ + 'uniacid' => \YunShop::app()->uniacid, + 'member_id' => $agentInfo['uid'],// 用户id + 'team_dividend_agency_level_id' => $agentInfo['team_dividend_agency_level_id'],// 经销商等级id + 'change_type' => 1,// 变更类型:0=减少,1=增加 + 'change_quantity' => $weightValue,// 变更数量 + 'change_front' => (float)$currentAgentHasWeightValue,// 变更前拥有的数量 + 'change_after' => $changeAfter,// 变更后拥有的数量 + 'remark' => "经销商升级赠送",// 备注 + 'created_at' => time(),// 变更时间 + 'source' => 1 + ]; + $parents[$agentKey]['weight_value']['quantity'] = $changeAfter; + } + } + // 修改用户权重值变更信息 | 处理权重值变更记录 + if($changeRecord){ + $updateWeightValueList = array_column($parents,'weight_value'); + self::updateInfo($updateWeightValueList); + WeightValueLog::insert($changeRecord); + } + return; + } + /** + * Common: 经销商升级赠送权重值 - 获取对应等级的设置 + * Author: wu-hui + * Time: 2023/10/16 17:57 + * @param $levelId + * @return array + */ + private function getLevelWeightValue($levelId){ + $first = GoodsWeightValue::uniacid() + ->where('team_dividend_level_id',$levelId) + ->select(['is_open','gift_type','lv_type','quantity','ladder']) + ->first(); + + return $first ? $first->toArray() : []; + } + + /**