静默绑定推广人方法修复

embedded/2024/11/19 23:11:23/

问题表现为:原方法缺少对自己和两个用户互为上下级的拦截

修复方案:

找到文件app/services/user/UserServices.php

将方法spread整个代码替换为

/*** 静默绑定推广人* @param Request $request* @return mixed
*/
public function spread(int $uid, int $spreadUid, $code){if ($uid == $spreadUid){return true;}$userInfo = $this->getUserInfo($uid);if (!$userInfo) {throw new ValidateException('数据不存在');}if ($code && !$spreadUid) {/** @var QrcodeServices $qrCode */$qrCode = app()->make(QrcodeServices::class);if ($info = $qrCode->getOne(['id' => $code, 'status' => 1])) {$spreadUid = $info['third_id'];}}//记录好友关系if ($spreadUid && $uid && $spreadUid != $uid) {/** @var UserFriendsServices $serviceFriend */$serviceFriend = app()->make(UserFriendsServices::class);$serviceFriend->saveFriend($uid, $spreadUid);}$data = [];//永久绑定$store_brokergae_binding_status = sys_config('store_brokerage_binding_status', 1);if ($userInfo->spread_uid && $store_brokergae_binding_status == 1) {return true;} else {//绑定分销关系 = 所有用户if (sys_config('brokerage_bindind', 1) == 1) {//分销绑定类型为时间段且过期 ||临时$store_brokerage_binding_time = sys_config('store_brokerage_binding_time', 30);if (!$userInfo['spread_uid'] || $store_brokergae_binding_status == 3 || ($store_brokergae_binding_status == 2 && ($userInfo['spread_time'] + $store_brokerage_binding_time * 24 * 3600) < time())) {if ($spreadUid && ($userInfo['uid'] == $spreadUid || $userInfo->uid == $this->dao->value(['uid' => $spreadUid], 'spread_uid'))) {$spreadUid = 0;}if ($spreadUid && $this->dao->get((int)$spreadUid)) {$data['spread_uid'] = $spreadUid;$data['spread_time'] = time();}}}}if ($data && !$this->dao->update($userInfo['uid'], $data, 'uid')) {throw new ValidateException('绑定失败');}if (isset($data['spread_uid']) && $data['spread_uid']) {/** @var UserBillServices $userBill */$userBill = app()->make(UserBillServices::class);//邀请新用户增加经验$userBill->inviteUserIncExp((int)$spreadUid);}return true;}

Copy


http://www.ppmy.cn/embedded/138895.html

相关文章

Node高级进阶四-http模块

1、Web服务器 什么是Web服务器&#xff1f; 当应用程序&#xff08;客户端&#xff09;需要某一个资源时&#xff0c;可以向一台服务器&#xff0c;通过Http请求获取到这个资源&#xff1b;提供资源的这个服务器&#xff0c;就是一个Web服务器&#xff1b; 目前有很多开源的We…

比特币前景再度不明,剧烈波动性恐即将回归

比特币市场降温&#xff0c;波动性增加 自特朗普赢得美国总统大选以来&#xff0c;比特币市场的投机狂热有所降温&#xff0c;现货和衍生品市场的活跃度开始减弱。比特币在上周五跌破87000美元&#xff0c;较之前创下的历史高点低了约6500美元。这一变化受到美联储主席鲍威尔讲…

SpringBoot总结

一、Spring\SpringBoot\SpringCloud Spring&#xff1a;Spring是SpringBoot和SpringCloud的基础。Spring是一个广泛使用的企业级 Java 应用程序框架&#xff0c;提供了应用开发的核心功能&#xff0c;如依赖注入、AOP&#xff08;面向切面编程&#xff09; 等&#xff0c;旨在简…

【ChatGPT】让ChatGPT生成特定时间段或主题的文章

让ChatGPT生成特定时间段或主题的文章 ChatGPT能够根据设定的时间段或主题生成文章&#xff0c;但这需要通过设计精准的Prompt来实现。通过结合上下文信息、明确的写作目标和格式要求&#xff0c;您可以高效地引导ChatGPT生成符合预期的内容。本文将详细介绍如何实现这一目标&…

创建游戏云存档功能的完整指南

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Object.defineProperty和响应式

Object.defineProperty()是一个监听对象属性变化的方法。一般情况下我们是不会直接使用的&#xff0c;或者说我们遇到的场景还没有这么高级。 最有名的例子就是Vue2的响应式实现&#xff0c;就是通过这个方法来实现的。 用起来不难&#xff0c;就是个API&#xff0c;只是用的…

鸿蒙动画开发07——粒子动画

1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子&#xff0c;这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画&#xff0c;来营造一种氛围感&#xff0c;比如下…

Python设计模式详解之3 —— 抽象工厂模式

抽象工厂模式也是一种创建型设计模式&#xff0c;它提供一个接口&#xff0c;用于创建一系列相关或相互依赖的对象&#xff0c;而无需指定它们的具体类。它特别适合在需要创建多个相关对象且这些对象在逻辑上属于一个“产品族”时使用。 结构&#xff1a; 抽象产品&#xff1…