diff --git a/pro_v3.5.1/app/controller/admin/v1/system/log/Clear.php b/pro_v3.5.1/app/controller/admin/v1/system/log/Clear.php index c477ba08..346bbade 100644 --- a/pro_v3.5.1/app/controller/admin/v1/system/log/Clear.php +++ b/pro_v3.5.1/app/controller/admin/v1/system/log/Clear.php @@ -51,8 +51,7 @@ class Clear extends AuthController public function delete_log() { $this->services->deleteLog(); - return $this->success('数据缓存刷新成功!'); + return $this->success('系统日志清除成功!'); } } - diff --git a/pro_v3.5.1/app/listener/user/Register.php b/pro_v3.5.1/app/listener/user/Register.php index 6ceff974..ec8b670f 100644 --- a/pro_v3.5.1/app/listener/user/Register.php +++ b/pro_v3.5.1/app/listener/user/Register.php @@ -14,6 +14,7 @@ use app\jobs\user\UserJob; use app\jobs\user\UserMoneyJob; use app\jobs\user\UserSpreadJob; use app\services\community\CommunityUserServices; +use app\services\other\QrcodeServices; use app\services\user\UserBillServices; use app\services\user\UserServices; use crmeb\interfaces\ListenerInterface; @@ -51,6 +52,7 @@ class Register implements ListenerInterface UserSpreadJob::dispatch([$uid, $spreadUid]); } if ($is_new) { + $this->giveChannelCodeIntegral($uid, $userInfo); //修改用户会员卡激活状态 UserJob::dispatchDo('setUserLevel', [$uid]); if (app()->make(UserServices::class)->getUserOnlyTrashedCount($uid)) { @@ -75,4 +77,49 @@ class Register implements ListenerInterface event('notice.notice', [['spreadUid' => $spread_uid, 'user_type' => $userInfo['user_type'], 'nickname' => $userInfo['nickname']], 'bind_spread_uid']); } } + + /** + * 新用户扫指定分销员小程序码后赠送积分,一名新用户仅在注册事件中尝试一次。 + */ + protected function giveChannelCodeIntegral(int $uid, array $userInfo): void + { + if (!$uid || !(int)sys_config('channel_code_integral_status', 0)) { + return; + } + + $agentUid = (int)sys_config('channel_code_agent_uid', 0); + $integral = (int)sys_config('channel_code_give_integral', 0); + $qrcodeId = (int)($userInfo['spread_qrcode_id'] ?? 0); + if (!$agentUid || $integral <= 0 || !$qrcodeId) { + return; + } + + /** @var QrcodeServices $qrcodeServices */ + $qrcodeServices = app()->make(QrcodeServices::class); + $qrcodeInfo = $qrcodeServices->get($qrcodeId); + if (!$qrcodeInfo || (int)$qrcodeInfo['third_id'] !== $agentUid || ($qrcodeInfo['third_type'] ?? '') !== 'spread_routine') { + return; + } + + /** @var UserBillServices $userBillServices */ + $userBillServices = app()->make(UserBillServices::class); + if ($userBillServices->count(['uid' => $uid, 'type' => 'channel_code_add'])) { + return; + } + + /** @var UserServices $userServices */ + $userServices = app()->make(UserServices::class); + $balance = (int)$userServices->value(['uid' => $uid], 'integral'); + $newBalance = $balance + $integral; + $userServices->bcInc($uid, 'integral', (string)$integral, 'uid', 0); + $userBillServices->income( + 'channel_code_give_integral', + $uid, + $integral, + $newBalance, + $qrcodeId, + 0, + '扫码渠道码赠送' . $integral . '积分' + ); + } } diff --git a/pro_v3.5.1/app/services/system/config/SystemConfigServices.php b/pro_v3.5.1/app/services/system/config/SystemConfigServices.php index 61f6279d..e631bfa1 100644 --- a/pro_v3.5.1/app/services/system/config/SystemConfigServices.php +++ b/pro_v3.5.1/app/services/system/config/SystemConfigServices.php @@ -1629,7 +1629,8 @@ class SystemConfigServices extends BaseServices implements ServeConfigInterface $data = $this->getConfigAllField([ 'integral_ratio_status', 'integral_ratio', 'integral_max_type', 'integral_max_num', 'integral_max_rate', 'order_give_integral', 'integral_effective_status', - 'integral_effective_time', 'next_clear_month_time', 'next_clear_quarter_time', 'next_clear_year_time', 'integral_frozen' + 'integral_effective_time', 'next_clear_month_time', 'next_clear_quarter_time', 'next_clear_year_time', 'integral_frozen', + 'channel_code_integral_status', 'channel_code_agent_uid', 'channel_code_give_integral' ]); /** @var UserIntegralServices $userIntergralServices */ @@ -1650,6 +1651,10 @@ class SystemConfigServices extends BaseServices implements ServeConfigInterface ])->options($this->getOptions($data['integral_max_type']['parameter'])) ])->info($data['integral_ratio_status']['desc']), Build::inputNum('order_give_integral', $data['order_give_integral']['info'], $data['order_give_integral']['value'])->info($data['order_give_integral']['desc'])->min(0), + Build::switch('channel_code_integral_status', $data['channel_code_integral_status']['info'], (int)$data['channel_code_integral_status']['value']) + ->falseValue('关闭', 0)->trueValue('开启', 1)->info($data['channel_code_integral_status']['desc']), + Build::inputNum('channel_code_agent_uid', $data['channel_code_agent_uid']['info'], $data['channel_code_agent_uid']['value'])->info($data['channel_code_agent_uid']['desc'])->min(0), + Build::inputNum('channel_code_give_integral', $data['channel_code_give_integral']['info'], $data['channel_code_give_integral']['value'])->info($data['channel_code_give_integral']['desc'])->min(0), Build::radio('integral_effective_status', $data['integral_effective_status']['info'], $data['integral_effective_status']['value']) ->info($data['integral_effective_status']['desc'])->control(1, [ Build::radio('integral_effective_time', $data['integral_effective_time']['info'], $data['integral_effective_time']['value']) diff --git a/pro_v3.5.1/app/services/system/log/ClearServices.php b/pro_v3.5.1/app/services/system/log/ClearServices.php index 97af6eb7..3213fad8 100644 --- a/pro_v3.5.1/app/services/system/log/ClearServices.php +++ b/pro_v3.5.1/app/services/system/log/ClearServices.php @@ -20,7 +20,10 @@ class ClearServices extends BaseServices */ protected function delDirAndFile($dirName) { - $list = glob($dirName . '*'); + if (!is_dir($dirName)) { + return; + } + $list = glob($dirName . '*') ?: []; foreach ($list as $file) { if (is_dir($file)) $this->delDirAndFile($file . DS); diff --git a/pro_v3.5.1/app/services/user/UserBillServices.php b/pro_v3.5.1/app/services/user/UserBillServices.php index b0881d6b..b137fc81 100644 --- a/pro_v3.5.1/app/services/user/UserBillServices.php +++ b/pro_v3.5.1/app/services/user/UserBillServices.php @@ -135,6 +135,14 @@ class UserBillServices extends BaseServices 'status' => 1, 'pm' => 1 ], + 'channel_code_give_integral' => [ + 'title' => '渠道码赠送积分', + 'category' => 'integral', + 'type' => 'channel_code_add', + 'mark' => '扫码渠道码赠送{%num%}积分', + 'status' => 1, + 'pm' => 1 + ], 'level_give_integral' => [ 'title' => '会员卡激活赠送积分', 'category' => 'integral', diff --git a/pro_v3.5.1/app/services/user/UserServices.php b/pro_v3.5.1/app/services/user/UserServices.php index c8255ead..db0e2769 100644 --- a/pro_v3.5.1/app/services/user/UserServices.php +++ b/pro_v3.5.1/app/services/user/UserServices.php @@ -376,7 +376,9 @@ class UserServices extends BaseServices // 用户注册成功事件 $userInfo = array_merge($res->toArray(), [ - 'unionid' => $user['unionid'] ?? '' + 'unionid' => $user['unionid'] ?? '', + 'spread_qrcode_id' => (int)($user['spread_qrcode_id'] ?? 0), + 'spread_qrcode_type' => $user['spread_qrcode_type'] ?? '' ]); event('user.register', [$userInfo, true, $spreadUid]); diff --git a/pro_v3.5.1/app/services/wechat/RoutineServices.php b/pro_v3.5.1/app/services/wechat/RoutineServices.php index 25170ea5..6ecde5da 100644 --- a/pro_v3.5.1/app/services/wechat/RoutineServices.php +++ b/pro_v3.5.1/app/services/wechat/RoutineServices.php @@ -275,6 +275,8 @@ class RoutineServices extends BaseServices $info = $qrcode->get((int)$routine['spread_code']); if ($info) { $spread_uid = $info['third_id']; + $routineInfo['spread_qrcode_id'] = (int)$info['id']; + $routineInfo['spread_qrcode_type'] = $info['third_type'] ?? ''; } } return [$routine['openid'] ?? '', $routineInfo, $spread_uid, $routine['login_type'] ?? 'routine', 'routine']; diff --git a/pro_v3.5.1/view/admin/src/pages/agent/agentManage.vue b/pro_v3.5.1/view/admin/src/pages/agent/agentManage.vue index c10c07fa..0f77a05e 100644 --- a/pro_v3.5.1/view/admin/src/pages/agent/agentManage.vue +++ b/pro_v3.5.1/view/admin/src/pages/agent/agentManage.vue @@ -69,6 +69,9 @@ +