OrderDayStatsController.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: hp
  5. * Date: 2017/11/30
  6. * Time: 17:24
  7. */
  8. namespace App\Http\Controllers\Manage\Trade;
  9. use App\Http\Controllers\Manage\Finance\BaseController;
  10. use App\Http\Controllers\Manage\Trade\Transformers\OrderDayStatOutPayTransformer;
  11. use App\Http\Controllers\Manage\Trade\Transformers\OrderDayStatTransformer;
  12. use App\Http\Controllers\Manage\Trade\Transformers\OrderDaySumStatTransformer;
  13. use App\Http\Controllers\Manage\Trade\Transformers\OrderMonthTransformer;
  14. use App\Http\Controllers\Manage\Trade\Transformers\OrderChannelMonthTransformer;
  15. use App\Modules\Trade\Services\OrderDayStatService;
  16. use Illuminate\Http\Request;
  17. use App\Modules\User\Services\UserSignService;
  18. use App\Modules\Channel\Services\ChannelService;
  19. use App\Modules\SendOrder\Services\SendOrderService;
  20. use DB;
  21. class OrderDayStatsController extends BaseController
  22. {
  23. /**
  24. * @apiDefine Trade 交易订单
  25. */
  26. /**
  27. * @apiVersion 1.0.0
  28. * @api {GET} trade/orderDayStats 获取渠道日统计列表
  29. * @apiGroup Trade
  30. * @apiName orderDayStats
  31. * @apiParam {Number} distribution_channel_id 分销渠道ID
  32. * @apiParam {String} begin_time 开始时间
  33. * @apiParam {String} begin_time 结束时间
  34. * @apiSuccess {String} date 日期.
  35. * @apiSuccess {Number} distribution_channel_id 渠道id.
  36. * @apiSuccess {Number} pay_success_user_num 总付费用户数.
  37. * @apiSuccess {Number} total_recharge_amount 总付费总额.
  38. * @apiSuccess {Number} unpaid_num 未付费订单数.
  39. * @apiSuccess {Number} paid_num 付费订单数.
  40. * @apiSuccess {Number} promotion_total_uv 推广uv数.
  41. * @apiSuccess {Number} promotion_total_pv 推广pv数.
  42. * @apiSuccess {Number} send_order_num 派单数.
  43. * @apiSuccess {Number} register_user_num 注册用户数.
  44. * @apiSuccess {Number} force_user_num 关注用户数.
  45. * @apiSuccess {Number} ticket_recharge_user_num 普通充值用户数
  46. * @apiSuccess {Number} year_recharge_user_num 包年VIP充值用户数
  47. * @apiSuccess {Number} actual_send_order_num 实际派单数
  48. * @apiSuccess {Number} sign_num 签到人数
  49. * @apiSuccess {String} created_at 创建时间
  50. * @apiSuccess {String} updated_at 更新时间
  51. */
  52. function index(Request $request)
  53. {
  54. //根据名称查渠道ID
  55. $temp_distribution_channel_name = $distribution_channel_name = $request->has('name') ?$request->input('name') : '';
  56. $distribution_channel_id = $request->has('distribution_channel_id') ? (int)$request->input('distribution_channel_id') : null;
  57. $temp_distribution_channel_id = $distribution_channel_id;
  58. $orderBy = $request->has('orderBy') ? $request->input('orderBy') : '';
  59. if ($distribution_channel_name) {
  60. $distribution_channel_id = [];
  61. $channels = ChannelService::getChannelList(['company_name' => $distribution_channel_name]);
  62. foreach ($channels as $channel) {
  63. $distribution_channel_id[] = $channel->id;
  64. }
  65. }
  66. $begin_time = $request->has('begin_time') ? $request->input('begin_time') : '';
  67. $end_time = $request->has('end_time') ? $request->input('end_time') : '';
  68. $stats = OrderDayStatService::search(compact('distribution_channel_id', 'begin_time', 'end_time', 'orderBy'));
  69. $stats = $this->OrderDayStatAndSign($stats, compact('distribution_channel_id', 'begin_time', 'end_time'));
  70. $ret = [];
  71. $trans = new OrderDayStatTransformer();
  72. $ret['list'] = [];
  73. $empty_fill = false;
  74. $temp_res = [];
  75. $where = [];
  76. if ($stats->isEmpty()) {
  77. if($temp_distribution_channel_id){
  78. $where[] = ['distribution_channels.id','=',$temp_distribution_channel_id];
  79. }
  80. if($temp_distribution_channel_name){
  81. $where[] = ['companies.name','like','%'.$temp_distribution_channel_name.'%'];
  82. }
  83. if($where){
  84. $temp_res = DB::table('distribution_channels')
  85. ->join('channel_users','channel_users.id','=','distribution_channels.channel_user_id')
  86. ->join('companies','companies.id','=','channel_users.company_id')
  87. ->where($where)
  88. ->select('distribution_channels.id as distribution_channel_id','companies.name as distribution_channel_name','companies.fans_gender')
  89. ->get();
  90. if ($temp_res) {
  91. $empty_fill = true;
  92. }
  93. }
  94. }
  95. if ($empty_fill) {
  96. foreach ($temp_res as $item) {
  97. $ret['list'][] = $trans->transformDefault($item);
  98. }
  99. }
  100. foreach ($stats as $item) {
  101. switch ($item['fans_gender']){
  102. case 1:$item['fans_gender']='男粉';break;
  103. case 2:$item['fans_gender']='女粉';break;
  104. case 3:$item['fans_gender']='混合粉';break;
  105. default:$item['fans_gender']='';
  106. }
  107. $ret['list'][] = $trans->transform($item);
  108. }
  109. $ret['meta'] = [
  110. 'total' => (int)$stats->total(),
  111. 'per_page' => (int)$stats->perPage(),
  112. 'current_page' => (int)$stats->currentPage(),
  113. 'last_page' => (int)$stats->lastPage(),
  114. 'next_page_url' => (string)$stats->nextPageUrl(),
  115. 'prev_page_url' => (string)$stats->previousPageUrl()
  116. ];
  117. return response()->success($ret);
  118. }
  119. /**
  120. * @apiVersion 1.0.0
  121. * @api {GET} trade/getStatByChannel 获取渠道日统计列表
  122. * @apiGroup Trade
  123. * @apiName getStatByChannel
  124. * @apiParam {String} begin_time 开始时间
  125. * @apiParam {String} begin_time 结束时间
  126. * @apiSuccess {String} date 日期.
  127. * @apiSuccess {Number} distribution_channel_id 渠道id.
  128. * @apiSuccess {Number} pay_success_user_num 总付费用户数.
  129. * @apiSuccess {Number} total_recharge_amount 总付费总额.
  130. * @apiSuccess {Number} unpaid_num 未付费订单数.
  131. * @apiSuccess {Number} paid_num 付费订单数.
  132. * @apiSuccess {Number} promotion_total_uv 推广uv数.
  133. * @apiSuccess {Number} promotion_total_pv 推广pv数.
  134. * @apiSuccess {Number} send_order_num 派单数.
  135. * @apiSuccess {Number} register_user_num 注册用户数.
  136. * @apiSuccess {Number} force_user_num 关注用户数.
  137. * @apiSuccess {Number} ticket_recharge_user_num 普通充值用户数
  138. * @apiSuccess {Number} year_recharge_user_num 包年VIP充值用户数
  139. * @apiSuccess {String} created_at 创建时间
  140. * @apiSuccess {String} updated_at 更新时间
  141. */
  142. function getStatByChannel(Request $request)
  143. {
  144. $begin_time = $request->has('begin_time') ? $request->input('begin_time') : date("Y-m-d", strtotime('-7 days'));
  145. $end_time = $request->has('end_time') ? $request->input('end_time') : date("Y-m-d");
  146. $stat = OrderDayStatService::getStatByChannel(compact('begin_time', 'end_time'));
  147. return response()->collection(new OrderDaySumStatTransformer(), $stat);
  148. }
  149. function exportStatByChannel(Request $request)
  150. {
  151. $begin_time = $request->has('begin_time') ? $request->input('begin_time') : date("Y-m-d", strtotime('-7 days'));
  152. $end_time = $request->has('end_time') ? $request->input('end_time') : date("Y-m-d");
  153. $stats = OrderDayStatService::getStatByChannel(compact('begin_time', 'end_time'));
  154. header("Content-type:application/vnd.ms-excel");
  155. header("Content-Disposition:attachment;filename=" . "日统计列表" . date("YmdHis") . ".csv");
  156. echo iconv("UTF-8", "GBK", "\"日期\",\"付费用户数\",\"充值总额\",\"外部通道充值总额\",\"uv\",\"pv\",\"创建派单数\",\"实际派单数\",\"注册用户数\",\"实际注册用户数\",\"强关用户数\",\"首充用户数\",\"首充金额\",\"非首充用户数\",\"非首充金额\",\"订单成功率\",\"首日注册充值金额\",\"首日注册付费人数\"\r\n");
  157. if ($stats) {
  158. foreach ($stats as $stat) {
  159. echo("\"" . $stat->date . "\",");
  160. echo("\"" . (int)$stat->pay_success_user_num . "\",");
  161. echo("\"" . (float)$stat->total_recharge_amount . "\",");
  162. echo("\"" . (float)$stat->channel_merchant_recharge_amount . "\",");
  163. echo("\"" . (int)$stat->promotion_total_uv . "\",");
  164. echo("\"" . (int)$stat->promotion_total_pv . "\",");
  165. echo("\"" . (int)$stat->send_order_num . "\",");
  166. echo("\"" . (int)$stat->real_send_order_num . "\",");
  167. echo("\"" . (int)$stat->register_user_num . "\",");
  168. echo("\"" . (int)$stat->real_register_user_num . "\",");
  169. echo("\"" . (int)$stat->force_user_num . "\",");
  170. echo("\"" . (int)$stat->first_recharge_user_num . "\",");
  171. echo("\"" . (float)$stat->first_recharge_amount . "\",");
  172. echo("\"" . ((int)$stat->pay_success_user_num - (float)$stat->first_recharge_user_num) . "\",");
  173. echo("\"" . ((float)$stat->total_recharge_amount - (float)$stat->first_recharge_amount) . "\",");
  174. $per = (float)$stat->unpaid_num + (float)$stat->paid_num > 0 ? round(((float)$stat->paid_num / ((float)$stat->unpaid_num + (float)$stat->paid_num)) * 100, 2) : 0;
  175. echo("\"" . $per . "%\",");
  176. echo("\"" . (float)$stat->reg_user_first_recharge_amount . "\",");
  177. echo("\"" . (float)$stat->reg_user_first_recharge_user_num . "\"\r\n");
  178. }
  179. }
  180. exit();
  181. }
  182. function export(Request $request)
  183. {
  184. $distribution_channel_id = $request->has('distribution_channel_id') ? (int)$request->input('distribution_channel_id') : null;
  185. $begin_time = $request->has('begin_time') ? $request->input('begin_time') : '';
  186. $end_time = $request->has('end_time') ? $request->input('end_time') : '';
  187. $stats = OrderDayStatService::search(compact('distribution_channel_id', 'begin_time', 'end_time'), true);
  188. $stats = $this->OrderDayStatAndSign($stats, compact('distribution_channel_id', 'begin_time', 'end_time'));
  189. header("Content-type:application/vnd.ms-excel");
  190. header("Content-Disposition:attachment;filename=" . "日统计列表" . date("YmdHis") . ".csv");
  191. echo iconv("UTF-8", "GBK", "\"渠道ID\",\"渠道名称\",\"日期\",\"充值总额\",\"创建派单数\",\"实际派单数\",\"uv\",\"总点击数\",\"新增关注数\",\"注册用户数\",\"普通付费人数\",\"包年付费人数\",\"订单成功率\",\"签到人数\",\"首充用户数\",\"首充金额\",\"注册用户首充金额\",\"注册用户首充用户数\"\r\n");
  192. if ($stats) {
  193. foreach ($stats as $stat) {
  194. echo("\"" . $stat->distribution_channel_id . "\",");
  195. echo("\"" . iconv("UTF-8", "GBK", $stat->distribution_channel_name) . "\",");
  196. echo("\"" . $stat->date . "\",");
  197. echo("\"" . (float)$stat->total_recharge_amount . "\",");
  198. echo("\"" . (int)$stat->send_order_num . "\",");
  199. echo("\"" . (int)$stat->real_send_order_num . "\",");
  200. echo("\"" . (int)$stat->promotion_total_uv . "\",");
  201. echo("\"" . (int)$stat->promotion_total_pv . "\",");
  202. echo("\"" . (int)$stat->force_user_num . "\",");
  203. echo("\"" . (int)$stat->register_user_num . "\",");
  204. echo("\"" . (int)$stat->ticket_recharge_user_num . "\",");
  205. echo("\"" . $stat->year_recharge_user_num . "\",");
  206. $per = (float)$stat->unpaid_num + (float)$stat->paid_num > 0 ? round(((float)$stat->paid_num / ((float)$stat->unpaid_num + (float)$stat->paid_num)) * 100, 2) : 0;
  207. echo("\"" . $per . "%\",");
  208. echo("\"" . (int)$stat->sign_num . "\",");
  209. echo("\"" . (int)$stat->first_recharge_user_num . "\",");
  210. echo("\"" . (float)$stat->first_recharge_amount . "\",");
  211. echo("\"" . (float)$stat->reg_user_first_recharge_amount . "\",");
  212. echo("\"" . (float)$stat->reg_user_first_recharge_user_num . "\"\r\n");
  213. }
  214. }
  215. exit();
  216. }
  217. private function OrderDayStatAndSign($target, $data)
  218. {
  219. //$sing_data = UserSignService::getSignTotalByChnnelId($data);
  220. if (true) {
  221. foreach ($target as &$v) {
  222. //实际派单数
  223. $v->actual_send_order_num = 0;
  224. $v->sign_num = 0;
  225. /*
  226. $v->actual_send_order_num = SendOrderService::getActualSendOrderNum($v->distribution_channel_id,$v->date);
  227. if(!$v->actual_send_order_num){
  228. }
  229. foreach ($sing_data as $val){
  230. if($v->distribution_channel_id == $val->distribution_channel_id && $v->date == $val->day){
  231. $v->sign_num = $val->sign_num;
  232. break;
  233. }
  234. }
  235. */
  236. }
  237. }
  238. return $target;
  239. }
  240. public function getAllGroupbyMonth()
  241. {
  242. $data = OrderDayStatService::getAllGroupbyMonth();
  243. return response()->collection(new OrderMonthTransformer(), $data);
  244. }
  245. public function getAllGroupbyMonthChannel(Request $request)
  246. {
  247. $month = $request->has('month') ? $request->input('month') : '';
  248. $distribution_channel_id = $request->has('distribution_channel_id') ? $request->input('distribution_channel_id') : '';
  249. $distribution_channel_name = $request->has('distribution_channel_name') ? $request->input('distribution_channel_name') : '';
  250. $data = OrderDayStatService::getAllGroupbyMonthChannel(compact('month', 'distribution_channel_id', 'distribution_channel_name'), 1);
  251. return response()->collection(new OrderChannelMonthTransformer(), $data);
  252. }
  253. public function exportAllGroupbyMonthChannel(Request $request)
  254. {
  255. $month = $request->has('month') ? $request->input('month') : '';
  256. $stats = OrderDayStatService::getAllGroupbyMonthChannel(compact('month'), 1);
  257. header("Content-type:application/vnd.ms-excel");
  258. header("Content-Disposition:attachment;filename=" . "渠道按月统计列表" . date("YmdHis") . ".csv");
  259. echo iconv("UTF-8", "GBK", "\"渠道ID\",\"渠道名称\",\"月份\",\"充值总额\",\"派单数\",\"实际派单数\",\"uv\",\"实际注册用户数\",\"pv\",\"新增关注数\",\"普通付费人数\",\"包年付费人数\",\"订单成功率\",\"签到人数\"\r\n");
  260. if ($stats) {
  261. foreach ($stats as $stat) {
  262. echo("\"" . $stat->distribution_channel_id . "\",");
  263. echo("\"" . iconv("UTF-8", "GBK", $stat->distribution_channel_name) . "\",");
  264. echo("\"" . date("Y-m", strtotime($stat->date)) . "\",");
  265. echo("\"" . (float)$stat->total_recharge_amount . "\",");
  266. echo("\"" . (int)$stat->send_order_num . "\",");
  267. echo("\"" . (int)$stat->actual_send_order_num . "\",");
  268. echo("\"" . (int)$stat->promotion_total_uv . "\",");
  269. echo("\"" . (int)$stat->real_register_user_num . "\",");
  270. echo("\"" . (int)$stat->promotion_total_pv . "\",");
  271. echo("\"" . (int)$stat->force_user_num . "\",");
  272. echo("\"" . (int)$stat->ticket_recharge_user_num . "\",");
  273. echo("\"" . $stat->year_recharge_user_num . "\",");
  274. $per = (float)$stat->unpaid_num + (float)$stat->paid_num > 0 ? round(((float)$stat->paid_num / ((float)$stat->unpaid_num + (float)$stat->paid_num)) * 100, 2) : 0;
  275. echo("\"" . $per . "%\",");
  276. echo("\"" . (int)$stat->sign_num . "\r\n");
  277. }
  278. }
  279. }
  280. /**
  281. * @apiVersion 1.0.0
  282. * @apiDescription 站外支付数据
  283. * @api {GET} trade/getOutPayData
  284. * @apiGroup Trade
  285. * @apiName getOutPayData
  286. * @apiParam {String} [distribution_channel_id] 渠道ID
  287. * @apiParam {String} [search_name] 搜索名称
  288. * @apiParam {String} [start_time] 开始时间2017-01-01.(可不传)
  289. * @apiParam {String} [end_time] 结束时间2017-02-01.(可不传)
  290. *
  291. * @apiSuccess {String} distribution_channel_id 渠道ID
  292. * @apiSuccess {String} distribution_channel_name 渠道名称
  293. * @apiSuccess {String} date 日期.
  294. * @apiSuccess {String} month 日期.
  295. * @apiSuccess {Number} channel_merchant_recharge_amount 站外总金额.
  296. * @apiSuccess {Number} pay_merchant_id 支付渠道ID.
  297. * @apiSuccessExample {json} Success-Response:
  298. *
  299. * {
  300. * "code": 0,
  301. * "msg": "",
  302. * "data":
  303. * {
  304. * "list":[
  305. * {
  306. * "distribution_channel_id": 70,
  307. * "distribution_channel_name": "梦嘉男号50",
  308. * "month": "2018-05",
  309. * "date": "",
  310. * "channel_merchant_recharge_amount": 18,
  311. * "pay_merchant_id": 0
  312. * }
  313. * ]
  314. * "meta":{
  315. * "total": 4,
  316. * "per_page": 15,
  317. * "current_page": 1,
  318. * "last_page": 1,
  319. * "next_page_url": "",
  320. * "prev_page_url": ""
  321. * }
  322. * }
  323. * }
  324. */
  325. function getOutPayData(Request $request)
  326. {
  327. $distribution_channel_id = $request->has('distribution_channel_id') ? $request->input('distribution_channel_id') : '';
  328. $start_time = $request->has('start_time') && !empty($request->input('start_time')) ? date('Ymd', strtotime($request->input('start_time'))) : '';
  329. $end_time = $request->has('end_time') && !empty($request->input('end_time')) ? date('Ymd', strtotime($request->input('end_time'))) : '';
  330. $end_time = self::getMaxDay($end_time);
  331. $search_name = $request->has('search_name') ? $request->input('search_name') : '';
  332. $params = [
  333. 'distribution_channel_id' => $distribution_channel_id,
  334. 'distribution_channel_name' => $search_name,
  335. 'start_date' => $start_time,
  336. 'end_date' => $end_time,
  337. ];
  338. $data = OrderDayStatService::getOutPayData($params);
  339. return response()->pagination(new OrderDayStatOutPayTransformer(), $data);
  340. }
  341. /**
  342. * @apiVersion 1.0.0
  343. * @apiDescription 站外支付数据导出
  344. * @api {GET} trade/getOutPayDataExport
  345. * @apiGroup Trade
  346. * @apiName getOutPayDataExport
  347. * @apiParam {String} [distribution_channel_id] 渠道ID
  348. * @apiParam {String} [search_name] 搜索名称
  349. * @apiParam {String} [start_time] 开始时间2017-01-01.(可不传)
  350. * @apiParam {String} [end_time] 结束时间2017-02-01.(可不传)
  351. *
  352. * @apiSuccess {String} distribution_channel_id 渠道ID
  353. * @apiSuccess {String} distribution_channel_name 渠道名称
  354. * @apiSuccess {String} date 日期.
  355. * @apiSuccess {String} month 日期.
  356. * @apiSuccess {Number} channel_merchant_recharge_amount 站外总金额.
  357. * @apiSuccess {Number} pay_merchant_id 支付渠道ID.
  358. * @apiSuccessExample {json} Success-Response:
  359. *
  360. * {
  361. * "code": 0,
  362. * "msg": "",
  363. * "data":
  364. * {
  365. * "list":[
  366. * {
  367. * "distribution_channel_id": 70,
  368. * "distribution_channel_name": "梦嘉男号50",
  369. * "month": "2018-05",
  370. * "date": "",
  371. * "channel_merchant_recharge_amount": 18,
  372. * "pay_merchant_id": 0
  373. * }
  374. * ]
  375. * "meta":{
  376. * "total": 4,
  377. * "per_page": 15,
  378. * "current_page": 1,
  379. * "last_page": 1,
  380. * "next_page_url": "",
  381. * "prev_page_url": ""
  382. * }
  383. * }
  384. * }
  385. */
  386. function getOutPayDataExport(Request $request)
  387. {
  388. $distribution_channel_id = $request->has('distribution_channel_id') ? $request->input('distribution_channel_id') : '';
  389. $start_time = $request->has('start_time') && !empty($request->input('start_time')) ? date('Ymd', strtotime($request->input('start_time'))) : '';
  390. $end_time = $request->has('end_time') && !empty($request->input('end_time')) ? date('Ymd', strtotime($request->input('end_time'))) : '';
  391. $end_time = self::getMaxDay($end_time);
  392. $search_name = $request->has('search_name') ? $request->input('search_name') : '';
  393. $params = [
  394. 'distribution_channel_id' => $distribution_channel_id,
  395. 'distribution_channel_name' => $search_name,
  396. 'start_date' => $start_time,
  397. 'end_date' => $end_time,
  398. ];
  399. $data = OrderDayStatService::getOutPayData($params, true);
  400. header("Content-type:application/vnd.ms-excel");
  401. header("Content-Disposition:attachment;filename=" . "站外渠道支付数据" . date("YmdHis") . ".csv");
  402. echo iconv("UTF-8", "GBK", "\"渠道ID\",\"渠道名称\",\"月份\",\"日期\",\"站外金额(元)\",\"支付渠道ID\"\r\n");
  403. if ($data) {
  404. foreach ($data as $item) {
  405. echo("\"" . iconv("UTF-8", "GBK", trim($item->distribution_channel_id)) . "\",");
  406. echo("\"" . iconv("UTF-8", "GBK", trim($item->distribution_channel_name)) . "\",");
  407. echo("\"" . iconv("UTF-8", "GBK", trim($item->month)) . "\",");
  408. echo("\"" . iconv("UTF-8", "GBK", trim($item->date)) . "\",");
  409. echo("\"" . iconv("UTF-8", "GBK", trim($item->channel_merchant_recharge_amount)) . "\",");
  410. echo("\"" . iconv("UTF-8", "GBK", trim($item->pay_merchant_id)) . "\"\r\n");
  411. }
  412. }
  413. exit();
  414. }
  415. function getStatByCompany(Request $request)
  416. {
  417. $begin_time = $request->has('begin_time') ? $request->input('begin_time') : date("Y-m-d", strtotime('-7 days'));
  418. $end_time = $request->has('end_time') ? $request->input('end_time') : date("Y-m-d");
  419. $company_id = $request->has('company_id') && $request->input('company_id') ? $request->input('company_id') : 0;
  420. $company_name = $request->has('company_name') && $request->input('company_name') ? $request->input('company_name') : '';
  421. $where = "order_day_stats.date >= '{$begin_time}' and order_day_stats.date <= '{$end_time}'";
  422. if ($company_id) $where .= " and company_id = {$company_id}";
  423. if ($company_name) $where .= " and company_name like '%{$company_name}%'";
  424. $data = DB::select("select company_id,
  425. company_name,
  426. fans_gender,
  427. sum(pay_success_user_num) pay_success_user_num,
  428. sum(total_recharge_amount) total_recharge_amount,
  429. sum(unpaid_num) unpaid_num,
  430. sum(paid_num) paid_num,
  431. sum(promotion_total_uv) promotion_total_uv,
  432. sum(promotion_total_pv) promotion_total_pv,
  433. sum(send_order_num) send_order_num,
  434. sum(real_send_order_num) real_send_order_num,
  435. sum(register_user_num) register_user_num,
  436. sum(real_register_user_num) real_register_user_num,
  437. sum(force_user_num) force_user_num,
  438. sum(ticket_recharge_user_num) ticket_recharge_user_num,
  439. sum(year_recharge_user_num) year_recharge_user_num,
  440. sum(first_recharge_user_num) first_pay_user_num,
  441. sum(first_recharge_amount) first_pay_amount,
  442. sum(reg_user_first_recharge_user_num) reg_user_first_recharge_user_num,
  443. sum(reg_user_first_recharge_amount) reg_user_first_recharge_amount from order_day_stats,companies,channel_users where {$where} and channel_users.id = order_day_stats.channel_user_id and companies.id = channel_users.company_id group by company_id");
  444. if ($data) {
  445. foreach ($data as $k => $v) {
  446. $data[$k]->unpaid_num = (int)$v->unpaid_num;
  447. $data[$k]->paid_num = (int)$v->paid_num;
  448. $data[$k]->total_recharge_amount = (int)$v->total_recharge_amount;
  449. $data[$k]->first_pay_amount = (int)$v->first_pay_amount;
  450. $data[$k]->not_first_pay_user_num = (float)$v->pay_success_user_num - (float)$v->first_pay_user_num;
  451. $data[$k]->not_first_pay_amount = round((float)$v->total_recharge_amount - (float)$v->first_pay_amount, 2);
  452. switch ($v->fans_gender){
  453. case 1:$v->fans_gender = '男';break;
  454. case 2:$v->fans_gender = '女';break;
  455. case 3:$v->fans_gender = '混合粉';break;
  456. default:$v->fans_gender = '';
  457. }
  458. $data[$k]->fans_gender = $v->fans_gender;
  459. }
  460. }
  461. return response()->success($data);
  462. }
  463. function exportStatByCompany(Request $request)
  464. {
  465. $begin_time = $request->has('begin_time') ? $request->input('begin_time') : date("Y-m-d", strtotime('-7 days'));
  466. $end_time = $request->has('end_time') ? $request->input('end_time') : date("Y-m-d");
  467. $company_id = $request->has('company_id') && $request->input('company_id') ? $request->input('company_id') : 0;
  468. $company_name = $request->has('company_name') && $request->input('company_name') ? $request->input('company_name') : '';
  469. $where = "order_day_stats.date >= '{$begin_time}' and order_day_stats.date <= '{$end_time}'";
  470. if ($company_id) $where .= " and company_id = {$company_id}";
  471. if ($company_name) $where .= " and company_name like '%{$company_name}%'";
  472. $data = DB::select("select company_id,
  473. company_name,
  474. sum(pay_success_user_num) pay_success_user_num,
  475. sum(total_recharge_amount) total_recharge_amount,
  476. sum(unpaid_num) unpaid_num,
  477. sum(paid_num) paid_num,
  478. sum(promotion_total_uv) promotion_total_uv,
  479. sum(promotion_total_pv) promotion_total_pv,
  480. sum(send_order_num) send_order_num,
  481. sum(real_send_order_num) real_send_order_num,
  482. sum(register_user_num) register_user_num,
  483. sum(real_register_user_num) real_register_user_num,
  484. sum(force_user_num) force_user_num,
  485. sum(ticket_recharge_user_num) ticket_recharge_user_num,
  486. sum(year_recharge_user_num) year_recharge_user_num,
  487. sum(first_recharge_user_num) first_pay_user_num,
  488. sum(first_recharge_amount) first_pay_amount,
  489. sum(reg_user_first_recharge_user_num) reg_user_first_recharge_user_num,
  490. sum(reg_user_first_recharge_amount) reg_user_first_recharge_amount from order_day_stats,companies,channel_users where {$where} and channel_users.id = order_day_stats.channel_user_id and companies.id = channel_users.company_id group by company_id");
  491. header("Content-type:application/vnd.ms-excel");
  492. header("Content-Disposition:attachment;filename=" . "按公司统计列表" . date("YmdHis") . ".csv");
  493. echo iconv("UTF-8", "GBK", "\"公司ID\",\"公司名称\",\"充值总额\",\"创建派单数\",\"实际派单数\",\"uv\",\"总点击数\",\"新增关注数\",\"注册用户数\",\"普通付费人数\",\"包年付费人数\",\"订单成功率\",\"首充用户数\",\"首充金额\",\"注册用户首充金额\",\"注册用户首充用户数\"\r\n");
  494. if ($data) {
  495. foreach ($data as $stat) {
  496. echo("\"" . $stat->company_id . "\",");
  497. echo("\"" . iconv("UTF-8", "GBK", $stat->company_name) . "\",");
  498. echo("\"" . (float)$stat->total_recharge_amount . "\",");
  499. echo("\"" . (int)$stat->send_order_num . "\",");
  500. echo("\"" . (int)$stat->real_send_order_num . "\",");
  501. echo("\"" . (int)$stat->promotion_total_uv . "\",");
  502. echo("\"" . (int)$stat->promotion_total_pv . "\",");
  503. echo("\"" . (int)$stat->force_user_num . "\",");
  504. echo("\"" . (int)$stat->register_user_num . "\",");
  505. echo("\"" . (int)$stat->ticket_recharge_user_num . "\",");
  506. echo("\"" . $stat->year_recharge_user_num . "\",");
  507. $per = (float)$stat->unpaid_num + (float)$stat->paid_num > 0 ? round(((float)$stat->paid_num / ((float)$stat->unpaid_num + (float)$stat->paid_num)) * 100, 2) : 0;
  508. echo("\"" . $per . "%\",");
  509. echo("\"" . (int)$stat->first_pay_user_num . "\",");
  510. echo("\"" . (float)$stat->first_pay_amount . "\",");
  511. echo("\"" . (float)$stat->reg_user_first_recharge_amount . "\",");
  512. echo("\"" . (float)$stat->reg_user_first_recharge_user_num . "\"\r\n");
  513. }
  514. }
  515. exit;
  516. }
  517. }