123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- <?php
- namespace app\admin\controller;
- use app\admin\model\Admin;
- use app\admin\model\AdminMoneyLog;
- use app\admin\model\OrderInfo;
- use app\admin\model\Refund;
- use app\admin\model\User;
- use app\common\controller\Backend;
- use app\admin\model\Orders;
- /**
- * 控制台
- *
- * @icon fa fa-dashboard
- * @remark 用于展示当前系统中的统计数据、统计报表及重要实时数据
- */
- class Overview extends Backend
- {
- /**
- * 查看
- */
- public function index()
- {
- try {
- \think\Db::execute("SET @@sql_mode='';");
- } catch (\Exception $e) {
- }
- list($defDate)=$this->rangeTime('asdasdasd');
- $this->assign('defDate',$defDate);
- if($this->request->isAjax()){
- $filter=json_decode(input('filter'),true);
- $map=[];
- if(!empty($filter['date'])){
- list($time1,$time2)=explode(' - ',$filter['date']);
- $map['create_time']=['between',[strtotime($time1),strtotime($time2)]];
- }
- list($where, $sort, $order, $offset, $limit) = $this->buildparams();
- $offset=input('offset',0);
- $limit=input('limit',20);
- $page=$offset/$limit+1;
- $list= Orders::payed()
- ->where($map)
- ->order($sort,$order)
- ->paginate($limit,false,['page'=>$page]);
- $this->addRank($list);
- return json([
- 'rows'=>$list->items(),
- 'total'=>$list->total(),
- ]);
- }
- list($postTime,$postTimeArr) = $this->rangeTime('startTime');
- $where = [];
- $map = [];
- if($postTime){
- $time = explode(' - ',$postTime);
- $startTime = strtotime($time[0]);
- $endTime = strtotime($time[1]);
- $where['create_time'] = array('between',[$startTime,$endTime]);
- $map['createtime'] = array('between',[$startTime,$endTime]);
- }
- //总销售额
- $sale = Orders::where($where)->where('status','in','5,10,20')->sum('amount_pay');
- //$refund = Db('OrderInfoRefund')->where($where)->where('refund_status',20)->sum('amount');
- $sale = bcsub($sale,0);
- //总销售数量
- $saleNum = Orders::where($where)->where('status','in','5,10,20')->count();
- //$refundNum = Db('OrderInfoRefund')->where($where)->where('refund_status',20)->count();
- $saleNum = bcsub($saleNum,0);
- //新增用户数
- $register = User::where($map)->count();
- //下单用户数
- $buy = Orders::where($where)->where('status','in','5,10,20')->group('user_id')->count();
- #投诉量
- $tsNum=Refund::filterDate($postTimeArr)->filterTs()->count();
- $this->assign('tsNum',$tsNum);
- //毛利、毛利率
- $install = Orders::where($where)->where('status','in','5,10,20')->sum('amount_install');//总安装费
- $orderIds = Orders::where($where)->where('status','in','5,10,20')->column('id');
- $cost = OrderInfo::where('order_id','in',$orderIds)->sum('amount_cost_total');//总成本
- $gross_profit = bcsub($sale,$install);
- $gross_profit = bcsub($gross_profit,$cost);
- $gross_profit_margin = 0;
- if($sale > 0)$gross_profit_margin = round($gross_profit/$sale,2)*100;//毛利率
- //支付方式
- $orderList = Orders::where($where)
- ->whereNotNull('pay_type')
- ->field('pay_type, COUNT(*) AS nums')
- ->group('pay_type')
- ->select();
- $payTotalCount = Db("Orders")->where($where)->where('status','in','5,10,20,30')->count();
- $payTypeList = [];
- $payTypeList1 = [];
- foreach ($orderList as $k => $v) {
- if($v['pay_type'] == 1){
- $v['pay_type'] = '企业网银';
- }elseif ($v['pay_type'] == 2){
- $v['pay_type'] = '微信';
- }elseif ($v['pay_type'] == 3){
- $v['pay_type'] = '支付宝';
- }elseif ($v['pay_type'] == 4){
- $v['pay_type'] = '银联';
- }elseif ($v['pay_type'] == 5){
- $v['pay_type'] = '代付';
- }elseif ($v['pay_type'] == 6){
- $v['pay_type'] = '线下支付';
- }
- $rate = 0;
- if($payTotalCount > 0)$rate = round($v['nums']/$payTotalCount,2)*100;
- $rate = $rate.'%';
- $payTypeList[$v['pay_type']] = $v['nums'];
- $payTypeList1[$v['pay_type']] = $rate;
- }
- $this->view->assign([
- 'sale' => $sale,
- 'sale_num' => $saleNum,
- 'register' => $register,
- 'buy' => $buy,
- 'gross_profit'=>$gross_profit,
- 'gross_profit_margin'=>$gross_profit_margin,
- 'post_time'=>$postTime
- ]);
- $this->assignconfig('type_column', array_keys($payTypeList));
- $this->assignconfig('type_data', array_values($payTypeList));
- $this->assignconfig('type_column1', array_keys($payTypeList1));
- $this->assignconfig('type_data1', array_values($payTypeList1));
- return $this->view->fetch();
- }
- public function seller_statistics(){
- list($date)=$this->rangeTime('aaaaa');
- $this->assign('date',$date);
- if($this->request->isAjax()){
- $type=input('type',1);
- $filter=json_decode(input('filter'),true);
- $map=[];
- if(!empty($filter['date'])){
- list($time1,$time2)=explode(' - ',$filter['date']);
- $map['create_time']=['between',[strtotime($time1),strtotime($time2)]];
- }
- $offset=input('offset',0);
- $limit=input('limit',20);
- $page=$offset/$limit+1;
- if($type==1){
- $list= Orders::payed()
- ->where($map)
- ->field('SUM(amount_pay) as amount,admin_id')
- ->group('admin_id')
- ->order('amount','desc')
- ->paginate($limit,false,['page'=>$page]);
- }else{
- $list=AdminMoneyLog::filterTypeCommission()
- ->where($map)
- ->field('SUM(amount) as amount,admin_id')
- ->group('admin_id')
- ->order('amount','desc')
- ->paginate($limit,false,['page'=>$page]);
- }
- $index=$list->listRows()*$list->currentPage()-$list->listRows();
- foreach ($list as $idx=>&$item){
- $item['rank']=$index+$idx+1;
- $item['nickname']=Admin::where('id',$item['admin_id'])->value('nickname');
- }
- return json([
- 'rows'=>$list->items(),
- 'total'=>$list->total(),
- ]);
- }
- return $this->fetch();
- }
- }
|