修复已知问题

This commit is contained in:
evoxwht 2022-03-23 19:54:19 +08:00
parent 97eab6c25a
commit dee9543201
5 changed files with 51 additions and 35 deletions

View File

@ -47,6 +47,7 @@ class MessageServices extends BaseServices
if (strtolower($qrInfo['third_type']) == 'spread') {
try {
$spreadUid = $qrInfo['third_id'];
$is_new = $wechatUser->saveUser($message->FromUserName);
$uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']);
$userInfo = $userService->get($uid);
if ($spreadUid == $uid) {
@ -55,7 +56,7 @@ class MessageServices extends BaseServices
$response = '用户不存在';
} else if ($userInfo['spread_uid']) {
$response = '已有推荐人!';
} else if (!$loginService->updateUserInfo(['code' => $spreadUid], $userInfo)) {
} else if (!$loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new)) {
$response = '绑定推荐人失败!';
}
} catch (\Exception $e) {
@ -65,6 +66,7 @@ class MessageServices extends BaseServices
try {
$spreadUid = $qrInfo['third_id'];
$spreadInfo = $userService->get($spreadUid);
$is_new = $wechatUser->saveUser($message->FromUserName);
$uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']);
$userInfo = $userService->get($uid);
if ($spreadUid == $uid) {
@ -77,7 +79,7 @@ class MessageServices extends BaseServices
$response = '您是事业部,不能绑定成为别人的员工';
} else if ($userInfo->is_agent) {
$response = '您是代理商,不能绑定成为别人的员工';
} else if ($loginService->updateUserInfo(['code' => $spreadUid, 'is_staff' => 1], $userInfo)) {
} else if ($loginService->updateUserInfo(['code' => $spreadUid, 'is_staff' => 1], $userInfo, $is_new)) {
$response = '绑定店员成功!';
}
} catch (\Exception $e) {
@ -91,6 +93,7 @@ class MessageServices extends BaseServices
$qrcodeInfo = $wechatQrcodeService->qrcodeInfo($qrInfo['third_id']);
$spreadUid = $qrcodeInfo['uid'];
$spreadInfo = $userService->get($spreadUid);
$is_new = $wechatUser->saveUser($message->FromUserName);
$uid = $wechatUser->getFieldValue($message->FromUserName, 'openid', 'uid', ['user_type', '<>', 'h5']);
$userInfo = $userService->get($uid);
if ($qrcodeInfo['status'] == 0 || $qrcodeInfo['is_del'] == 1 || ($qrcodeInfo['end_time'] < time() && $qrcodeInfo['end_time'] > 0)) {
@ -101,7 +104,7 @@ class MessageServices extends BaseServices
$response = '用户不存在';
} else if (!$spreadInfo) {
$response = '上级用户不存在';
} else if ($loginService->updateUserInfo(['code' => $spreadUid], $userInfo)) {
} else if ($loginService->updateUserInfo(['code' => $spreadUid], $userInfo, $is_new)) {
//写入扫码记录,返回内容
$response = $wechatQrcodeService->wechatQrcodeRecord($qrcodeInfo, $userInfo, $spreadInfo);
}

View File

@ -1487,6 +1487,7 @@ HTML;
} else {
$addr = [];
}
if ($shipping_type == 2) $addr = [];
/** @var StoreCartServices $cartServices */
$cartServices = app()->make(StoreCartServices::class);
$cartGroup = $cartServices->getUserProductCartListV1($user['uid'], $cartId, $new, $addr, $shipping_type);

View File

@ -78,7 +78,7 @@ class LoginServices extends BaseServices
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function updateUserInfo($user, $userInfo)
public function updateUserInfo($user, $userInfo, $is_new = false)
{
$data = [];
$data['nickname'] = !isset($user['nickname']) || !$user['nickname'] ? $userInfo->nickname : $user['nickname'];
@ -86,9 +86,9 @@ class LoginServices extends BaseServices
$data['phone'] = !isset($user['phone']) || !$user['phone'] ? $userInfo->phone : $user['phone'];
$data['last_time'] = time();
$data['last_ip'] = app()->request->ip();
$spreadUid = isset($user['code']) ? $user['code'] : 0;
//如果扫了员工邀请码,上级,代理商,区域代理都会改动。
if (isset($user['is_staff']) && !$userInfo['is_agent'] && !$userInfo['is_division']) {
$spreadUid = isset($user['code']) ? $user['code'] : 0;
$spreadInfo = $this->dao->get($spreadUid);
if ($userInfo['uid'] != $spreadUid) {
$data['spread_uid'] = $spreadUid;
@ -106,37 +106,47 @@ class LoginServices extends BaseServices
$this->dao->update($userInfo['uid'], ['spread_uid' => $userInfo->agent_id], 'spread_uid');
}
}
//永久绑定
$store_brokergae_binding_status = sys_config('store_brokerage_binding_status', 1);
if ($userInfo->spread_uid && $store_brokergae_binding_status == 1 && !isset($user['is_staff'])) {
$data['login_type'] = $user['login_type'] ?? $userInfo->login_type;
} else {
$spreadUid = isset($user['code']) && $user['code'] && $user['code'] != $userInfo->uid ? $user['code'] : 0;
if ($spreadUid && $userInfo->uid == $this->dao->value(['uid' => $spreadUid], 'spread_uid')) {
$spreadUid = 0;
}
//绑定分销关系 = 所有用户
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) {
$spreadInfo = $this->dao->get($spreadUid);
$spreadUid = (int)$spreadUid;
$data['spread_uid'] = $spreadUid;
$data['spread_time'] = time();
$data['agent_id'] = $spreadInfo->agent_id;
$data['division_id'] = $spreadInfo->division_id;
$data['staff_id'] = $spreadInfo->staff_id;
}
}
}
if ($is_new) {
if ($spreadUid) {
$spreadInfo = $this->dao->get($spreadUid);
$spreadUid = (int)$spreadUid;
$data['spread_uid'] = $spreadUid;
$data['spread_time'] = time();
$data['agent_id'] = $spreadInfo->agent_id;
$data['division_id'] = $spreadInfo->division_id;
$data['staff_id'] = $spreadInfo->staff_id;
//绑定用户后置事件
event('user.register', [$spreadUid, $userInfo['user_type'], $userInfo['nickname'], $userInfo['uid'], 0]);
//推送消息
event('notice.notice', [['spreadUid' => $spreadUid, 'user_type' => $userInfo['user_type'], 'nickname' => $userInfo['nickname']], 'bind_spread_uid']);
}
} else {
//永久绑定
$store_brokerage_binding_status = sys_config('store_brokerage_binding_status', 1);
if ($userInfo->spread_uid && $store_brokerage_binding_status == 1 && !isset($user['is_staff'])) {
$data['login_type'] = $user['login_type'] ?? $userInfo->login_type;
} else {
//绑定分销关系 = 所有用户
if (sys_config('brokerage_bindind', 1) == 1) {
//分销绑定类型为时间段且过期 ||临时
$store_brokerage_binding_time = sys_config('store_brokerage_binding_time', 30);
if (!$userInfo['spread_uid'] || $store_brokerage_binding_status == 3 || ($store_brokerage_binding_status == 2 && ($userInfo['spread_time'] + $store_brokerage_binding_time * 24 * 3600) < time())) {
if ($spreadUid && $user['code'] != $userInfo->uid && $userInfo->uid != $this->dao->value(['uid' => $spreadUid], 'spread_uid')) {
$spreadInfo = $this->dao->get($spreadUid);
$spreadUid = (int)$spreadUid;
$data['spread_uid'] = $spreadUid;
$data['spread_time'] = time();
$data['agent_id'] = $spreadInfo->agent_id;
$data['division_id'] = $spreadInfo->division_id;
$data['staff_id'] = $spreadInfo->staff_id;
//绑定用户后置事件
event('user.register', [$spreadUid, $userInfo['user_type'], $userInfo['nickname'], $userInfo['uid'], 0]);
//推送消息
event('notice.notice', [['spreadUid' => $spreadUid, 'user_type' => $userInfo['user_type'], 'nickname' => $userInfo['nickname']], 'bind_spread_uid']);
}
}
}
}
}
if (!$this->dao->update($userInfo['uid'], $data, 'uid')) {
throw new ValidateException('修改信息失败');

View File

@ -58,10 +58,6 @@ class WechatMessageServices extends BaseServices
*/
public function wechatMessageBefore($message)
{
/** @var WechatUserServices $wechatUser */
$wechatUser = app()->make(WechatUserServices::class);
$wechatUser->saveUser($message->FromUserName);
$event = isset($message->Event) ?
$message->MsgType . (
$message->Event == 'subscribe' && isset($message->EventKey) ? '_scan' : ''

View File

@ -106,13 +106,19 @@ class WechatUserServices extends BaseServices
/**
* 用户存在就更新 不存在就添加
* @param $openid
* @return bool
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function saveUser($openid)
{
if ($this->getWechatUserInfo(['openid' => $openid])) {
$this->updateUser($openid);
return false;
} else {
$this->setNewUser($openid);
return true;
}
}
@ -156,7 +162,7 @@ class WechatUserServices extends BaseServices
} else {
mt_srand();
$userInfo['nickname'] = 'wx' . rand(100000, 999999);
$userInfo['avatar'] = sys_config('h5_avatar');
$userInfo['headimgurl'] = sys_config('h5_avatar');
}
if (isset($userInfo['tagid_list'])) {
$userInfo['tagid_list'] = implode(',', $userInfo['tagid_list']);