初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

383
app/model/member/Register.php Executable file
View File

@@ -0,0 +1,383 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\member;
use addon\coupon\model\CouponType;
use addon\wechat\model\Message as WechatMessage;
use app\model\BaseModel;
use app\model\message\Sms;
use addon\coupon\model\Coupon;
use app\model\system\Stat;
use think\facade\Queue;
/**
* 注册
* Class Register
* @package app\model\member
*/
class Register extends BaseModel
{
/**
* 用户名密码注册(必传username password),之前检测重复性,判断用户名是否为手机,邮箱
* @param $data
* @return array|mixed
*/
public function usernameRegister($data)
{
$examine_username_exit = $this->usernameExist($data['username'], $data['site_id']);
if ($examine_username_exit) return $this->error('', '用户名已存在');
$nickname = $data['username']; // 默认昵称为用户名
if (isset($data['nickname']) && !empty($data['nickname'])) {
$nickname = preg_replace_callback('/./u', function(array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
}, $data['nickname']);
}
$data['nickname'] = $nickname;
return $this->memberRegister($data);
}
/**
* 手机号密码注册(必传mobile password),之前检测重复性
* @param $data
* @return array|mixed
*/
public function mobileRegister($data)
{
$examine_mobile_exit = $this->mobileExist($data['mobile'], $data['site_id']);
if ($examine_mobile_exit) return $this->error('', '手机号已存在');
$data['username'] = $data['username'] ?? $this->createRandUsername($data['site_id']);
$nickname = substr($data['mobile'], 0, 3).'****'.substr($data['mobile'], 7);
if (isset($data['nickname']) && !empty($data['nickname'])) {
$nickname = preg_replace_callback('/./u', function(array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
}, $data['nickname']);
}
$data['nickname'] = $nickname;
return $this->memberRegister($data);
}
/**
* 第三方注册
* @param $data
* @return array
*/
public function authRegister($data)
{
$data['username'] = $this->createRandUsername($data['site_id']);
$nickname = $data['username'];
if (isset($data['nickName']) && !empty($data['nickName'])) {
$nickname = preg_replace_callback('/./u', function(array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
}, $data['nickName']);
}
$data['nickname'] = $nickname;
return $this->memberRegister($data);
}
/**
* 会员注册方法
* @param $data
* @return array
*/
private function memberRegister($data)
{
//会员注册相关奖励
$award_array = [
'point' => 0,
'balance' => 0,
'growth' => 0,
'coupon' => 0,
'coupon_list' => [],
'coupon_list_config'=>[]
];
$reg_award_array = event("MemberRegisterAward", ['site_id' => $data['site_id']]);
if (!empty($reg_award_array)) {
foreach ($reg_award_array as $k => $v) {
$award_array['point'] += $v['point'] ?? 0;
$award_array['balance'] += $v['balance'] ?? 0;
$award_array['growth'] += $v['growth'] ?? 0;
$coupon_list = $v['coupon_list'] ?? [];
if (!empty($coupon_list)) {
$award_array['coupon_list'] = empty($award_array['coupon_list']) ? $coupon_list : array_merge($award_array['coupon_list'], $v['coupon_list']);
$award_array['coupon_list_config'] = array_column($v['coupon_new'] ?? [],'num','id');
}
}
}
//查询会员等级相关(根据会员获取的成长值)
$member_level = new MemberLevel();
$member_level_info = $member_level->getFirstMemberLevel([['site_id', '=', $data['site_id']], ['level_type', '=', 0], ['growth', '<=', $award_array['growth']]], '*', 'growth desc')['data'];
//查询会员等级相关奖励
$data_reg = [
'site_id' => $data['site_id'],
'source_member' => $data['source_member'] ?? 0,
'username' => $data['username'],
'nickname' => $data['nickname'],
'mobile' => $data['mobile'] ?? '',
'password' => isset($data['password']) && !empty($data['password']) ? data_md5($data['password']) : '',
'qq_openid' => $data['qq_openid'] ?? '',
'wx_openid' => $data['wx_openid'] ?? '',
'weapp_openid' => $data['weapp_openid'] ?? '',
'wx_unionid' => $data['wx_unionid'] ?? '',
'ali_openid' => $data['ali_openid'] ?? '',
'baidu_openid' => $data['baidu_openid'] ?? '',
'toutiao_openid' => $data['toutiao_openid'] ?? '',
'headimg' => $data['avatarUrl'] ?? '',
'member_level' => !empty($member_level_info) ? $member_level_info['level_id'] : 0,
'member_level_name' => !empty($member_level_info) ? $member_level_info['level_name'] : '',
'is_member' => !empty($member_level_info) ? 1 : 0,
'member_time' => !empty($member_level_info) ? time() : 0,
'reg_time' => time(),
'login_time' => time(),
'last_login_time' => time(),
'is_edit_username' => 1,
'last_visit_time' => time(),
'login_type' => $data['app_type'] ?? '',
'login_type_name' => $data['app_type_name'] ?? '',
];
$member_id = model("member")->add($data_reg);
if ($member_id) {
if (!empty($member_level_info)) {
$award_array['point'] += $member_level_info['send_point'];
$award_array['balance'] += $member_level_info['send_balance'];
//获取优惠券信息
if (!empty($member_level_info['send_coupon'])) {
//优惠券字段
$coupon_field = '*';
$model = new CouponType();
$coupon = $model->getCouponTypeList([['coupon_type_id', 'in', $member_level_info['send_coupon']]], $coupon_field);
$member_level_info['coupon_list'] = $coupon['data'];
}
$coupon_list = $member_level_info['coupon_list'] ?? [];
if (!empty($coupon_list)) {
$award_array['coupon_list'] = empty($award_array['coupon_list']) ? $coupon_list : array_merge($award_array['coupon_list'], $v['coupon_list']);
}
}
//会员注册奖励积分,优惠券,红包
$data_reg['member_id'] = $member_id;
$member_account_model = new MemberAccount();
$member_account_model->addMemberAccountInRegister($data_reg, $award_array);
//给用户发放优惠券
if (!empty($award_array['coupon_list'])) {
$coupon_model = new Coupon();
$coupon_data = [];
foreach($award_array['coupon_list'] as $val){
$coupon_data[] = ['coupon_type_id' => $val['coupon_type_id'], 'num' => $award_array['coupon_list_config'][$val['coupon_type_id']] ?? 1];
}
$coupon_model->giveCoupon($coupon_data, $data['site_id'], $member_id, Coupon::GET_TYPE_ACTIVITY_GIVE);
}
//会员注册成功后续事件
Queue::push('app\job\MemberRegisterAfter', $data_reg);
}
return $this->success($member_id);
}
/**
* 会员注册成功后续事件
* @param $data_reg
*/
public function memberRegisterAfter($data_reg)
{
event("MemberRegister", ['member_id' => $data_reg['member_id'], 'site_id' => $data_reg['site_id']]);
//添加统计
$stat = new Stat();
$stat->switchStat(['type' => 'add_member', 'data' => ['member_count' => 1, 'site_id' => $data_reg['site_id']]]);
$this->pullHeadimg($data_reg);
}
/**
* 生成随机用户名
* @param $site_id
* @return string
*/
private function createRandUsername($site_id)
{
$usernamer = 'u_' . random_keys(10);
$count = model('member')->getCount([['username', '=', $usernamer], ['site_id', '=', $site_id]]);
if ($count) {
$usernamer = $this->createRandUsername($site_id);
return $usernamer;
} else {
return $usernamer;
}
}
/**
* 重置用户微信openid
* @param $data
* @return array
*/
public function wxopenidBind($data)
{
$res = model("member")->update(['wx_openid' => $data['wx_openid']], [['member_id', '=', $data['member_id']], ['site_id', '=', $data['site_id']], ['is_delete', '=', 0]]);
if ($res) {
return $this->success($res);
} else {
return $this->error();
}
}
/**
* 检测用户存在性(用户名)
* @param $username
* @param $site_id
* @return int
*/
public function usernameExist($username, $site_id)
{
$member_info = model("member")->getInfo([
['username|mobile', '=', $username],
['site_id', '=', $site_id],
['is_delete', '=', 0]
], 'member_id');
if (!empty($member_info)) {
return 1;
} else {
return 0;
}
}
/**
* 检测用户存在性(用户名) 存在返回1
* @param $mobile
* @param $site_id
* @return int
*/
public function mobileExist($mobile, $site_id)
{
$member_info = model("member")->getInfo([
['mobile', '=', $mobile],
['site_id', '=', $site_id],
['is_delete', '=', 0]], 'member_id');
if (!empty($member_info)) {
return 1;
} else {
return 0;
}
}
/**
* 检测用户存在性(wx_openid) 存在返回1 新增2021.06.18
* @param $mobile
* @param $site_id
* @return int
*/
public function openidExist($mobile, $site_id)
{
$member_info = model("member")->getInfo([
['mobile', '=', $mobile],
['site_id', '=', $site_id],
['is_delete', '=', 0]
], 'wx_openid');
if (!empty($member_info['wx_openid'])) {
return 1;
} else {
return 0;
}
}
/**
* 获取用户ID 新增2021.06.18
* @param $mobile
* @param $site_id
* @return int
*/
public function getMemberId($mobile, $site_id)
{
$member_info = model("member")->getInfo([
['mobile', '=', $mobile],
['site_id', '=', $site_id],
['is_delete', '=', 0]
], 'member_id');
if (!empty($member_info)) {
return $member_info['member_id'];
} else {
return 0;
}
}
/**
* 注册发送验证码
* @param $data
* @return array|mixed|void
*/
public function registerCode($data)
{
//发送短信
$sms_model = new Sms();
$var_parse = array (
"code" => $data["code"],//验证码
);
$data["sms_account"] = $data["mobile"] ?? '';//手机号
$data["var_parse"] = $var_parse;
$sms_result = $sms_model->sendMessage($data);
if ($sms_result["code"] < 0)
return $sms_result;
return $this->success();
}
/**
* 注册成功通知
* @param $data
* @return array|mixed|void
*/
public function registerSuccess($data)
{
$member_model = new Member();
$member_info_result = $member_model->getMemberInfo([["member_id", "=", $data["member_id"]]], "username,mobile,email,reg_time,wx_openid,last_login_type,nickname");
$member_info = $member_info_result["data"];
$name = $member_info["nickname"] == '' ? $member_info["mobile"] : $member_info["nickname"];
//发送短信
$var_parse = [
"shopname" => replaceSpecialChar($data['site_info']['site_name']), //商城名称
"username" => replaceSpecialChar($name), //会员名称
];
$data["sms_account"] = $member_info["mobile"] ?? '';//手机号
$data["var_parse"] = $var_parse;
$sms_model = new Sms();
$sms_result = $sms_model->sendMessage($data);
// if ($sms_result["code"] < 0) return $sms_result;
//发送模板消息
$wechat_model = new WechatMessage();
$data["openid"] = $member_info["wx_openid"];
$data["template_data"] = [
'keyword1' => $member_info["nickname"],
'keyword2' => time_to_date($member_info["reg_time"]),
];
$data["page"] = '';
$wechat_model->sendMessage($data);
return $this->success();
}
/**
* 拉取用户头像
* @param unknown $info
*/
private function pullHeadimg($data)
{
if (!empty($data['headimg']) && is_url($data['headimg'])) {
$url = __ROOT__ . '/api/member/pullheadimg?member_id=' . $data['member_id'];
http($url, 1);
}
}
}