manghe/app/admin/controller/User.php
2025-04-12 06:27:11 +08:00

1409 lines
52 KiB
PHP
Executable File
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
namespace app\admin\controller;
use app\admin\controller\Base;
use app\common\model\Coupon;
use app\common\model\UserVip;
use \think\Request;
use think\facade\View;
use app\common\model\User as UserModel;
use app\common\model\ProfitMoney;
use app\common\model\ProfitMoney2;
use app\common\model\ProfitIntegral;
use app\common\model\Shang;
use app\common\model\GoodsList;
use app\common\model\Order;
use app\common\model\OrderList;
use app\common\model\UserAccount;
use app\common\model\UserLoginIp;
use app\common\model\Goods;
use think\facade\Db;
use think\helper\Str;
class User extends Base
{
/**
* 用户列表
*/
public function index()
{
return View::fetch('User/index');
}
/**
* 获取用户列表
*/
public function list()
{
$param = $this->request->param();
// 构建查询条件
$where = [];
if (!empty($param['user_id'])) {
$user_id = $this->convertUidToUserId($param['user_id']);
$where[] = ['id', '=', intval($user_id)];
}
if (!empty($param['mobile'])) {
$where[] = ['mobile', 'like', "%{$param['mobile']}%"];
}
if (!empty($param['nickname'])) {
$where[] = ['nickname', 'like', "%{$param['nickname']}%"];
}
if (!empty($param['last_login_ip'])) {
$where[] = ['last_login_ip', '=', $param['last_login_ip']];
}
if (!empty($param['addtime'])) {
$times = explode(' - ', $param['addtime']);
$where[] = ['addtime', 'between', [strtotime($times[0]), strtotime($times[1])]];
}
if (!empty($param['pid'])) {
$where[] = ['pid', '=', intval($param['pid'])];
}
$field = '*';
$order = 'id desc';
$data = UserModel::getList($where, $field, $order, $this->page);
foreach ($data['list'] as &$value) {
$pid_info = UserModel::field('id,nickname,headimg,uid')->where(['id' => $value['pid']])->find();
$value['pid_info'] = $pid_info;
#关联user_account
$user_account = UserAccount::where(['user_id' => $value['id']])->field('last_login_ip1,last_login_ip,ip_adcode,ip_province,ip_city')->find();
// SELECT sum(goodslist_money) FROM order_list where user_id=4490 and status=0
$user_hegui = OrderList::where('user_id', '=', $value['id'])->where('status', '=', 0)->sum('goodslist_money');
//SELECT SUM(order_zhe_total) FROM `order` where `status`=1 and user_id=6153
$user_all_total = Order::where('user_id', '=', $value['id'])->where('status', '=', 1)->sum('order_zhe_total');
//SELECT *FROM `order` where `status`=1 and user_id=6153 and price>1 #微信支付
$user_weixin_total = Order::where('user_id', '=', $value['id'])->where('status', '=', 1)->where('price', '>', 1)->sum('price');
// SELECT sum(use_money) FROM `order` where `status`=1 and user_id=6153 # 余额支付
$user_use_money = Order::where('user_id', '=', $value['id'])->where('status', '=', 1)->sum('use_money');
//SELECT sum(use_integral) FROM `order` where `status`=1 and user_id=6153 #吧唧币抵扣
$user_use_integral = Order::where('user_id', '=', $value['id'])->where('status', '=', 1)->sum('use_integral');
// SELECT sum(goodslist_money) FROM `order_list` where `status`=1 and user_id=6153 # 回收货币
$user_goodslist_money = OrderList::where('user_id', '=', $value['id'])->where('status', '=', 1)->sum('goodslist_money');
// SELECT sum(goodslist_money) FROM `order_list` where `status`=2 and user_id=6153 # 发货价值
$user_goodslist_money2 = OrderList::where('user_id', '=', $value['id'])->where('status', '=', 2)->sum('goodslist_money');
//SELECT sum(goodslist_money) FROM order_list where user_id=4490 # 总出货价值
$user_goodslist_money3 = OrderList::where('user_id', '=', $value['id'])->sum('goodslist_money');
$last_login_ip = 0;
if ($user_account) {
if ($user_account['last_login_ip']) {
if ($user_account['last_login_ip1']) {
$last_login_ip = $user_account['last_login_ip1'];
} else {
$last_login_ip = long2ip($user_account['last_login_ip']);
}
}
}
if (empty($value['mobile'])) {
$value['mobile'] = '未绑定';
}
$value['user_hegui'] = $user_hegui;
$value['user_all_total'] = $user_all_total;
$value['user_weixin_total'] = $user_weixin_total;
$value['user_use_money'] = $user_use_money;
$value['user_use_integral'] = $user_use_integral;
$value['user_goodslist_money'] = $user_goodslist_money;
$value['user_goodslist_money2'] = $user_goodslist_money2;
$value['user_goodslist_money3'] = $user_goodslist_money3;
$value['last_login_ip'] = $last_login_ip;
$value['ip_adcode'] = $user_account['ip_adcode'];
$value['ip_province'] = $user_account['ip_province'];
$value['ip_city'] = $user_account['ip_city'];
}
// 获取数据
$list = $data['list'];
$count = $data['count'];
return json([
'code' => 0,
'msg' => '',
'count' => $count,
'data' => $list
]);
}
/**
* 资金变动
*/
public function chongzhi()
{
$id = request()->param('id', '');
$type = request()->param('type', '');
$user_info = UserModel::find($id);
if (!$user_info) {
$this->renderError('请求参数错误');
}
if (\request()->IsGet()) {
if ($type == 1) {
$money = $user_info['money'];
} elseif ($type == 2) {
$money = $user_info['integral'];
} elseif ($type == 3) {
$money = $user_info['money2'];
} else {
$this->renderError('请求参数错误1');
}
View::assign('id', $id);
View::assign('type', $type);
View::assign('money', $money);
return View::fetch('User/chongzhi');
} else {
$money = request()->param('money', '');
$type_is = request()->param('type_is', '');
if ($type_is != 1 && $type_is != 2) {
$this->renderError('请求参数错误1');
}
if (empty($money)) {
return $this->renderError('请输入修改数量');
}
Db::startTrans();
if ($type == 1) {#余额
if (RegMoney($money)) {
return $this->renderError('修改数量不规范,最多保留两位小数');
}
if ($type_is == 2) {
if ($money > $user_info['money']) {
return $this->renderError('账号余额扣除数量不足');
}
$money = $money * -1;
}
$res[] = UserModel::changeMoney($id, $money, 1, '后台变动');
} elseif ($type == 2) {#货币2
if (RegInt($money)) {
return $this->renderError('修改数量不规范,请输入大于0的整数');
}
if ($type_is == 2) {
if ($money > $user_info['integral']) {
return $this->renderError('账号货币扣除数量不足');
}
$money = $money * -1;
}
$res[] = UserModel::changeIntegral($id, $money, 1, '后台变动');
} elseif ($type == 3) {#积分
if (RegInt($money)) {
return $this->renderError('修改数量不规范,请输入大于0的整数');
}
if ($type_is == 2) {
if ($money > $user_info['money2']) {
return $this->renderError('账号积分扣除数量不足');
}
$money = $money * -1;
}
$res[] = UserModel::changeMoney2($id, $money, 1, '后台变动');
} else {
$this->renderError('请求参数错误2');
}
if (resCheck($res)) {
Db::commit();
return $this->renderSuccess("操作成功");
} else {
Db::rollback();
return $this->renderError("操作失败");
}
}
}
/**
* 封号、解封处理
*/
public function userdel(Request $request)
{
$id = request()->post('id/d', 0);
$type = request()->post('type/d', 0);
if ($type != 1 && $type != 2) {
return $this->renderError('请求参数错误');
}
$user = UserModel::getInfo(['id' => $id]);
if (!$user) {
return $this->err('数据不存在');
}
$result = $user->save(["status" => $type]);
if ($result) {
return $this->renderSuccess('操作成功');
} else {
return $this->renderError('操作失败');
}
}
/**
* 封号、解封处理
*/
public function usertest(Request $request)
{
// \think\facade\Filesystem::disk('public')-/
$id = request()->post('id/d', 0);
$type = request()->post('type/d', 0);
if ($type != 1 && $type != 0 && $type != 2) {
return $this->renderError('请求参数错误');
}
$user = UserModel::getInfo(['id' => $id]);
if (!$user) {
return $this->err('数据不存在');
}
$result = $user->save(["istest" => $type]);
if ($result) {
return $this->renderSuccess('操作成功');
} else {
return $this->renderError('操作失败');
}
}
/**
* 清空手机号
*/
public function usermobileclear(Request $request)
{
$id = request()->post('id/d', 0);
$user = UserModel::getInfo(['id' => $id]);
if (!$user) {
return $this->err('数据不存在');
}
$result = $user->save(["mobile" => '']);
if ($result) {
return $this->renderSuccess('操作成功');
} else {
return $this->renderError('操作失败');
}
}
/**
* 清空UID
*/
public function userUidClear(Request $request)
{
$id = request()->post('id/d', 0);
$user = UserModel::getInfo(['id' => $id]);
if (!$user) {
return $this->err('数据不存在');
}
$result = $user->save(["uid" => '']);
if ($result) {
return $this->renderSuccess('操作成功');
} else {
return $this->renderError('操作失败');
}
}
/**
* 清空微信登录数据
*/
public function userwxclear(Request $request)
{
$id = request()->post('id/d', 0);
$user = UserModel::getInfo(['id' => $id]);
if (!$user) {
return $this->err('数据不存在');
}
$result = $user->save(["openid" => Str::random(32)]);
$useraccount = UserAccount::getInfo(['user_id' => $id]);
if ($useraccount != null) {
$useraccount->save(['account_token' => '']);
}
if ($result) {
return $this->renderSuccess('操作成功');
} else {
return $this->renderError('操作失败');
}
}
/*
ip转换
*/
public function ipzh(Request $request)
{
$id = request()->post('id/d', 0);
$user_account = UserAccount::where(['user_id' => $id])->field('last_login_ip1,ip_province,last_login_ip')->find();
if ($user_account) {
if (empty($user_account['ip_province'])) {
$last_login_ip = long2ip($user_account['last_login_ip']);
//$last_login_ip = $user_account['last_login_ip1'];
var_dump($last_login_ip);
$url = "https://restapi.amap.com/v3/ip?key=6a46ad822120e393956e89d498e8c40b&ip=" . "$last_login_ip" . "";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
var_dump($result);
exit;
if ($result['status'] == '1') {
$res = UserAccount::where(['user_id' => $id])->update([
'ip_adcode' => $result['adcode'],
'ip_province' => $result['province'],
'ip_city' => $result['city']
]);
} else {
$res = false;
}
}
} else {
$res = false;
}
if ($res) {
return $this->renderSuccess('操作成功');
} else {
return $this->renderError('操作失败');
}
}
/**
* 赠送卡牌查找
*/
public function give_goodslist_info()
{
$card_no = request()->param('card_no', '');
$goodslist = GoodsList::where('card_no', '=', $card_no)
->find();
if (!$goodslist) {
return $this->renderError('输入错误,未找到奖品信息');
}
#验证是否赠送是卡册盒子
$good_info = Goods::field('id,type')->where('id', '=', $goodslist['goods_id'])->find();
if ($good_info['type'] != 4) {
return $this->renderError('只可赠送卡册盒子');
}
$data = [
'title' => $goodslist['title'],
'imgurl' => imageUrl($goodslist['imgurl']),
];
return $this->renderSuccess('查找成功', $data);
}
/**
* 赠送卡牌
*/
public function give_goodslist()
{
$user_id = request()->param('id/d', 0);
$user_info = UserModel::find($user_id);
if (!$user_info) {
$this->renderError('请求参数错误');
}
if (request()->IsGet()) {
View::assign('id', $user_id);
return View::fetch('User/give_goodslist');
} else {
$card_no = request()->param('card_no', '');
$num = request()->param('num/d', 0);
$goodslist = GoodsList::where('card_no', '=', $card_no)
->find();
if (!$goodslist) {
return $this->renderError('输入错误,未找到奖品信息');
}
if (RegInt($num)) {
return $this->renderError('数量输入错误,请输入大于0的整数');
}
#验证是否赠送是卡册盒子
$good_info = Goods::field('id,type')->where('id', '=', $goodslist['goods_id'])->find();
if ($good_info['type'] != 4) {
return $this->renderError('只可赠送卡册盒子');
}
$save_prize = [
'order_id' => 0,
'user_id' => $user_id,
'status' => 0,#0未操作 1选择兑换 2选择发货
'goods_id' => $goodslist['goods_id'],
'num' => 0,
'shang_id' => $goodslist['shang_id'],
'goodslist_id' => $goodslist['id'],
'goodslist_title' => $goodslist['title'],
'goodslist_imgurl' => $goodslist['imgurl'],
'goodslist_price' => $goodslist['price'],
'goodslist_money' => $goodslist['money'],
'goodslist_type' => $goodslist['goods_type'],
'goodslist_sale_time' => $goodslist['sale_time'],
'addtime' => time(),
'prize_code' => $goodslist['prize_code'],
'order_type' => 9,
];
$all_save_prize = [];
for ($i = 0; $i < $num; $i++) {
$all_save_prize[] = $save_prize;
}
$res = OrderList::insertAll($all_save_prize);
if ($res) {
return $this->renderSuccess("操作成功");
} else {
return $this->renderError("操作失败");
}
}
}
/**
* 赠送
*/
public function give_add(Request $request)
{
if (!$request->isPost()) {
$w = [];
$w[] = ['status', '=', 0];
$coupon = Coupon::getAllList($w, 'id,title,price,man_price,ttype');
View::assign('coupon', $coupon);
$user_id = $request->param("user_id");
View::assign("user_id", $user_id);
return View::fetch("User/give_add");
} else {
$data = input('post.');
if (empty($data['give_id'])) {
return $this->renderError("请选择赠送的物品");
}
$coupon = Coupon::getInfo(['id' => $data['give_id']]);
if (!$coupon || $coupon['status'] != 0) {
return $this->renderError("优惠券不存在或者已下架");
}
//赠送优惠卷
$data2 = [];
for ($i = 0; $i < $data['num']; $i++) {
$data2[$i]['title'] = $coupon['title'];
$data2[$i]['price'] = $coupon['price'];
$data2[$i]['man_price'] = $coupon['man_price'];
$data2[$i]['end_time'] = $coupon['effective_day'] * 86400 + time();
$data2[$i]['addtime'] = time();
$data2[$i]['status'] = 0;
$data2[$i]['user_id'] = $data['user_id'];
$data2[$i]['coupon_id'] = $data['give_id'];
$data2[$i]['state'] = $coupon['ttype'];
}
$dd = Db::name('coupon_receive')->insertAll($data2);
if ($dd) {
return $this->renderSuccess("赠送成功");
} else {
return $this->renderError("赠送失败");
}
}
}
/**
* 用户盈亏
*/
public function user_profit_loss()
{
$whe = [];
$where = [];
$addtime = trim(input('get.addtime'));
$uid = trim(input('get.uid'));
if (!empty($uid)) {
$user_id = $this->convertUidToUserId($uid);
$whe[] = ['id', '=', $user_id];
}
if (!empty($addtime)) {
$addtime = explode(' - ', $addtime);
$start_time = strtotime($addtime[0]);
$end_time = strtotime($addtime[1]) - 1;
$where[] = ['addtime', 'BETWEEN', [$start_time, $end_time]];
}
// else {
// $start_time = strtotime(date('Y-m-d', time()));
// $end_time = $start_time + 86399;
// $where[] = ['addtime', 'BETWEEN', [$start_time, $end_time]];
// }
$data = UserModel::getList($whe, 'id,nickname,headimg,money,uid', 'id desc', 20);
$cz_money_total = 0;
$wx_money_total = 0;
$cz_yue_total = 0;
$cz_integral_total = 0;
$price_total = 0;
$shang_money_total = 0;
$fh_money_total = 0;
$tx_money_total = 0;
$profit_loss_total = 0;
$money = 0;
foreach ($data['list'] as $k => &$v) {
#公式 (充值余额 + 币 + 微信支付 - 余额 - 背包赏品
$cz_money = ProfitMoney::field('change_money')->where('user_id', '=', $v['id'])->where('type', '=', 1)->where('change_money', '>', 0)->where($where)->sum('change_money');
$wx_money = ProfitMoney::field('change_money')->where('user_id', '=', $v['id'])->where('type', '=', 2)->where('change_money', '>', 0)->where($where)->sum('change_money');
$cz_yue = $cz_money + $wx_money;
$cz_integral = ProfitIntegral::field('change_money')->where('user_id', '=', $v['id'])->where('type', '=', 1)->where('change_money', '>', 0)->where($where)->sum('change_money');
$price = Order::field('price')->where('user_id', '=', $v['id'])->where('status', '=', 1)->where('price', '>', 0)->where($where)->sum('price');
$shang_money = OrderList::field('goodslist_money')->where('user_id', '=', $v['id'])->whereIn('status', [0])->where('goodslist_money', '>', 0)->where($where)->sum('goodslist_money');
$fh_money = OrderList::field('goodslist_money')->where('user_id', '=', $v['id'])->where('status', '=', 2)->where('goodslist_money', '>', 0)->where($where)->sum('goodslist_money');
$tx_money = ProfitMoney2::field('change_money')->where('user_id', '=', $v['id'])->where('type', '=', 5)->where('change_money', '<', 0)->where($where)->sum('change_money');
$profit_loss = $cz_yue + $price - $v['money'] - $shang_money - $fh_money;
$profit_loss = $profit_loss + $tx_money;
$v['cz_money'] = $cz_yue;
$v['wx_money'] = $wx_money;
$v['cz_integral'] = $cz_integral;
$v['price'] = $price;
$v['shang_money'] = $shang_money;
$v['fh_money'] = $fh_money;
$v['tx_money'] = $tx_money;
$v['profit_loss'] = $profit_loss;
$cz_money_total += $cz_yue;
$wx_money_total += $wx_money;
$cz_yue_total += $cz_yue;
$cz_integral_total += $cz_integral;
$price_total += $price;
$shang_money_total += $shang_money;
$fh_money_total += $fh_money;
$tx_money_total += $tx_money;
$profit_loss_total += $profit_loss;
$money += $v['money'];
}
$total_money[1]['cz_money_total'] = $cz_money_total;
$total_money[1]['cz_integral_total'] = $cz_integral_total;
// $total_money[1]['wx_money_total'] = $wx_money_total;
$total_money[1]['price_total'] = $price_total;
$total_money[1]['total_money'] = $money;
// $total_money[1]['cz_yue_total'] = $cz_yue_total;
$total_money[1]['shang_money_total'] = $shang_money_total;
$total_money[1]['fh_money_total'] = $fh_money_total;
$total_money[1]['tx_money_total'] = $tx_money_total;
$total_money[1]['profit_loss_total'] = $profit_loss_total;
View::assign('list', $data['list']);
View::assign('count', $data['count']);
View::assign('page', $data['page']);
View::assign('total_money', $total_money);
return View::fetch("User/user_profit_loss");
}
/**
* vip管理
*/
public function vip()
{
$list = UserVip::order('id asc')->select();
View::assign('list', $list);
View::assign('count', count($list));
return View::fetch("User/vip");
}
/**
* vip编辑
*/
public function vip_edit(Request $request)
{
if (!$request->isPost()) {
$id = request()->param('id/d', 0);
$info = UserVip::where(['id' => $id])->find();
if (!$info) {
return $this->renderError('请求参数错误');
}
View::assign('info', $info);
return View::fetch('User/vip_edit');
} else {
$data = input('post.');
if (empty($data['id'])) {
return $this->renderError('请求参数错误');
}
$info = UserVip::where(['id' => $data['id']])->find();
if (!$info) {
return $this->renderError('请求参数错误1');
}
if (empty($data['title'])) {
return $this->renderError('请输入vip名称');
}
if (RegZero($data['condition'])) {
return $this->renderError('升级消费设置错误,请设置整数');
}
if (RegMoney($data['discount'])) {
return $this->renderError('vip折扣设置错误,最多保留两位小数');
}
// if (empty($data['imgurl'])) {
// return $this->renderError('请上传图标');
// }
$data['update_time'] = time();
unset($data['id']);
$dd = $info->allowField([])->save($data);
if ($dd) {
return $this->renderSuccess('编辑成功');
} else {
return $this->renderError('编辑失败');
}
}
}
/**
* 流水明细
*created by Admin at 2023/2/10 14:23
*/
public function detailed_flow()
{
$whe = [];
$where = [];
// $addtime = trim(input('get.addtime'));
$uid = trim(input('get.uid'));
if (!empty($uid)) {
// 将UID转换为用户ID
$uid = $this->convertUidToUserId($uid);
$whe[] = ['user_id', '=', $uid];
}
// if (!empty($addtime)) {
// $addtime = explode(' - ', $addtime);
// $start_time = strtotime($addtime[0]);
// $end_time = strtotime($addtime[1]) - 1;
// $where[] = ['addtime', 'BETWEEN', [$start_time, $end_time]];
// } else {
// $start_time = strtotime(date('Y-m-d', time()));
// $end_time = $start_time + 86399;
// $where[] = ['addtime', 'BETWEEN', [$start_time, $end_time]];
// }
// $data = ProfitMoney::getList($whe, 'id,user_id,change_money,addtime', '', 20);
$list = ProfitMoney::field('user_id,sum(change_money) as new_money')
// ->whereIn('type',[])
->group('user_id')
->order('new_money desc')
->paginate(20);
$page = $list->render();
$data['list'] = $list->toArray()['data'];
$data['count'] = $list->total();
$data['page'] = $page;
$num = 1;
foreach ($data['list'] as &$value) {
// dd($value['user_id']);
$user = \app\common\model\User::where('id', $value['user_id'])->find();
$value['nick_name'] = $user['nickname'];
$value['headimg'] = $user['headimg'];
$value['openid'] = $user['openid'];
$value['uid'] = $user['uid'] ?: $user['id'];
$value['num'] = $num;
// $value['addtime'] =$user['addtime'];
$num++;
}
// dd($data);
View::assign('list', $data['list']);
View::assign('count', $data['count']);
View::assign('page', $data['page']);
return View::fetch("User/detailed_flow");
}
/**
* 下级用户
*created by Admin at 2023/2/16 15:55
*/
public function user_team(Request $request)
{
$id = $request->param('id');
// 将UID转换为用户ID
$id = $this->convertUidToUserId($id);
// dd($id);
$list = \app\common\model\User::where('pid', $id)->paginate(20);
$page = $list->render();
$data['list'] = $list->toArray()['data'];
$data['count'] = $list->total();
$data['page'] = $page;
foreach ($data['list'] as &$value) {
$value['total'] = ProfitMoney::where('type', 5)
->where('user_id', $id)
->where('share_uid', $value['id'])
->sum('change_money');
// dd();
}
// dd($data['list']);
View::assign('list', $data['list']);
View::assign('count', $data['count']);
View::assign('page', $data['page']);
return View::fetch("User/user_team");
}
public function ip_list(Request $request)
{
$id = $request->param('id');
// 将UID转换为用户ID
$id = $this->convertUidToUserId($id);
// dd($id);
$list = UserLoginIp::where('user_id', $id)->order('id desc')->paginate(20);
$page = $list->render();
$data['list'] = $list->toArray()['data'];
$data['count'] = $list->total();
$data['page'] = $page;
// 获取用户UID
$user = UserModel::where('id', $id)->find();
$uid = $user ? $user['uid'] : '';
foreach ($data['list'] as &$item) {
$item['uid'] = $uid ?: $item['user_id'];
}
View::assign('list', $data['list']);
View::assign('count', $data['count']);
View::assign('page', $data['page']);
return View::fetch("User/ip_list");
}
public function user_invite(Request $request)
{
$whe = array();
$whe1 = array();
$user_id = trim(input('get.user_id'));
if (!empty($user_id)) {
// 将UID转换为用户ID
$user_id = $this->convertUidToUserId($user_id);
$whe[] = ['pid', '=', $user_id];
}
$profit_date = trim(input('get.profit_date'));
if (!empty($profit_date)) {
$profit_date = explode(' - ', $profit_date);
$start_time = strtotime($profit_date[0]);
$end_time = strtotime($profit_date[1]);
$whe1[] = ['addtime', 'BETWEEN', [intval($start_time), intval($end_time)]];
}
//select * from ( SELECT pid,count(1) n FROM xinglanmh_shequt_test.`user` where pid>0 group by pid ) t where n>1 order by n desc LIMIT 10
$list = UserModel::where($whe)->
where('pid', '>', 0)
->field('pid, COUNT(1) as n') // 选取 pid 和 计数字段
->group('pid')
// ->having('n', '>', 1) // `having` 需要使用 `as` 取别名
->order('n desc')
->limit(1000) // 添加限制条数
->select();
$count = UserModel::where($whe)->where('pid', '>', 0)
->field('pid, COUNT(1) as n') // 选取 pid 和 计数字段
->group('pid')
->count();
$data = array();
$index = 1;
foreach ($list as $item) {
$pid = $item['pid'];
$user_info = UserModel::field('nickname,headimg,mobile,uid')->where('id', '=', $pid)->find();
if ($user_info != null) {
$user_list = UserModel::field('id,nickname,addtime,mobile,uid')->where($whe1)->where('pid', '=', $pid)->order('addtime desc')->select();
$u_index = 1;
$u_price = 0;
$u_order = 0;
$u_mobile_count = 0;
foreach ($user_list as $user_item) {
$user_item['adddate'] = date('Y-m-d H:i:s', $user_item['addtime']);
$user_item['index'] = $u_index;
$user_item_order = Order::where('user_id', '=', $user_item['id'])->where('status', '=', $user_item['id'])->count();
$user_item_price = Order::where('user_id', '=', $user_item['id'])->where('status', '=', $user_item['id'])->sum('price');
$user_item['user_item_order'] = $user_item_order;
$user_item['user_item_price'] = $user_item_price;
$u_index++;
$u_price += $user_item_price;
if ($user_item_order && $user_item_order > 0) {
$u_order++;
}
if ($user_item['mobile'] && $user_item['mobile'] != "") {
$u_mobile_count++;
}
}
$data[] = [
'index' => $index,
'user_id' => $pid,
'uid' => $user_info['uid'] ?: $pid,
'invitenumber' => $item['n'],
'nickname' => $user_info['nickname'],
'headimg' => imageUrl($user_info['headimg']),
'info' => $user_list,
'sum_order' => $u_order,
'sum_price' => $u_price,
'count_mobile' => $u_mobile_count,
];
$index++;
}
}
View::assign('data', $data);
View::assign('count', $count);
return View::fetch("User/user_invite");
}
/**
* //用户列表页面表格操作一列增加查询用户盒柜传入用户的id,点击显示一个弹出层,弹出层中有一个表格,这个弹出层有有查询条件(奖品状态(下拉框),奖品名称(输入框),盒子名称输入框下面的sql语句是查询盒柜列表
* goodslist_title 奖品名称goodslist_money 回收价格goodslist_price 售价shang_id 奖品等级order_id 订单id,order_num 订单编号,goods_id 盒子id,good_title 盒子名称status奖品状态 0盒柜中 1回收 2选择发货
*SELECT goodslist_title,goodslist_money, goodslist_price,goodslist_imgurl,shang_id,addtime,order_id,(select order_num from `order` where id=order_list.order_id) order_num,goods_id,(select title from goods where id=order_list.goods_id ) good_title,`status` FROM order_list where user_id=6153 order by`status`
* 获取用户盒柜列表
*/
public function user_box_list()
{
$param = $this->request->param();
$user_id = isset($param['user_id']) ? intval($param['user_id']) : 0;
// 将UID转换为用户ID
$user_id = $this->convertUidToUserId($user_id);
if(empty($user_id)) {
return json(['code' => 1, 'msg' => '参数错误', 'count' => 0, 'data' => []]);
}
$where = [['user_id', '=', $user_id]];
// 添加筛选条件
if (!empty($param['status'])) {
$where[] = ['status', '=', $param['status']];
}
if (!empty($param['goodslist_title'])) {
$where[] = ['goodslist_title', 'like', "%{$param['goodslist_title']}%"];
}
if (!empty($param['good_title'])) {
// 通过goods表查询包含该名称的盒子ID
$goods_ids = Db::name('goods')->where('title', 'like', "%{$param['good_title']}%")->column('id');
if (!empty($goods_ids)) {
$where[] = ['goods_id', 'in', $goods_ids];
} else {
// 如果没有找到匹配的盒子,返回空结果
return json(['code' => 0, 'msg' => '未找到匹配的盒子', 'count' => 0, 'data' => []]);
}
}
// 添加获取时间查询条件
if (!empty($param['addtime'])) {
$times = explode(' - ', $param['addtime']);
$where[] = ['addtime', 'between', [strtotime($times[0]), strtotime($times[1])]];
}
// 构建查询 - 添加了shang_title字段和发货状态字段
$query = Db::name('order_list')
->where($where)
->field('goodslist_title, goodslist_money, goodslist_price, goodslist_imgurl, shang_id, addtime, order_id, goods_id, status, fh_status, fh_remarks');
// 获取总数
$count = $query->count();
// 分页查询
$page = isset($param['page']) ? intval($param['page']) : 1;
$limit = isset($param['limit']) ? intval($param['limit']) : 20;
$list = $query->page($page, $limit)
->order('status, addtime desc')
->select()
->toArray();
// 处理订单编号、盒子名称和奖品类型
foreach ($list as &$item) {
// 获取订单编号
$order = Db::name('order')->where('id', $item['order_id'])->value('order_num');
$item['order_num'] = $order ?: '无订单号';
// 获取盒子名称
$good = Db::name('goods')->where('id', $item['goods_id'])->value('title');
$item['good_title'] = $good ?: '未知盒子';
// 获取奖品类型名称
$shang = Db::name('shang')->where('id', $item['shang_id'])->value('title');
$item['shang_title'] = $shang ?: '未知类型';
// 处理发货状态,确保数据存在
if ($item['status'] == 2) {
$item['fh_status'] = isset($item['fh_status']) ? intval($item['fh_status']) : 0;
} else {
$item['fh_status'] = null;
$item['fh_remarks'] = null;
}
}
return json([
'code' => 0,
'msg' => '',
'count' => $count,
'data' => $list
]);
}
/**
* 用户盒柜页面
*/
public function user_box()
{
$user_id = request()->param('id', 0);
$nickname = request()->param('nickname', '');
// 将UID转换为用户ID
$user_id = $this->convertUidToUserId($user_id);
// 验证参数
if (empty($user_id)) {
$this->renderError('参数错误');
}
// 传递用户ID和昵称到模板
View::assign('user_id', $user_id);
View::assign('nickname', $nickname);
return View::fetch('User/user_box');
}
/**
* 用户订单页面
*/
public function user_order()
{
$id = input('id');
View::assign('id',$id);
View::assign('user_id',$id);
$nickname = input('nickname');
View::assign('nickname',$nickname);
return View::fetch('User/user_order');
}
/**
* 获取用户订单列表
*/
public function user_order_list()
{
$param = $this->request->param();
$user_id = isset($param['user_id']) ? intval($param['user_id']) : 0;
// 将UID转换为用户ID
$user_id = $this->convertUidToUserId($user_id);
if(empty($user_id)) {
return json(['code' => 1, 'msg' => '参数错误', 'count' => 0, 'data' => []]);
}
$where = [['user_id', '=', $user_id]];
// 添加筛选条件
if (isset($param['status']) && $param['status'] !== '') {
$where[] = ['status', '=', $param['status']];
}
if (!empty($param['goods_title'])) {
$where[] = ['goods_title', 'like', "%{$param['goods_title']}%"];
}
// 添加支付时间查询条件
if (!empty($param['pay_time'])) {
$times = explode(' - ', $param['pay_time']);
$where[] = ['pay_time', 'between', [strtotime($times[0]), strtotime($times[1])]];
}
// 构建查询
$query = Db::name('order')
->where($where)
->field('id, order_num, order_total, order_zhe_total, price, use_money, use_integral, use_score, goods_id, goods_title, num, goods_price, addtime, pay_time, status');
// 获取总数
$count = $query->count();
// 分页查询
$page = isset($param['page']) ? intval($param['page']) : 1;
$limit = isset($param['limit']) ? intval($param['limit']) : 20;
$list = $query->page($page, $limit)
->order('id desc')
->select()
->toArray();
return json([
'code' => 0,
'msg' => '',
'count' => $count,
'data' => $list
]);
}
/**
* 用户余额流水明细
*/
public function user_money_detail()
{
$user_id = input('user_id');
$nickname = input('nickname', '');
View::assign('user_id', $user_id);
View::assign('nickname', $nickname);
return View::fetch('User/user_money_detail');
}
/**
* 获取用户余额流水明细数据
*/
public function user_money_detail_data()
{
$param = input();
$user_id = isset($param['user_id']) ? intval($param['user_id']) : 0;
if (empty($user_id)) {
return json(['code' => 1, 'msg' => '参数错误', 'count' => 0, 'data' => []]);
}
$where = [
['user_id', '=', $user_id]
];
// 时间范围
if (!empty($param['start_time']) && !empty($param['end_time'])) {
$start_time = strtotime($param['start_time']);
$end_time = strtotime($param['end_time']);
$where[] = ['addtime', 'between', [$start_time, $end_time]];
}
// 类型筛选
if (isset($param['type']) && $param['type'] !== '') {
$where[] = ['type', '=', intval($param['type'])];
}
// 变化类型(收入/消耗)
if (isset($param['change_type']) && $param['change_type'] !== '') {
if ($param['change_type'] === 'add') {
$where[] = ['change_money', '>', 0];
} elseif ($param['change_type'] === 'sub') {
$where[] = ['change_money', '<', 0];
}
}
// 备注搜索
if (isset($param['content']) && $param['content'] !== '') {
$where[] = ['content|other', 'like', '%' . $param['content'] . '%'];
}
// 获取数据
$model = new \app\common\model\ProfitMoney();
// 获取总数
$count = $model->where($where)->count();
// 分页
$page = isset($param['page']) ? max(1, intval($param['page'])) : 1;
$limit = isset($param['limit']) ? max(1, intval($param['limit'])) : 50;
$list = $model->where($where)
->order('id desc')
->page($page, $limit)
->select()
->toArray();
return json([
'code' => 0,
'msg' => '',
'count' => $count,
'data' => $list
]);
}
/**
* 用户货币2流水明细
*/
public function user_integral_detail()
{
$user_id = input('user_id');
$nickname = input('nickname', '');
View::assign('user_id', $user_id);
View::assign('nickname', $nickname);
View::assign('currency_name', getConfig('app_setting')['currency1_name'] ?? '货币2');
return View::fetch('User/user_integral_detail');
}
/**
* 获取用户货币2流水明细数据
*/
public function user_integral_detail_data()
{
$param = input();
$user_id = isset($param['user_id']) ? intval($param['user_id']) : 0;
if (empty($user_id)) {
return json(['code' => 1, 'msg' => '参数错误', 'count' => 0, 'data' => []]);
}
$where = [
['user_id', '=', $user_id]
];
// 时间范围
if (!empty($param['start_time']) && !empty($param['end_time'])) {
$start_time = strtotime($param['start_time']);
$end_time = strtotime($param['end_time']);
$where[] = ['addtime', 'between', [$start_time, $end_time]];
}
// 类型筛选
if (isset($param['type']) && $param['type'] !== '') {
$where[] = ['type', '=', intval($param['type'])];
}
// 变化类型(收入/消耗)
if (isset($param['change_type']) && $param['change_type'] !== '') {
if ($param['change_type'] === 'add') {
$where[] = ['change_money', '>', 0];
} elseif ($param['change_type'] === 'sub') {
$where[] = ['change_money', '<', 0];
}
}
// 备注搜索
if (isset($param['content']) && $param['content'] !== '') {
// 使用content字段进行搜索
$where[] = ['content', 'like', '%' . $param['content'] . '%'];
}
try {
// 使用DB类进行查询避免使用模型方法
$list = Db::name('profit_integral')
->where($where)
->order('id desc')
->page(isset($param['page']) ? max(1, intval($param['page'])) : 1, isset($param['limit']) ? max(1, intval($param['limit'])) : 50)
->select()
->toArray();
$count = Db::name('profit_integral')
->where($where)
->count();
return json([
'code' => 0,
'msg' => '',
'count' => $count,
'data' => $list
]);
} catch (\Exception $e) {
return json(['code' => 1, 'msg' => '数据查询出错: ' . $e->getMessage(), 'count' => 0, 'data' => []]);
}
}
/**
* 用户货币3流水明细
*/
public function user_score_detail()
{
$user_id = input('user_id');
$nickname = input('nickname', '');
View::assign('user_id', $user_id);
View::assign('nickname', $nickname);
View::assign('currency_name', getConfig('app_setting')['currency2_name'] ?? '货币3');
return View::fetch('User/user_score_detail');
}
/**
* 获取用户货币3流水明细数据
*/
public function user_score_detail_data()
{
$param = input();
$user_id = isset($param['user_id']) ? intval($param['user_id']) : 0;
if (empty($user_id)) {
return json(['code' => 1, 'msg' => '参数错误', 'count' => 0, 'data' => []]);
}
$where = [
['user_id', '=', $user_id]
];
// 时间范围
if (!empty($param['start_time']) && !empty($param['end_time'])) {
$start_time = strtotime($param['start_time']);
$end_time = strtotime($param['end_time']);
$where[] = ['addtime', 'between', [$start_time, $end_time]];
}
// 类型筛选
if (isset($param['type']) && $param['type'] !== '') {
$where[] = ['type', '=', intval($param['type'])];
}
// 变化类型(收入/消耗)
if (isset($param['change_type']) && $param['change_type'] !== '') {
if ($param['change_type'] === 'add') {
$where[] = ['change_money', '>', 0];
} elseif ($param['change_type'] === 'sub') {
$where[] = ['change_money', '<', 0];
}
}
// 备注搜索
if (isset($param['content']) && $param['content'] !== '') {
// 使用content字段进行搜索
$where[] = ['content', 'like', '%' . $param['content'] . '%'];
}
try {
// 使用DB类进行查询避免使用模型方法
$list = Db::name('profit_money2')
->where($where)
->order('id desc')
->page(isset($param['page']) ? max(1, intval($param['page'])) : 1, isset($param['limit']) ? max(1, intval($param['limit'])) : 50)
->select()
->toArray();
$count = Db::name('profit_money2')
->where($where)
->count();
return json([
'code' => 0,
'msg' => '',
'count' => $count,
'data' => $list
]);
} catch (\Exception $e) {
return json(['code' => 1, 'msg' => '数据查询出错: ' . $e->getMessage(), 'count' => 0, 'data' => []]);
}
}
/**
* 用户登录统计
*/
public function loginStat()
{
if (request()->isAjax()) {
try {
$type = input('type', 'day');
$year = input('year', date('Y'));
$month = input('month', date('m'));
$start_date = input('start_date', date('Y-m-d', strtotime('-30 days')));
$end_date = input('end_date', date('Y-m-d'));
switch ($type) {
case 'day':
// 日登录统计
$data = \app\common\model\UserLoginLog::getDailyLoginCount($start_date, $end_date);
$chart_data = [];
$labels = [];
$values = [];
foreach ($data as $item) {
$labels[] = $item['login_date'];
$values[] = $item['count'];
}
$chart_data = [
'labels' => $labels,
'values' => $values,
];
// 计算活跃用户数
$active_user_count = \app\common\model\UserLoginLog::getActiveUserCount($start_date, $end_date);
return json(['code' => 0, 'msg' => 'ok', 'data' => [
'chart' => $chart_data,
'active_users' => $active_user_count,
'total_logins' => array_sum($values),
]]);
break;
case 'week':
// 周登录统计
$data = \app\common\model\UserLoginLog::getWeeklyLoginCount($year);
$chart_data = [];
$labels = [];
$values = [];
foreach ($data as $item) {
$labels[] = $item['year'] . '年第' . $item['week'] . '周';
$values[] = $item['count'];
}
$chart_data = [
'labels' => $labels,
'values' => $values,
];
return json(['code' => 0, 'msg' => 'ok', 'data' => [
'chart' => $chart_data,
'total_logins' => array_sum($values),
]]);
break;
case 'month':
// 月登录统计
$data = \app\common\model\UserLoginLog::getMonthlyLoginCount($year);
$chart_data = [];
$labels = [];
$values = [];
foreach ($data as $item) {
$labels[] = $item['year'] . '年' . $item['month'] . '月';
$values[] = $item['count'];
}
$chart_data = [
'labels' => $labels,
'values' => $values,
];
return json(['code' => 0, 'msg' => 'ok', 'data' => [
'chart' => $chart_data,
'total_logins' => array_sum($values),
]]);
break;
default:
return json(['code' => 1, 'msg' => '统计类型错误']);
}
} catch (\Exception $e) {
return json(['code' => 1, 'msg' => $e->getMessage()]);
}
}
return view('User/login_stat', [
'year' => date('Y'),
'month' => date('m'),
'start_date' => date('Y-m-d', strtotime('-30 days')),
'end_date' => date('Y-m-d'),
]);
}
/**
* 重置用户签到数据
*/
public function resetUserSign(Request $request)
{
$id = $request->param('id');
$user = UserModel::find($id);
if (!$user) {
return json(['status' => 0, 'msg' => '用户不存在']);
}
// 计算上一天的日期
$yesterday = date('Y-m-d', strtotime('-1 day'));
try {
// 更新用户的签到数据
$result = \app\common\model\UserSign::where('user_id', $id)
->where('sign_date', date('Y-m-d'))
->update([
'sign_date' => $yesterday,
'update_time' => time()
]);
if ($result) {
return json(['status' => 1, 'msg' => '签到数据重置成功']);
} else {
// 如果没有今日签到记录
return json(['status' => 1, 'msg' => '用户今日未签到或已重置']);
}
} catch (\Exception $e) {
return json(['status' => 0, 'msg' => '重置失败:' . $e->getMessage()]);
}
}
}