153 lines
5.1 KiB
PHP
153 lines
5.1 KiB
PHP
|
<?php
|
||
|
namespace app\admin\controller;
|
||
|
|
||
|
use app\model\Admins;
|
||
|
use app\model\Backs;
|
||
|
use app\model\Finances;
|
||
|
use app\model\Onlines;
|
||
|
use app\model\Orders;
|
||
|
use Qiniu\Auth;
|
||
|
use support\Redis;
|
||
|
use support\Request;
|
||
|
|
||
|
class IndexController extends base
|
||
|
{
|
||
|
|
||
|
public function isWork(Request $request) {
|
||
|
|
||
|
$lastTime = Redis::get('CRM:USER:ONLINE:'.$request->admin->id);
|
||
|
$end = Redis::hGet('CRM:USER:ONLINE:END', $request->admin->id);
|
||
|
if(!empty($lastTime) && time() - $lastTime <= 5 * 60) {
|
||
|
} elseif(empty($lastTime) && $end) {
|
||
|
$has = Onlines::where("admin_id", $request->admin->id)->order('id desc')->find();
|
||
|
if($has && empty($has->end)) {
|
||
|
Onlines::where("id", $has->id)->update(['end' => $end]);
|
||
|
}else{
|
||
|
$start = Redis::hGet('CRM:USER:ONLINE', $request->admin->id);
|
||
|
//创建一个新的
|
||
|
Onlines::create([
|
||
|
'admin_id' => $request->admin->id,
|
||
|
'start' => $start,
|
||
|
'end' => $end
|
||
|
]);
|
||
|
}
|
||
|
//创建一个新的
|
||
|
Onlines::create([
|
||
|
'admin_id' => $request->admin->id,
|
||
|
'start' => time(),
|
||
|
'end' => 0
|
||
|
]);
|
||
|
} else {
|
||
|
//第一次,给建个新的
|
||
|
Onlines::create([
|
||
|
'admin_id' => $request->admin->id,
|
||
|
'start' => time(),
|
||
|
'end' => 0
|
||
|
]);
|
||
|
}
|
||
|
|
||
|
Redis::Set('CRM:USER:ONLINE:'.$request->admin->id, time(), 'ex', 10 *60);
|
||
|
Redis::hSet('CRM:USER:ONLINE:END', $request->admin->id, time() + 60);
|
||
|
|
||
|
|
||
|
|
||
|
$new = Redis::get('CRM:USER:ONLINE:NEW:'.$request->admin->id);
|
||
|
Redis::del('CRM:USER:ONLINE:NEW:'.$request->admin->id);
|
||
|
$back = Redis::set('CRM:USER:ONLINE:FOLLOW:LOCK:'. $request->admin->id, time(), 'EX', 60, 'nx');
|
||
|
$follow = $backs = 0;
|
||
|
if($back) {
|
||
|
$follow = Orders::where('admin_id', $request->admin->id)->whereBetween('next_follow',[1,(time()-60)*1000])->count();
|
||
|
$backs = Backs::where('admin', $request->admin->id)->where('status', 0)->count();
|
||
|
}
|
||
|
|
||
|
return $this->success(['new'=> $new ??0, 'follow'=> $follow,'back' => $backs]);
|
||
|
}
|
||
|
|
||
|
public function line() {
|
||
|
$time = strtotime(date('Y-m-d'));
|
||
|
$data = [];
|
||
|
for($i=10; $i>0; $i--) {
|
||
|
$_time = $time - 3600*24*$i;
|
||
|
$d = Finances::whereBetween('create_time', [$_time, $_time + 24*3600-1])
|
||
|
->where('status',1)
|
||
|
->fieldRaw('SUM(IF(type=1,`total`,0))/100 as total, SUM(IF(type=2,`total`,0))/100 as refund')
|
||
|
->find();
|
||
|
$d->date = date("m-d", $_time);
|
||
|
$data[] = $d;
|
||
|
}
|
||
|
$_data = [];
|
||
|
foreach($data as $d) {
|
||
|
$_data['title'][] = trim($d->date);
|
||
|
$_data['total'][] = $d->total ??0;
|
||
|
$_data['refund'][] = abs($d->refund ??0);
|
||
|
}
|
||
|
return $this->success($_data);
|
||
|
}
|
||
|
|
||
|
public function orders(Request $request) {
|
||
|
|
||
|
$order = Orders::where('admin_id', $request->admin->id)->fieldRaw('SUM(IF(status=0,1,0)) as wait, SUM(IF(status=1,1,0)) as doing, SUM(total_price) as total,count(id) as `all`')->find();
|
||
|
|
||
|
return $this->success(['wait' => $order->wait ?? 0,'doing' => $order->doing ?? 0,'total' => $order->total ?? 0,'all' => $order->all ?? 0 ]);
|
||
|
}
|
||
|
|
||
|
public function pie() {
|
||
|
$time = strtotime(date('Y-m-d'));
|
||
|
$_time = $time - 3600*24*10;
|
||
|
$data = Orders::whereBetween('create_time', [$_time, time()])->fieldRaw('sum(total_price) as value, status')->group('status')->select();
|
||
|
$ddd = [];
|
||
|
foreach(Orders::StatusName as $k=>$d) {
|
||
|
$item['name'] = $d;
|
||
|
$item['value'] = 0;
|
||
|
foreach($data as $dd) {
|
||
|
if($dd->status == $k) {
|
||
|
$item['value'] = $dd->value/100;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
$ddd[] = $item;
|
||
|
}
|
||
|
|
||
|
return $this->success($ddd);
|
||
|
}
|
||
|
|
||
|
public function Info(Request $request) {
|
||
|
|
||
|
$info = Admins::where('id', $request->admin->id)->find();
|
||
|
|
||
|
return $this->success([
|
||
|
'roles'=> [$info->is_super ? 'admin': 'editor'],
|
||
|
'avatar'=> $info->avatar ?? '/avatar.webp',
|
||
|
'name'=> $info->name,
|
||
|
'is_anchor'=> $info->is_anchor ?1:0,
|
||
|
'oss'=> Orders::OSS
|
||
|
]);
|
||
|
|
||
|
}
|
||
|
|
||
|
public function qiniu() {
|
||
|
// 用于签名的公钥和私钥
|
||
|
$accessKey = config('qiniu.accessKey');
|
||
|
$secretKey = config('qiniu.secretKey');
|
||
|
|
||
|
// 初始化签权对象
|
||
|
$auth = new Auth($accessKey, $secretKey);
|
||
|
|
||
|
$bucket = 'tt-api';
|
||
|
$key = 'imgs/'.Date('Ym/d-His').'.jpg';
|
||
|
// 生成上传Token
|
||
|
$token = $auth->uploadToken($bucket);
|
||
|
|
||
|
return $this->success(['qiniu_key'=> $key, 'qiniu_token' => $token,'qiniu_url' => 'http://up-z2.qiniup.com']);
|
||
|
}
|
||
|
|
||
|
public function avatar(Request $request) {
|
||
|
$file = $request->file("file");
|
||
|
$filename = '/uploads/avatar/'.$request->admin->id.'.'.$file->getUploadExtension();
|
||
|
$file->move(public_path().$filename);
|
||
|
$item = Admins::where('id', $request->admin->id)->find();
|
||
|
$item->avatar = $filename;
|
||
|
$item->save();
|
||
|
return $this->success($filename);
|
||
|
}
|
||
|
}
|