zx/app/controller/admin/user/User.php

749 lines
24 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\controller\admin\user;
use app\common\repositories\store\ExcelRepository;
use app\common\repositories\user\UserBrokerageRepository;
use app\common\repositories\user\UserHistoryRepository;
use app\common\repositories\user\UserSignRepository;
use app\common\repositories\user\UserSpreadLogRepository;
use app\common\repositories\user\UserVisitRepository;
use crmeb\basic\BaseController;
use app\common\repositories\store\coupon\StoreCouponRepository;
use app\common\repositories\store\coupon\StoreCouponUserRepository;
use app\common\repositories\store\order\StoreOrderRepository;
use app\common\repositories\user\UserBillRepository;
use app\common\repositories\user\UserGroupRepository;
use app\common\repositories\user\UserLabelRepository;
use app\common\repositories\user\UserRepository;
use app\common\repositories\wechat\WechatNewsRepository;
use app\common\repositories\wechat\WechatUserRepository;
use app\validate\admin\UserNowMoneyValidate;
use app\validate\admin\UserValidate;
use crmeb\services\ExcelService;
use FormBuilder\Exception\FormBuilderException;
use think\App;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\facade\Db;
/**
* Class User
* @package app\controller\admin\user
* @author xaboy
* @day 2020-05-07
*/
class User extends BaseController
{
/**
* @var UserRepository
*/
protected $repository;
/**
* User constructor.
* @param App $app
* @param UserRepository $repository
*/
public function __construct(App $app, UserRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
/**
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020-05-07
*/
public function lst()
{
/*
* 昵称,分组,标签,地址,性别,
*/
$where = $this->request->params([
'label_id',
'user_type',
'sex',
'is_promoter',
'country',
'pay_count',
'user_time_type',
'user_time',
'nickname',
'province',
'city',
'group_id',
'phone',
'uid',
'is_svip',
'fields_type',
'fields_value',
'member_level',
'keyword',
'birthday'
]);
[$page, $limit] = $this->getPage();
return app('json')->success($this->repository->getList($where, $page, $limit));
}
public function spreadList($uid)
{
$where = $this->request->params(['level', 'keyword', 'date']);
[$page, $limit] = $this->getPage();
return app('json')->success($this->repository->getLevelList($uid, $where, $page, $limit));
}
public function spreadOrder($uid)
{
$where = $this->request->params(['level', 'keyword', 'date']);
[$page, $limit] = $this->getPage();
return app('json')->success($this->repository->subOrder($uid, $page, $limit, $where));
}
public function clearSpread($uid)
{
$this->repository->update($uid, ['spread_uid' => 0]);
return app('json')->success('清除成功');
}
public function createForm()
{
return app('json')->success(formToData($this->repository->createForm()));
}
/**
* 获取扩展字段数据
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
*/
public function getFields()
{
return app('json')->success($this->repository->getFields());
}
public function create(UserValidate $validate)
{
$data = $this->request->params([
'account',
'pwd',
'repwd',
'nickname',
'avatar',
'real_name',
'phone',
'sex',
'status',
'card_id',
['is_promoter', 0],
['extend_info', []],
]);
$validate->scene('create')->check($data);
$data['pwd'] = $this->repository->encodePassword($data['repwd']);
unset($data['repwd']);
if ($data['is_promoter']) $data['promoter_time'] = date('Y-m-d H:i:s');
if (empty($data['nickname'])) {
$data['nickname'] = substr_replace($data['account'], '****', 3, 4);;
}
$this->repository->create('h5', $data);
return app('json')->success('添加成功');
}
public function changePasswordForm($id)
{
return app('json')->success(formToData($this->repository->changePasswordForm($id)));
}
public function changePassword($id)
{
$data = $this->request->params([
'pwd',
'repwd',
]);
if (!$data['pwd'] || !$data['repwd'])
return app('json')->fail('密码不能为空');
if ($data['pwd'] !== $data['repwd'])
return app('json')->fail('密码不一致');
$data['pwd'] = $this->repository->encodePassword($data['repwd']);
unset($data['repwd']);
$this->repository->update($id, $data);
return app('json')->success('修改成功');
}
/**
* @param $id
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws FormBuilderException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020-05-09
*/
public function updateForm($id)
{
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
return app('json')->success(formToData($this->repository->userForm($id)));
}
/**
* @param $id
* @param UserValidate $validate
* @param UserLabelRepository $labelRepository
* @param UserGroupRepository $groupRepository
* @return mixed
* @throws DbException
* @author xaboy
* @day 2020-05-09
*/
public function update($id, UserValidate $validate, UserLabelRepository $labelRepository, UserGroupRepository $groupRepository)
{
$data = $this->request->params(['phone', 'card_id', 'mark', 'group_id', ['label_id', []], ['is_promoter', 0], ['status', 0], ['member_level', ''], ['extend_info', []]]);
$extend_info = $data['extend_info'];
unset($data['extend_info']);
$validate->check($data);
if (!$user = $this->repository->get($id))
return app('json')->fail('数据不存在');
if ($data['group_id'] && !$groupRepository->exists($data['group_id']))
return app('json')->fail('分组不存在');
$label_id = (array)$data['label_id'];
foreach ($label_id as $k => $value) {
$label_id[$k] = (int)$value;
if (!$labelRepository->exists((int)$value))
return app('json')->fail('标签不存在');
}
$data['label_id'] = implode(',', $label_id);
if ($data['is_promoter'])
$data['promoter_time'] = date('Y-m-d H:i:s');
// if (!$data['birthday']) unset($data['birthday']);
if ($data['member_level'] !== '') {
$make = app()->make(UserBrokerageRepository::class);
if ($data['member_level'] == $user->member_level) {
unset($data['member_level']);
} else {
$has = $make->fieldExists('brokerage_level', $data['member_level'], null, 1);
if (!$has) return app('json')->fail('等级不存在');
$data['member_value'] = 0;
// 记录用户等级变化时成长值变化
if ($user->member_value > 0) {
app()->make(UserBillRepository::class)->decBill($user->uid, 'sys_members', 'platform_clearing', [
'number' => $user->member_value,
'title' => '平台修改等级',
'balance' => $data['member_value'],
'status' => 0,
'mark' => '平台修改等级清除成长值' . ':' . $user->member_value,
]);
}
}
} else {
unset($data['member_level']);
}
// 更新扩展字段
$this->repository->saveFields((int)$id, $extend_info);
$this->repository->update($id, $data);
return app('json')->success('编辑成功');
}
/**
* @param $id
* @param UserLabelRepository $labelRepository
* @return mixed
* @throws DbException
* @author xaboy
* @day 2020-05-08
*/
public function changeLabel($id, UserLabelRepository $labelRepository)
{
$label_id = (array)$this->request->param('label_id', []);
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
foreach ($label_id as $k => $value) {
$label_id[$k] = (int)$value;
if (!$labelRepository->exists((int)$value))
return app('json')->fail('标签不存在');
}
$label_id = implode(',', $label_id);
$this->repository->update($id, compact('label_id'));
return app('json')->success('修改成功');
}
/**
* @param UserLabelRepository $labelRepository
* @return mixed
* @throws DbException
* @author xaboy
* @day 2020-05-08
*/
public function batchChangeLabel(UserLabelRepository $labelRepository)
{
$label_id = (array)$this->request->param('label_id', []);
$ids = (array)$this->request->param('ids', []);
if (!count($ids))
return app('json')->fail('数据不存在');
foreach ($label_id as $k => $value) {
$label_id[$k] = (int)$value;
if (!$labelRepository->exists((int)$value))
return app('json')->fail('标签不存在');
}
$this->repository->batchChangeLabelId($ids, $label_id);
return app('json')->success('修改成功');
}
/**
* @param $id
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws FormBuilderException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020-05-08
*/
public function changeLabelForm($id)
{
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
return app('json')->success(formToData($this->repository->changeLabelForm($id)));
}
/**
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws FormBuilderException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020-05-08
*/
public function batchChangeLabelForm()
{
$ids = $this->request->param('ids', '');
$ids = array_filter(explode(',', $ids));
if (!count($ids))
return app('json')->fail('数据不存在');
return app('json')->success(formToData($this->repository->changeLabelForm($ids)));
}
/**
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws FormBuilderException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020-05-08
*/
public function batchChangeGroupForm()
{
$ids = $this->request->param('ids', '');
$ids = array_filter(explode(',', $ids));
if (!count($ids))
return app('json')->fail('数据不存在');
return app('json')->success(formToData($this->repository->changeGroupForm($ids)));
}
/**
* @param $id
* @param UserGroupRepository $groupRepository
* @return mixed
* @throws DbException
* @author xaboy
* @day 2020-05-07
*/
public function changeGroup($id, UserGroupRepository $groupRepository)
{
$group_id = (int)$this->request->param('group_id', 0);
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
if ($group_id && !$groupRepository->exists($group_id))
return app('json')->fail('分组不存在');
$this->repository->update($id, compact('group_id'));
return app('json')->success('修改成功');
}
/**
* @param UserGroupRepository $groupRepository
* @return mixed
* @throws DbException
* @author xaboy
* @day 2020-05-07
*/
public function batchChangeGroup(UserGroupRepository $groupRepository)
{
$group_id = (int)$this->request->param('group_id', 0);
$ids = (array)$this->request->param('ids', []);
if (!count($ids))
return app('json')->fail('数据不存在');
if ($group_id && !$groupRepository->exists($group_id))
return app('json')->fail('分组不存在');
$this->repository->batchChangeGroupId($ids, $group_id);
return app('json')->success('修改成功');
}
/**
* @param $id
* @return mixed
* @throws FormBuilderException
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020-05-07
*/
public function changeGroupForm($id)
{
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
return app('json')->success(formToData($this->repository->changeGroupForm($id)));
}
/**
* @param $id
* @return mixed
* @throws FormBuilderException
* @author xaboy
* @day 2020-05-07
*/
public function changeNowMoneyForm($id)
{
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
return app('json')->success(formToData($this->repository->changeNowMoneyForm($id)));
}
public function changeIntegralForm($id)
{
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
return app('json')->success(formToData($this->repository->changeIntegralForm($id)));
}
/**
* @param $id
* @param UserNowMoneyValidate $validate
* @return mixed
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020-05-07
*/
public function changeNowMoney($id, UserNowMoneyValidate $validate)
{
$data = $this->request->params(['now_money', 'type']);
$validate->check($data);
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
$this->repository->changeNowMoney($id, $this->request->adminId(), $data['type'], $data['now_money']);
return app('json')->success('修改成功');
}
public function changeIntegral($id, UserNowMoneyValidate $validate)
{
$data = $this->request->params(['now_money', 'type']);
$validate->check($data);
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
$this->repository->changeIntegral($id, $this->request->adminId(), $data['type'], $data['now_money']);
return app('json')->success('修改成功');
}
/**
* @param WechatNewsRepository $wechatNewsRepository
* @param WechatUserRepository $wechatUserRepository
* @return mixed
* @author xaboy
* @day 2020-05-11
*/
public function sendNews(WechatNewsRepository $wechatNewsRepository, WechatUserRepository $wechatUserRepository)
{
$ids = $this->request->param('ids');
if (!is_array($ids)) $ids = explode(',', $this->request->param('ids'));
$ids = array_filter(array_unique($ids));
$news_id = (int)$this->request->param('news_id', 0);
if (!$news_id)
return app('json')->fail('请选择图文消息');
if (!$wechatNewsRepository->exists($news_id))
return app('json')->fail('数据不存在');
if (!count($ids))
return app('json')->fail('请选择微信用户');
$wechatUserRepository->sendNews($news_id, $ids);
return app('json')->success('发送成功');
}
public function promoterList()
{
$where = $this->request->params(['keyword', 'date', 'brokerage_level']);
[$page, $limit] = $this->getPage();
return app('json')->success($this->repository->promoterList($where, $page, $limit));
}
public function promoterCount()
{
$where = $this->request->params(['keyword', 'date', 'brokerage_level']);
return app('json')->success($this->repository->promoterCount($where));
}
public function detail($id)
{
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
return app('json')->success($this->repository->userOrderDetail($id));
}
public function order($id, StoreOrderRepository $repository)
{
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
[$page, $limit] = $this->getPage();
return app('json')->success($repository->userList($id, $page, $limit));
}
public function coupon($id, StoreCouponUserRepository $repository)
{
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
[$page, $limit] = $this->getPage();
return app('json')->success($repository->userList(['uid' => $id], $page, $limit));
}
public function bill($id, UserBillRepository $repository)
{
if (!$this->repository->exists(intval($id)))
return app('json')->fail('数据不存在');
[$page, $limit] = $this->getPage();
return app('json')->success($repository->userList([
'now_money' => 0,
'status' => 1
], $id, $page, $limit));
}
public function spreadLog($id)
{
if (!$this->repository->exists((int)$id))
return app('json')->fail('数据不存在');
[$page, $limit] = $this->getPage();
return app('json')->success(app()->make(UserSpreadLogRepository::class)->getList(['uid' => $id], $page, $limit));
}
public function spreadForm($id)
{
if (!$this->repository->exists((int)$id))
return app('json')->fail('数据不存在');
return app('json')->success(formToData($this->repository->changeSpreadForm($id)));
}
public function spread($id)
{
if (!$this->repository->exists((int)$id))
return app('json')->fail('数据不存在');
$spid = $this->request->param('spid');
$spid = (int)($spid['id'] ?? $spid);
if ($spid == $id)
return app('json')->fail('不能选自己');
if ($spid && !$this->repository->exists($spid))
return app('json')->fail('推荐人不存在');
$this->repository->changeSpread($id, $spid, $this->request->adminId());
return app('json')->success('修改成功');
}
public function searchLog()
{
$where = $this->request->params(['date', 'keyword', 'nickname', 'user_type']);
$merId = $this->request->merId();
$where['type'] = ['searchMerchant', 'searchProduct'];
if ($merId) {
$where['mer_id'] = $merId;
}
[$page, $limit] = $this->getPage();
return app('json')->success(app()->make(UserVisitRepository::class)->getSearchLog($where, $page, $limit));
}
public function exportSearchLog()
{
$where = $this->request->params(['date', 'keyword', 'nickname', 'user_type']);
$merId = $this->request->merId();
$where['type'] = ['searchMerchant', 'searchProduct'];
if ($merId) {
$where['mer_id'] = $merId;
}
[$page, $limit] = $this->getPage();
$data = app()->make(ExcelService::class)->searchLog($where, $page, $limit);
return app('json')->success($data);
}
public function memberForm($id)
{
return app('json')->success(formToData($this->repository->memberForm($id, 1)));
}
public function memberSave($id)
{
$data = $this->request->params(['member_level']);
if (!$this->repository->exists((int)$id))
return app('json')->fail('数据不存在');
$this->repository->updateLevel($id, $data, 1);
return app('json')->success('修改成功');
}
public function spreadLevelForm($id)
{
return app('json')->success(formToData($this->repository->memberForm($id, 0)));
}
public function spreadLevelSave($id)
{
$brokerage_level = $this->request->params(['brokerage_level']);
if (!$this->repository->exists((int)$id))
return app('json')->fail('数据不存在');
$this->repository->updateLevel($id, $brokerage_level, 0);
return app('json')->success('修改成功');
}
public function svipForm($id)
{
return app('json')->success(formToData($this->repository->svipForm($id)));
}
public function svipUpdate($id)
{
$data = $this->request->params(['is_svip', 'add_time', 'type']);
$this->repository->svipUpdate($id, $data, $this->request->adminId());
return app('json')->success('修改成功');
}
/**
* TODO 积分记录
* @param $id
* @author Qinii
* @day 2023/4/25
*/
public function integralList($id, UserBillRepository $repository)
{
[$page, $limit] = $this->getPage();
$data = $repository->userList(['category' => 'integral'], $id, $page, $limit);
return app('json')->success($data);
}
/**
* TODO 签到记录
* @param $id
* @param UserSignRepository $signRepository
* @return \think\response\Json
* @author Qinii
* @day 2023/4/25
*/
public function sign_log($id, UserSignRepository $signRepository)
{
[$page, $limit] = $this->getPage();
$where = ['uid' => $id];
$data = $signRepository->getList($where, $page, $limit);
return app('json')->success($data);
}
public function history($id, UserHistoryRepository $repository)
{
[$page, $limit] = $this->getPage();
return app('json')->success($repository->getList($page, $limit, $id, 1));
}
public function excel()
{
/*
* 昵称,分组,标签,地址,性别,
*/
$where = $this->request->params([
'label_id',
'user_type',
'sex',
'is_promoter',
'country',
'pay_count',
'user_time_type',
'user_time',
'nickname',
'province',
'city',
'group_id',
'phone',
'uid',
'is_svip',
'fields_type',
'fields_value'
]);
[$page, $limit] = $this->getPage();
$data = app()->make(ExcelService::class)->user($where, $page, $limit);
return app('json')->success($data);
}
public function getMemberLevelSelectList()
{
return app('json')->success($this->repository->getMemberLevelSelectList());
}
/**
* 批量设置分销员表单
* @return \think\response\Json
* @author Qinii
* @day 2023/10/26
*/
public function batchSpreadForm()
{
$ids = $this->request->param('ids', '');
$ids = array_filter(explode(',', $ids));
if (!count($ids))
return app('json')->fail('数据不存在');
$data = $this->repository->batchSpreadForm($ids);
return app('json')->success(formToData($data));
}
/**
* 批量设置分销员
* @return \think\response\Json
* @author Qinii
* @day 2023/10/26
*/
public function batchSpread()
{
$uids = $this->request->param('uids', []);
$status = $this->request->param('status') == 1 ? 1 : 0;
$this->repository->updates($uids, ['is_promoter' => $status]);
return app('json')->success('修改成功');
}
}