Jelajahi Sumber

修复已知问题

evoxwht 3 tahun lalu
induk
melakukan
dee9543201

+ 6 - 3
crmeb/app/services/message/wechat/MessageServices.php

@@ -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);
                     }

+ 1 - 0
crmeb/app/services/order/StoreOrderServices.php

@@ -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);

+ 37 - 27
crmeb/app/services/user/LoginServices.php

@@ -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('修改信息失败');

+ 0 - 4
crmeb/app/services/wechat/WechatMessageServices.php

@@ -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' : ''

+ 7 - 1
crmeb/app/services/wechat/WechatUserServices.php

@@ -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']);