123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- <?php
- namespace app\admin\controller\shopro\user;
- use app\common\controller\Backend;
- use think\Db;
- use app\admin\model\shopro\user\Oauth;
- use Exception;
- use addons\shopro\exception\Exception as ShoproException;
- use think\exception\PDOException;
- use app\admin\model\shopro\user\WalletLog;
- /**
- * 会员管理
- *
- * @icon fa fa-user
- */
- class User extends Backend
- {
- protected $relationSearch = true;
- /**
- * @var \app\admin\model\user\User
- */
- protected $model = null;
- public function _initialize()
- {
- parent::_initialize();
- $this->model = new \app\admin\model\shopro\user\User;
- }
- /**
- * 查看
- */
- public function index()
- {
- //设置过滤方法
- $this->request->filter(['strip_tags']);
- if ($this->request->isAjax()) {
- //如果发送的来源是Selectpage,则转发到Selectpage
- if ($this->request->request('keyField')) {
- return $this->selectpage();
- }
- $searchWhere = $this->request->request('searchWhere');
- list($where, $sort, $order, $offset, $limit) = $this->buildparams();
- $total = $this->model
- ->with('group')
- ->where($where)
- ->whereOr('user.id', '=', $searchWhere)
- ->whereOr('nickname', 'like', "%$searchWhere%")
- ->whereOr('mobile', 'like', "%$searchWhere%")
- ->order($sort, $order)
- ->count();
- $list = $this->model
- ->with('group')
- ->where($where)
- ->whereOr('user.id', '=', $searchWhere)
- ->whereOr('nickname', 'like', "%$searchWhere%")
- ->whereOr('mobile', 'like', "%$searchWhere%")
- ->order($sort, $order)
- ->limit($offset, $limit)
- ->select();
- foreach ($list as $k => $v) {
- $v->hidden(['password', 'salt']);
- $v->third_platform = Oauth::all(['user_id' => $v->id]);
- }
- $result = array("total" => $total, "rows" => $list);
- $this->success('查看用户', null, $result);
- }
- return $this->view->fetch();
- }
- /**
- * 用户详情
- */
- public function profile($id)
- {
- $row = $this->model->get($id);
- if (!$row) {
- $this->error('未找到用户');
- }
- $row->hidden(['password', 'salt']);
- $row->third_platform = Oauth::all(['user_id' => $row->id]);
- if (checkEnv('commission', false)) {
- $row->parent_user = $this->model->get($row->parent_user_id);
- }
- if ($this->request->isAjax()) {
- $this->success('用户详情', null, $row);
- }
- $this->assignconfig('row', $row);
- $this->assignconfig('groupList', \app\admin\model\UserGroup::field('id,name,status')->select());
- return $this->view->fetch();
- }
- /**
- * 更新信息
- */
- public function update()
- {
- $params = $this->request->post('data');
- $params = json_decode($params, true);
- $user = $this->model->get($params['id']);
- if (!$user) {
- $this->error('未找到用户');
- }
- $result = Db::transaction(function () use ($user, $params) {
- try {
- if (!empty($params['password'])) {
- $salt = \fast\Random::alnum();
- $user->password = \app\common\library\Auth::instance()->getEncryptPassword($params['password'], $salt);
- $user->salt = $salt;
- $user->save();
- }
- $verification = $user->verification;
- if (!empty($params['mobile'])) {
- $verification->mobile = 1;
- } else {
- $verification->mobile = 0;
- }
- $user->verification = $verification;
- $user->save();
- return $user->validate('\app\admin\validate\shopro\user\User.update')->allowField('nickname,avatar,username,group_id,birthday,bio,mobile,email,level,gender,status')->save($params);
- } catch (\Exception $e) {
- $this->error($e->getMessage());
- }
- });
- if ($result) {
- return $this->success('更新成功', null, $user);
- } else {
- return $this->error($user->getError());
- }
- }
- /**
- * 选择
- */
- public function select()
- {
- //设置过滤方法
- $this->request->filter(['strip_tags']);
- if ($this->request->isAjax()) {
- //如果发送的来源是Selectpage,则转发到Selectpage
- if ($this->request->request('keyField')) {
- return $this->selectpage();
- }
- list($where, $sort, $order, $offset, $limit) = $this->buildparams();
- $searchWhere = $this->request->request('search');
- $total = $this->model
- ->where($where)
- ->whereOr('id', '=', $searchWhere)
- ->whereOr('nickname', 'like', "%$searchWhere%")
- ->whereOr('mobile', 'like', "%$searchWhere%")
- ->order($sort, $order)
- ->field('id, nickname, mobile, avatar')
- ->count();
- $list = $this->model
- ->where($where)
- ->whereOr('id', '=', $searchWhere)
- ->whereOr('nickname', 'like', "%$searchWhere%")
- ->whereOr('mobile', 'like', "%$searchWhere%")
- ->order($sort, $order)
- ->field('id, nickname, mobile, avatar')
- ->limit($offset, $limit)
- ->select();
- $result = array("total" => $total, "rows" => $list);
- $this->success('选择用户', null, $result);
- }
- return $this->view->fetch();
- }
- /**
- * 用户余额充值
- */
- public function money_recharge()
- {
- if ($this->request->isAjax()) {
- $params = $this->request->post();
- $user = $this->model->get($params['user_id']);
- $params['money'] = $params['money'];
- if ($params['money'] > 0) {
- $type = 'admin_recharge';
- } elseif ($params['money'] < 0) {
- $type = 'admin_deduct';
- } else {
- $this->error('请输入正确的金额');
- }
- $result = Db::transaction(function () use ($params, $user, $type) {
- return \addons\shopro\model\User::money($params['money'], $user->id, $type, 0, $params['remarks']);
- });
- if ($result) {
- $this->success('操作成功');
- } else {
- $this->error('操作失败');
- }
- }
- return $this->view->fetch();
- }
- /**
- * 用户积分充值
- */
- public function score_recharge()
- {
- if ($this->request->isAjax()) {
- $params = $this->request->post();
- $user = $this->model->get($params['user_id']);
- $params['score'] = intval($params['score']);
- if ($params['score'] > 0) {
- $type = 'admin_recharge';
- } elseif ($params['score'] < 0) {
- $type = 'admin_deduct';
- } else {
- $this->error('请输入正确的数量');
- }
- $result = Db::transaction(function () use ($params, $user, $type) {
- try {
- return \addons\shopro\model\User::score($params['score'], $user->id, $type, 0, $params['remarks']);
- } catch (\Exception $e) {
- $this->error($e->getMessage());
- }
- });
- if ($result) {
- $this->success('操作成功');
- } else {
- $this->error('操作失败');
- }
- }
- return $this->view->fetch();
- }
- /**
- * 余额明细
- */
- public function money_log($user_id, $limit = 10)
- {
- if ($this->request->isAjax()) {
- $model = new WalletLog();
- $data = $model->where(['user_id' => $user_id, 'wallet_type' => 'money'])->order('id desc')->paginate($limit);
- $this->success('余额明细', null, $data);
- }
- }
- /**
- * 积分明细
- */
- public function score_log($user_id, $limit = 10)
- {
- if ($this->request->isAjax()) {
- $model = new WalletLog();
- $data = $model->where(['user_id' => $user_id, 'wallet_type' => 'score'])->order('id desc')->paginate($limit);
- $this->success('积分明细', null, $data);
- }
- }
- /**
- * 订单记录
- */
- public function order_log($user_id, $limit = 10)
- {
- if ($this->request->isAjax()) {
- $this->loadlang('shopro/order/order');
- $model = new \app\admin\model\shopro\order\Order;
- $data = $model->where('user_id', $user_id)->order('id desc')->paginate($limit);
- $this->success('订单记录', null, $data);
- }
- }
- /**
- * 登录记录
- */
- public function login_log($user_id, $limit = 10)
- {
- if ($this->request->isAjax()) {
- }
- }
- /**
- * 分享记录
- */
- public function share_log($user_id, $limit = 10)
- {
- if ($this->request->isAjax()) {
- $this->loadlang('shopro/share');
- $model = new \app\admin\model\shopro\Share;
- $data = $model->where('share_id', $user_id)->order('id desc')->with([
- 'user' => function ($query) {
- return $query->withField('id,nickname,avatar');
- }
- ])->paginate($limit);
- foreach ($data as &$v) {
- if ($v['type'] === 'goods') {
- $v['goods'] = \app\admin\model\shopro\goods\Goods::where('id', $v['type_id'])->field('id, image, title')->find();
- }
- if ($v['type'] === 'groupon') {
- $v['groupon'] = \app\admin\model\shopro\activity\Groupon::get($v['type_id']);
- }
- }
- $this->success('分享记录', null, $data);
- }
- }
- /**
- * 收藏商品
- */
- public function goods_favorite($user_id, $limit = 10)
- {
- if ($this->request->isAjax()) {
- $model = new \app\admin\model\shopro\user\Favorite;
- $data = $model->where('user_id', $user_id)->order('id desc')->with([
- 'goods' => function ($query) {
- return $query->withField('id,title,image');
- }
- ])->paginate($limit);
- $this->success('商品收藏', null, $data);
- }
- }
- /**
- * 浏览足迹
- */
- public function goods_view($user_id, $limit = 10)
- {
- if ($this->request->isAjax()) {
- $model = new \app\admin\model\shopro\user\View;
- $data = $model->where('user_id', $user_id)->order('id desc')->with([
- 'goods' => function ($query) {
- return $query->withField('id,title,image');
- }
- ])->paginate($limit);
- $this->success('商品收藏', null, $data);
- }
- }
- /**
- * 优惠券
- */
- public function coupon_log($user_id, $limit = 10)
- {
- if ($this->request->isAjax()) {
- $model = new \app\admin\model\shopro\user\Coupon;
- $data = $model->where('user_id', $user_id)->order('id desc')->with(['coupons' => function ($query) {
- return $query->withField('id,name,amount');
- }])->paginate($limit);
- $this->success('优惠券', null, $data);
- }
- }
- /**
- * 删除
- */
- public function del($ids = "")
- {
- if (!$this->request->isPost()) {
- $this->error(__("Invalid parameters"));
- }
- $ids = $ids ? $ids : $this->request->post("ids");
- if ($ids) {
- $pk = $this->model->getPk();
- $list = $this->model->where($pk, 'in', $ids)->select();
- $count = 0;
- Db::startTrans();
- try {
- foreach ($list as $k => $v) {
- // 删除这个用户关联的 shopro_user_oauth 记录
- Oauth::where('user_id', $v->id)->delete();
- // 删除用户
- $count += $v->delete();
- }
- Db::commit();
- } catch (PDOException $e) {
- Db::rollback();
- $this->error($e->getMessage());
- } catch (Exception $e) {
- Db::rollback();
- $this->error($e->getMessage());
- }
- if ($count) {
- $this->success();
- } else {
- $this->error(__('No rows were deleted'));
- }
- }
- $this->error(__('Parameter %s can not be empty', 'ids'));
- }
- /**
- * 更换上级推荐人
- */
- public function changeParentUser($id)
- {
- $user = $this->model->get($id);
- $value = $this->request->post('value');
- if (!$user) {
- $this->error('未找到用户');
- }
- $agent = new \addons\shopro\library\commission\Agent($id);
- if ($agent->agent) {
- $this->error('请前往分销中心操作该用户');
- }
- try {
- if ($user->parent_user_id == $value) {
- throw \Exception('请勿重复选择');
- }
- if ($user->id == $value) {
- throw \Exception('不能绑定本人');
- }
- if ($value != 0) {
- $parentAgent = new \addons\shopro\library\commission\Agent($value);
- if (!$parentAgent || !$parentAgent->agent) {
- throw \Exception('未找到该分销商');
- }
- }
- if (!$this->checkChangeParentAgent($user->id, $value)) {
- throw \Exception('不能绑定该分销商');
- }
- $runUpgradeLastAgentId = $user->parent_user_id;
- $user->parent_user_id = $value;
- $user->save();
- if (!empty($runUpgradeLastAgentId)) {
- $agent->asyncAgentUpgrade($runUpgradeLastAgentId);
- }
- if (!empty($user->parent_user_id)) {
- $agent->asyncAgentUpgrade($user->parent_user_id);
- }
- } catch (\Exception $e) {
- $this->error($e->getMessage());
- }
- $this->success('绑定成功');
- }
- // 递归往上找推荐人,防止出现推荐闭环
- private function checkChangeParentAgent($userId, $parentAgentId)
- {
- if ($userId === $parentAgentId) {
- return false;
- }
- if ($parentAgentId == 0) {
- return true;
- }
- $parentAgent = \app\admin\model\shopro\commission\Agent::get($parentAgentId);
- if ($parentAgent) {
- if ($parentAgent->parent_agent_id === 0) {
- return true;
- } else {
- return $this->checkChangeParentAgent($userId, $parentAgent->parent_agent_id);
- }
- }
- return false;
- }
- }
|