Nenhuma Descrição

TemplateController.php 6.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Apiistrator
  5. * Date: 2018-02-22
  6. * Time: 10:32
  7. */
  8. namespace App\Http\Controllers\Api;
  9. use App\Http\Controllers\Controller;
  10. use Illuminate\Http\Request;
  11. use App\Log;
  12. use App\Templates;
  13. use App\TemplatesSource;
  14. use App\TemplatesSalers;
  15. use App\TemplatesSourceSalers;
  16. use App\Admin;
  17. use App\TemplatesLog;
  18. use App\CustTotal;
  19. use App\CustDetail;
  20. use App\Order;
  21. use Illuminate\Support\Facades\Hash;
  22. use Illuminate\Support\Facades\DB;
  23. class TemplateController extends Controller {
  24. /**
  25. * 模板匹配销售qrcode
  26. */
  27. public function salerQrcode(Request $request){
  28. $t_id = (int)$request->input('t_id');
  29. if(!$t_id) $t_id = 1;
  30. //查询未离职销售
  31. $_open_ids = Admin::where('is_use', 1)->lists('id');
  32. //获取背景图
  33. $back_img = TemplatesSource::where('id', $t_id)->pluck('back_img');
  34. $result = TemplatesSourceSalers::where('s_id', $t_id)->where('is_del', 0)->where('weight','>',0)->whereIn('admin_id', $_open_ids)->orderBy('weight', 'asc')->lists('weight', 'admin_id');
  35. if(empty($result)){
  36. return self::returnValue([],1001);
  37. }
  38. $saler_id = null;
  39. $rand = 0;
  40. //获取最大随机值
  41. $max = array_sum($result) * 10;
  42. //随机一个值
  43. $rand_re = mt_rand(1, $max);
  44. foreach($result as $k=>$weight){
  45. $rand += $weight * 10;
  46. if($rand_re <= $rand){
  47. $saler_id = $k;
  48. break;
  49. }
  50. }
  51. $saler_ids = array_keys($result);
  52. $ip = $this->getRealIp();
  53. if($saler_id){
  54. //记录行为
  55. $log = array();
  56. $log['t_id'] = $t_id;
  57. $log['t_url'] = TemplatesSource::where('id', $t_id)->pluck('url');
  58. $log['admin_id'] = $saler_id;
  59. $log['ip'] = $ip;
  60. TemplatesLog::insert($log);
  61. }
  62. $qrcode = Admin::where('id', $saler_id)->pluck('qrcode');
  63. $qrcodes = Admin::whereIn('id', $saler_ids)->lists('qrcode');
  64. return self::returnValue(['qrcode'=>$qrcode, 'ip'=>$ip, 'saler_id'=>$saler_id, 'qrcodes'=>$qrcodes, 'back_img'=>$back_img]);
  65. }
  66. /**
  67. * 获取真实ip
  68. */
  69. public function getRealIp()
  70. {
  71. $ip=false;
  72. if(!empty($_SERVER["HTTP_CLIENT_IP"])){
  73. $ip = $_SERVER["HTTP_CLIENT_IP"];
  74. }
  75. if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  76. $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
  77. if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
  78. for ($i = 0; $i < count($ips); $i++) {
  79. if (!preg_match ("/^(10│172.16│192.168)./", $ips[$i])) {
  80. $ip = $ips[$i];
  81. break;
  82. }
  83. }
  84. }
  85. return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
  86. }
  87. /**
  88. * 长按用户存日志
  89. */
  90. public function addLongLog(Request $request){
  91. $saler_id = $request->input('saler_id');
  92. $t_id = $request->input('t_id');
  93. $ip = $this->getRealIp();
  94. if($saler_id && $t_id){
  95. //记录行为
  96. $log = array();
  97. $log['t_id'] = $t_id;
  98. $log['t_url'] = TemplatesSource::where('id', $t_id)->pluck('url');
  99. $log['admin_id'] = $saler_id;
  100. $log['ip'] = $ip;
  101. $log['type'] = 2; //长按
  102. TemplatesLog::insert($log);
  103. }
  104. return self::returnValue([]);
  105. }
  106. /**
  107. * 每日累计汇总数据
  108. */
  109. public function dayGrandTotal(Request $request){
  110. $days = (int)$request->input('days');
  111. if(!$days){
  112. $days = 7;
  113. }
  114. $stime = date('Y-m-d', strtotime('-'.$days.' day'));
  115. $data = array();
  116. $_start = '2019-09-04';
  117. //今日数据实时计算
  118. $idate = date('Y-m-d');
  119. $data['idate'] = $idate;
  120. //总投入
  121. $data['throw_cost'] = CustTotal::where('is_del',0)->where('dtime','>=',$_start)->sum('total_cost');
  122. //订单信息
  123. $order = Order::select(DB::raw('sum(cost) as goods_cost, sum(freight_cost) as freight_cost, sum(aftersale_fee) as aftersale_cost, count(1) as order_count, sum(receivedAmount) as order_amount, count(distinct(receiverMobile)) as cust_count, sum(refund_price) as refund_fee'))->where('createTime','>=',$_start)->where('is_del',0)->first();
  124. $data['goods_cost'] = $order->goods_cost;
  125. $data['freight_cost'] = $order->freight_cost;
  126. $data['aftersale_cost'] = $order->aftersale_cost;
  127. $data['refund_fee'] = $order->refund_fee;
  128. $data['order_count'] = $order->order_count;
  129. $data['order_amount'] = $order->order_amount;
  130. $data['cust_count'] = $order->cust_count;
  131. //加粉
  132. $data['fan_count'] = CustDetail::where('is_del',0)->where('dtime','>=',$_start)->sum('fan_add');
  133. //毛利 = 总销售额-总商品成本-总运费-总售后
  134. $data['profit'] = $order->order_amount - $order->goods_cost - $order->freight_cost - $order->aftersale_cost - $data['throw_cost'] + $order->refund_fee;
  135. $data['roi'] = $data['throw_cost']>0? round($order->order_amount / $data['throw_cost'], 4) : '';
  136. //总新粉单数
  137. $new_order = Order::select(DB::raw('count(1) as order_count'))->leftJoin('customers as cu','cu.phone', '=', 'order.receiverMobile')->whereRaw('left(order.createTime, 10) = cu.fanTime')->where('order.is_del', 0)->where('order.createTime','>=',$_start)->first();
  138. $data['new_order_count'] = $new_order->order_count;
  139. //总老粉单数
  140. $data['old_order_count'] = $data['order_count'] - $data['new_order_count'];
  141. //总复购订单
  142. $data['fugou_order_count'] = $data['order_count'] - $data['cust_count'];
  143. //总复购率
  144. $data['fugou_rate'] = $data['cust_count']>0 ? round($data['fugou_order_count'] / $data['cust_count'], 4) : '';
  145. //查询历史数据
  146. $result = DB::table('day_grand_total')->where('idate', '>', $stime)->orderBy('idate', 'desc')->get();
  147. $result = json_decode(json_encode($result), true);
  148. foreach($result as $k=>&$v){
  149. $v['roi'] = $v['throw_cost']>0 ? round($v['order_amount'] / $v['throw_cost'], 4) : '';
  150. $v['fugou_rate'] = $v['cust_count']>0 ? round($v['fugou_order_count'] / $v['cust_count'], 4) : '';
  151. }
  152. $result = array_merge([$data], $result);
  153. exit(json_encode($result));
  154. }
  155. }