Overview.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. namespace app\admin\controller;
  3. use app\admin\model\Admin;
  4. use app\admin\model\AdminMoneyLog;
  5. use app\admin\model\OrderInfo;
  6. use app\admin\model\Refund;
  7. use app\admin\model\User;
  8. use app\common\controller\Backend;
  9. use app\admin\model\Orders;
  10. /**
  11. * 控制台
  12. *
  13. * @icon fa fa-dashboard
  14. * @remark 用于展示当前系统中的统计数据、统计报表及重要实时数据
  15. */
  16. class Overview extends Backend
  17. {
  18. /**
  19. * 查看
  20. */
  21. public function index()
  22. {
  23. try {
  24. \think\Db::execute("SET @@sql_mode='';");
  25. } catch (\Exception $e) {
  26. }
  27. list($defDate)=$this->rangeTime('asdasdasd');
  28. $this->assign('defDate',$defDate);
  29. if($this->request->isAjax()){
  30. $filter=json_decode(input('filter'),true);
  31. $map=[];
  32. if(!empty($filter['date'])){
  33. list($time1,$time2)=explode(' - ',$filter['date']);
  34. $map['create_time']=['between',[strtotime($time1),strtotime($time2)]];
  35. }
  36. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  37. $offset=input('offset',0);
  38. $limit=input('limit',20);
  39. $page=$offset/$limit+1;
  40. $list= Orders::payed()
  41. ->where($map)
  42. ->order($sort,$order)
  43. ->paginate($limit,false,['page'=>$page]);
  44. $this->addRank($list);
  45. return json([
  46. 'rows'=>$list->items(),
  47. 'total'=>$list->total(),
  48. ]);
  49. }
  50. list($postTime,$postTimeArr) = $this->rangeTime('startTime');
  51. $where = [];
  52. $map = [];
  53. if($postTime){
  54. $time = explode(' - ',$postTime);
  55. $startTime = strtotime($time[0]);
  56. $endTime = strtotime($time[1]);
  57. $where['create_time'] = array('between',[$startTime,$endTime]);
  58. $map['createtime'] = array('between',[$startTime,$endTime]);
  59. }
  60. //总销售额
  61. $sale = Orders::where($where)->where('status','in','5,10,20')->sum('amount_pay');
  62. //$refund = Db('OrderInfoRefund')->where($where)->where('refund_status',20)->sum('amount');
  63. $sale = bcsub($sale,0);
  64. //总销售数量
  65. $saleNum = Orders::where($where)->where('status','in','5,10,20')->count();
  66. //$refundNum = Db('OrderInfoRefund')->where($where)->where('refund_status',20)->count();
  67. $saleNum = bcsub($saleNum,0);
  68. //新增用户数
  69. $register = User::where($map)->count();
  70. //下单用户数
  71. $buy = Orders::where($where)->where('status','in','5,10,20')->group('user_id')->count();
  72. #投诉量
  73. $tsNum=Refund::filterDate($postTimeArr)->filterTs()->count();
  74. $this->assign('tsNum',$tsNum);
  75. //毛利、毛利率
  76. $install = Orders::where($where)->where('status','in','5,10,20')->sum('amount_install');//总安装费
  77. $orderIds = Orders::where($where)->where('status','in','5,10,20')->column('id');
  78. $cost = OrderInfo::where('order_id','in',$orderIds)->sum('amount_cost_total');//总成本
  79. $gross_profit = bcsub($sale,$install);
  80. $gross_profit = bcsub($gross_profit,$cost);
  81. $gross_profit_margin = 0;
  82. if($sale > 0)$gross_profit_margin = round($gross_profit/$sale,2)*100;//毛利率
  83. //支付方式
  84. $orderList = Orders::where($where)
  85. ->whereNotNull('pay_type')
  86. ->field('pay_type, COUNT(*) AS nums')
  87. ->group('pay_type')
  88. ->select();
  89. $payTotalCount = Db("Orders")->where($where)->where('status','in','5,10,20,30')->count();
  90. $payTypeList = [];
  91. $payTypeList1 = [];
  92. foreach ($orderList as $k => $v) {
  93. if($v['pay_type'] == 1){
  94. $v['pay_type'] = '企业网银';
  95. }elseif ($v['pay_type'] == 2){
  96. $v['pay_type'] = '微信';
  97. }elseif ($v['pay_type'] == 3){
  98. $v['pay_type'] = '支付宝';
  99. }elseif ($v['pay_type'] == 4){
  100. $v['pay_type'] = '银联';
  101. }elseif ($v['pay_type'] == 5){
  102. $v['pay_type'] = '代付';
  103. }elseif ($v['pay_type'] == 6){
  104. $v['pay_type'] = '线下支付';
  105. }
  106. $rate = 0;
  107. if($payTotalCount > 0)$rate = round($v['nums']/$payTotalCount,2)*100;
  108. $rate = $rate.'%';
  109. $payTypeList[$v['pay_type']] = $v['nums'];
  110. $payTypeList1[$v['pay_type']] = $rate;
  111. }
  112. $this->view->assign([
  113. 'sale' => $sale,
  114. 'sale_num' => $saleNum,
  115. 'register' => $register,
  116. 'buy' => $buy,
  117. 'gross_profit'=>$gross_profit,
  118. 'gross_profit_margin'=>$gross_profit_margin,
  119. 'post_time'=>$postTime
  120. ]);
  121. $this->assignconfig('type_column', array_keys($payTypeList));
  122. $this->assignconfig('type_data', array_values($payTypeList));
  123. $this->assignconfig('type_column1', array_keys($payTypeList1));
  124. $this->assignconfig('type_data1', array_values($payTypeList1));
  125. return $this->view->fetch();
  126. }
  127. public function seller_statistics(){
  128. list($date)=$this->rangeTime('aaaaa');
  129. $this->assign('date',$date);
  130. if($this->request->isAjax()){
  131. $type=input('type',1);
  132. $filter=json_decode(input('filter'),true);
  133. $map=[];
  134. if(!empty($filter['date'])){
  135. list($time1,$time2)=explode(' - ',$filter['date']);
  136. $map['create_time']=['between',[strtotime($time1),strtotime($time2)]];
  137. }
  138. $offset=input('offset',0);
  139. $limit=input('limit',20);
  140. $page=$offset/$limit+1;
  141. if($type==1){
  142. $list= Orders::payed()
  143. ->where($map)
  144. ->field('SUM(amount_pay) as amount,admin_id')
  145. ->group('admin_id')
  146. ->order('amount','desc')
  147. ->paginate($limit,false,['page'=>$page]);
  148. }else{
  149. $list=AdminMoneyLog::filterTypeCommission()
  150. ->where($map)
  151. ->field('SUM(amount) as amount,admin_id')
  152. ->group('admin_id')
  153. ->order('amount','desc')
  154. ->paginate($limit,false,['page'=>$page]);
  155. }
  156. $index=$list->listRows()*$list->currentPage()-$list->listRows();
  157. foreach ($list as $idx=>&$item){
  158. $item['rank']=$index+$idx+1;
  159. $item['nickname']=Admin::where('id',$item['admin_id'])->value('nickname');
  160. }
  161. return json([
  162. 'rows'=>$list->items(),
  163. 'total'=>$list->total(),
  164. ]);
  165. }
  166. return $this->fetch();
  167. }
  168. }