From 510277f9ce03ebc6a7c66cac4d6e47f2f73ba0df Mon Sep 17 00:00:00 2001 From: evoxwht <442384644@qq.com> Date: Wed, 27 Apr 2022 11:31:02 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=A8=8B=E5=BA=8F=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E3=80=91=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7=E6=B3=A8=E9=94=80?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/adminapi/controller/v1/user/User.php | 8 +- .../controller/v1/user/UserCancel.php | 59 +++++++++++++++ crmeb/app/adminapi/route/user.php | 7 ++ .../api/controller/v1/user/UserController.php | 13 ++++ crmeb/app/api/route/v1.php | 7 +- crmeb/app/dao/user/UserCancelDao.php | 35 +++++++++ crmeb/app/model/user/User.php | 9 +++ crmeb/app/model/user/UserCancel.php | 75 +++++++++++++++++++ crmeb/app/services/user/LoginServices.php | 22 +++--- .../app/services/user/UserCancelServices.php | 73 ++++++++++++++++++ .../services/wechat/WechatUserServices.php | 10 +-- 11 files changed, 299 insertions(+), 19 deletions(-) create mode 100644 crmeb/app/adminapi/controller/v1/user/UserCancel.php create mode 100644 crmeb/app/dao/user/UserCancelDao.php create mode 100644 crmeb/app/model/user/UserCancel.php create mode 100644 crmeb/app/services/user/UserCancelServices.php diff --git a/crmeb/app/adminapi/controller/v1/user/User.php b/crmeb/app/adminapi/controller/v1/user/User.php index e97d18897..04e3231fc 100644 --- a/crmeb/app/adminapi/controller/v1/user/User.php +++ b/crmeb/app/adminapi/controller/v1/user/User.php @@ -126,10 +126,14 @@ class User extends AuthController if (!check_phone($data['phone'])) { return app('json')->fail('手机号码格式不正确'); } - if ($this->services->count(['phone' => $data['phone']])) { + if ($this->services->count(['phone' => $data['phone'], 'is_del' => 0])) { return app('json')->fail('手机号已经存在不能添加相同的手机号用户'); } - $data['nickname'] = substr_replace($data['phone'], '****', 3, 4); + if (trim($data['real_name']) != '') { + $data['nickname'] = $data['real_name']; + } else { + $data['nickname'] = substr_replace($data['phone'], '****', 3, 4); + } } if ($data['card_id']) { if (!check_card($data['card_id'])) return app('json')->fail('请输入正确的身份证'); diff --git a/crmeb/app/adminapi/controller/v1/user/UserCancel.php b/crmeb/app/adminapi/controller/v1/user/UserCancel.php new file mode 100644 index 000000000..c1c133bfc --- /dev/null +++ b/crmeb/app/adminapi/controller/v1/user/UserCancel.php @@ -0,0 +1,59 @@ +services = $services; + } + + /** + * 获取注销列表 + * @return mixed + */ + public function getCancelList() + { + $where = $this->request->postMore([ + ['status', 0], + ['keywords', ''], + ]); + $data = $this->services->getCancelList($where); + return app('json')->success($data); + } + + /** + * 备注 + * @return mixed + */ + public function setMark() + { + [$id, $mark] = $this->request->postMore([ + ['id', 0], + ['mark', ''], + ], true); + $this->services->serMark($id, $mark); + return app('json')->success('备注成功'); + } + + public function agreeCancel($id) + { + return app('json')->success('注销成功'); + } + + public function refuseCancel($id) + { + return app('json')->success('拒绝注销'); + } +} \ No newline at end of file diff --git a/crmeb/app/adminapi/route/user.php b/crmeb/app/adminapi/route/user.php index e4f84e01c..d513c19ed 100644 --- a/crmeb/app/adminapi/route/user.php +++ b/crmeb/app/adminapi/route/user.php @@ -135,6 +135,13 @@ Route::group('user', function () { Route::get('member/agreement', 'v1.user.member.MemberCardBatch/getAgreement')->option(['real_name' => '获取会员协议']); //用户标签(分类)树形列表 Route::get('user_tree_label', 'v1.user.UserLabel/tree_list')->option(['real_name' => '用户标签(分类)树形列表']); + + /** 用户注销 */ + Route::get('cancel_list', 'v1.user.UserCancel/getCancelList')->option(['real_name' => '用户注销列表']); + Route::post('cancel/set_mark', 'v1.user.UserCancel/setMark')->option(['real_name' => '注销列表备注']); + Route::get('cancel/agree/:id', 'v1.user.UserCancel/agreeCancel')->option(['real_name' => '同意注销']); + Route::get('cancel/refuse/:id', 'v1.user.UserCancel/refuseCancel')->option(['real_name' => '拒绝注销']); + })->middleware([ \app\http\middleware\AllowOriginMiddleware::class, \app\adminapi\middleware\AdminAuthTokenMiddleware::class, diff --git a/crmeb/app/api/controller/v1/user/UserController.php b/crmeb/app/api/controller/v1/user/UserController.php index 3f06b5e51..e876aa6c1 100644 --- a/crmeb/app/api/controller/v1/user/UserController.php +++ b/crmeb/app/api/controller/v1/user/UserController.php @@ -11,6 +11,7 @@ namespace app\api\controller\v1\user; use app\Request; +use app\services\user\UserCancelServices; use app\services\user\UserServices; use app\services\wechat\WechatUserServices; @@ -229,4 +230,16 @@ class UserController } } + /** + * 用户注销 + * @param Request $request + * @return mixed + */ + public function SetUserCancel(Request $request) + { + /** @var UserCancelServices $userCancelServices */ + $userCancelServices = app()->make(UserCancelServices::class); + $userCancelServices->SetUserCancel($request->uid()); + return app('json')->success('注销成功'); + } } diff --git a/crmeb/app/api/route/v1.php b/crmeb/app/api/route/v1.php index 8598feab9..6ef08c25c 100644 --- a/crmeb/app/api/route/v1.php +++ b/crmeb/app/api/route/v1.php @@ -16,7 +16,6 @@ use think\Response; Route::any('wechat/serve', 'v1.wechat.WechatController/serve');//公众号服务 Route::any('wechat/notify', 'v1.wechat.WechatController/notify');//公众号支付回调 Route::any('routine/notify', 'v1.wechat.AuthController/notify');//小程序支付回调 - Route::any('pay/notify/:type', 'v1.PayController/notify');//支付回调 Route::get('get_script', 'v1.PublicController/getScript');//获取统计代码 @@ -253,6 +252,11 @@ Route::group(function () { Route::post('agent/set_staff_percent', 'v1.user.DivisionController/setStaffPercent')->name('setStaffPercent');//设置员工分佣比例 Route::get('agent/del_staff/:uid', 'v1.user.DivisionController/delStaff')->name('delStaff');//删除员工 + /** 用户注销 */ + + Route::get('user_cancel', 'v1.user.UserController/SetUserCancel')->name('SetUserCancel');//用户注销 + + })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\api\middleware\StationOpenMiddleware::class)->middleware(\app\api\middleware\AuthTokenMiddleware::class, true); //未授权接口 Route::group(function () { @@ -360,6 +364,7 @@ Route::group(function () { Route::get('get_open_adv', 'v1.PublicController/getOpenAdv')->name('getOpenAdv'); //获取用户协议 Route::get('user_agreement', 'v1.PublicController/getUserAgreement')->name('getUserAgreement'); + Route::get('get_agreement/:type', 'v1.PublicController/getAgreement')->name('getAgreement'); })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\api\middleware\StationOpenMiddleware::class)->middleware(\app\api\middleware\AuthTokenMiddleware::class, false); Route::miss(function () { diff --git a/crmeb/app/dao/user/UserCancelDao.php b/crmeb/app/dao/user/UserCancelDao.php new file mode 100644 index 000000000..f9a94838b --- /dev/null +++ b/crmeb/app/dao/user/UserCancelDao.php @@ -0,0 +1,35 @@ +search($where)->with(['user']) + ->when($page && $limit, function ($query) use ($page, $limit) { + $query->page($page, $limit); + })->select()->toArray(); + } +} \ No newline at end of file diff --git a/crmeb/app/model/user/User.php b/crmeb/app/model/user/User.php index f31d4c16e..cc7a6acba 100644 --- a/crmeb/app/model/user/User.php +++ b/crmeb/app/model/user/User.php @@ -431,4 +431,13 @@ class User extends BaseModel if ($value !== '') $query->where('uid|nickname', 'like', '%' . $value . '%'); } + /** + * 注销搜索器 + * @param $query + * @param $value + */ + public function searchIsDelAttr($query, $value) + { + if ($value !== '') $query->where('is_del', $value); + } } diff --git a/crmeb/app/model/user/UserCancel.php b/crmeb/app/model/user/UserCancel.php new file mode 100644 index 000000000..3057a2599 --- /dev/null +++ b/crmeb/app/model/user/UserCancel.php @@ -0,0 +1,75 @@ + +// +---------------------------------------------------------------------- + +namespace app\model\user; + +use crmeb\basic\BaseModel; +use crmeb\traits\ModelTrait; + +/** + * Class UserCancel + * @package app\model\user + */ +class UserCancel extends BaseModel +{ + use ModelTrait; + + /** + * 数据表主键 + * @var string + */ + protected $pk = 'id'; + + /** + * 模型名称 + * @var string + */ + protected $name = 'user_cancel'; + + /** + * 关联用户表 + * @return \think\model\relation\HasOne + */ + public function user() + { + return $this->hasOne(User::class, 'uid', 'uid')->bind([ + 'money' => 'now_money', + 'brokerage' => 'brokerage_price' + ]); + } + + /** + * 状态搜索器 + * @param $query + * @param $value + */ + public function searchStatusAttr($query, $value) + { + if ($value !== '') { + $query->where('status', $value); + } + } + + /** + * 关键字搜索器 + * @param $query + * @param $value + */ + public function searchKeywordsAttr($query, $value) + { + if ($value !== '') { + $query->where('uid|name|phone', 'like', '%' . $value . '%'); + } + + } + + +} diff --git a/crmeb/app/services/user/LoginServices.php b/crmeb/app/services/user/LoginServices.php index dae1db3ee..62385971d 100644 --- a/crmeb/app/services/user/LoginServices.php +++ b/crmeb/app/services/user/LoginServices.php @@ -48,7 +48,7 @@ class LoginServices extends BaseServices */ public function login($account, $password, $spread) { - $user = $this->dao->getOne(['account|phone' => $account]); + $user = $this->dao->getOne(['account|phone' => $account, 'is_del' => 0]); if ($user) { if ($user->pwd !== md5((string)$password)) throw new ValidateException('账号或密码错误'); @@ -156,7 +156,7 @@ class LoginServices extends BaseServices public function verify(SmsSendServices $services, $phone, $type, $time, $ip) { - if ($this->dao->getOne(['account' => $phone]) && $type == 'register') { + if ($this->dao->getOne(['account' => $phone, 'is_del' => 0]) && $type == 'register') { throw new ValidateException('手机号已注册'); } $default = Config::get('sms.default', 'yunxin'); @@ -190,7 +190,7 @@ class LoginServices extends BaseServices */ public function register($account, $password, $spread, $user_type = 'h5') { - if ($this->dao->getOne(['account|phone' => $account])) { + if ($this->dao->getOne(['account|phone' => $account, 'is_del' => 0])) { throw new ValidateException('用户已存在,请去修改密码'); } $phone = $account; @@ -236,7 +236,7 @@ class LoginServices extends BaseServices */ public function reset($account, $password) { - $user = $this->dao->getOne(['account|phone' => $account]); + $user = $this->dao->getOne(['account|phone' => $account, 'is_del' => 0]); if (!$user) { throw new ValidateException('用户不存在'); } @@ -258,7 +258,7 @@ class LoginServices extends BaseServices public function mobile($phone, $spread, $user_type = 'h5') { //数据库查询 - $user = $this->dao->getOne(['phone' => $phone]); + $user = $this->dao->getOne(['phone' => $phone, 'is_del' => 0]); if (!$user) { $user = $this->register($phone, '123456', $spread, $user_type); if (!$user) { @@ -288,11 +288,11 @@ class LoginServices extends BaseServices public function switchAccount($user, $from) { if ($from === 'h5') { - $where = [['phone', '=', $user['phone']], ['user_type', '<>', 'h5']]; + $where = [['phone', '=', $user['phone']], ['user_type', '<>', 'h5'], ['is_del', '=', 0]]; $login_type = 'wechat'; } else { //数据库查询 - $where = [['account|phone', '=', $user['phone']], ['user_type', '=', 'h5']]; + $where = [['account|phone', '=', $user['phone']], ['user_type', '=', 'h5'], ['is_del', '=', 0]]; $login_type = 'h5'; } $switch_user = $this->dao->getOne($where); @@ -359,14 +359,14 @@ class LoginServices extends BaseServices if (!$userInfo) { throw new ValidateException('用户不存在'); } - if ($this->dao->getOne([['phone', '=', $phone], ['user_type', '<>', 'h5']])) { + if ($this->dao->getOne([['phone', '=', $phone], ['user_type', '<>', 'h5'], ['is_del', '=', 0]])) { throw new ValidateException('此手机已经绑定,无法多次绑定!'); } if ($userInfo->phone) { throw new ValidateException('您的账号已经绑定过手机号码!'); } $data = []; - if ($this->dao->getOne(['account' => $phone, 'phone' => $phone, 'user_type' => 'h5'])) { + if ($this->dao->getOne(['account' => $phone, 'phone' => $phone, 'user_type' => 'h5', 'is_del' => 0])) { if (!$step) return ['msg' => 'H5已有账号是否绑定此账号上', 'data' => ['is_bind' => 1]]; } else { $data['account'] = $phone; @@ -387,14 +387,14 @@ class LoginServices extends BaseServices */ public function updateBindindPhone(int $uid, $phone) { - $userInfo = $this->dao->get($uid); + $userInfo = $this->dao->get(['uid' => $uid, 'is_del' => 0]); if (!$userInfo) { throw new ValidateException('用户不存在'); } if ($userInfo->phone == $phone) { throw new ValidateException('新手机号和原手机号相同,无需修改'); } - if ($this->dao->getOne([['phone', '=', $phone]])) { + if ($this->dao->getOne([['phone', '=', $phone], ['is_del', '=', 0]])) { throw new ValidateException('此手机已经注册'); } $data = []; diff --git a/crmeb/app/services/user/UserCancelServices.php b/crmeb/app/services/user/UserCancelServices.php new file mode 100644 index 000000000..683e1de31 --- /dev/null +++ b/crmeb/app/services/user/UserCancelServices.php @@ -0,0 +1,73 @@ +dao = $dao; + } + + /** + * 提交用户注销 + * @param $userInfo + * @return mixed + */ + public function SetUserCancel($uid) + { +// $data = []; +// $data['uid'] = $userInfo['uid']; +// $data['name'] = $userInfo['nickname']; +// $data['phone'] = $userInfo['phone']; +// $data['add_time'] = time(); +// return $this->dao->save($data); + /** @var UserServices $userServices */ + $userServices = app()->make(UserServices::class); + /** @var WechatUserServices $wechatUserServices */ + $wechatUserServices = app()->make(WechatUserServices::class); + $userServices->update($uid, ['is_del' => 1]); + $wechatUserServices->update(['uid' => $uid], ['is_del' => 1]); + CacheService::clearTokenAll('api' . $uid); + } + + /** + * 获取注销列表 + * @param $where + * @return array + */ + public function getCancelList($where) + { + [$page, $limit] = $this->getPageValue(); + $list = $this->dao->getList($where, $page, $limit); + foreach ($list as &$item) { + $item['add_time'] = date('Y-m-d H:i:s', $item['add_time']); + $item['up_time'] = $item['up_time'] != 0 ? date('Y-m-d H:i:s', $item['add_time']) : ''; + $item['status'] = $this->status[$item['status']]; + } + $count = $this->dao->count($where); + return compact('list', 'count'); + } + + /** + * 备注 + * @param $id + * @param $mark + * @return mixed + */ + public function serMark($id, $mark) + { + return $this->dao->update($id, ['remark' => $mark]); + } +} \ No newline at end of file diff --git a/crmeb/app/services/wechat/WechatUserServices.php b/crmeb/app/services/wechat/WechatUserServices.php index ddd983e7a..e50d22200 100644 --- a/crmeb/app/services/wechat/WechatUserServices.php +++ b/crmeb/app/services/wechat/WechatUserServices.php @@ -203,7 +203,7 @@ class WechatUserServices extends BaseServices { $user = []; //兼容老用户 - $uids = $this->dao->getColumn(['unionid|openid' => $openid], 'uid,user_type', 'user_type'); + $uids = $this->dao->getColumn(['unionid|openid' => $openid, 'is_del' => 0], 'uid,user_type', 'user_type'); if ($uids) { $uid = $uids[$user_type]['uid'] ?? 0; if (!$uid) { @@ -303,13 +303,13 @@ class WechatUserServices extends BaseServices $userInfo = []; $uid = 0; if (isset($wechatInfo['phone']) && $wechatInfo['phone']) { - $userInfo = $userServices->getOne(['phone' => $wechatInfo['phone']]); + $userInfo = $userServices->getOne(['phone' => $wechatInfo['phone'], 'is_del' => 0]); } if (!$userInfo) { if (isset($wechatInfo['unionid']) && $wechatInfo['unionid']) { - $uid = $this->dao->value(['unionid' => $wechatInfo['unionid']], 'uid'); + $uid = $this->dao->value(['unionid' => $wechatInfo['unionid'], 'is_del' => 0], 'uid'); if ($uid) { - $userInfo = $userServices->getOne(['uid' => $uid]); + $userInfo = $userServices->getOne(['uid' => $uid, 'is_del' => 0]); } } else { $userInfo = $this->getAuthUserInfo($openid, $userType); @@ -323,7 +323,7 @@ class WechatUserServices extends BaseServices if ($userInfo) { //更新用户表和wechat_user表 //判断该类性用户在wechatUser中是否存在 - $wechatUser = $this->dao->getOne(['uid' => $uid, 'user_type' => $userType]); + $wechatUser = $this->dao->getOne(['uid' => $uid, 'user_type' => $userType, 'is_del' => 0]); /** @var LoginServices $loginService */ $loginService = app()->make(LoginServices::class); $this->transaction(function () use ($loginService, $wechatInfo, $userInfo, $uid, $userType, $spreadId, $wechatUser) {