OrderDayStat.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455
  1. <?php
  2. namespace App\Modules\Trade\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use DB;
  5. use Carbon\Carbon;
  6. class OrderDayStat extends Model
  7. {
  8. protected $table = 'order_day_stats';
  9. protected $fillable = ['distribution_channel_id','channel_user_id','distribution_channel_name', 'date','pay_success_user_num', 'ticket_recharge_user_num', 'year_recharge_user_num', 'total_recharge_amount','unpaid_num','paid_num','promotion_total_uv','promotion_total_pv','force_user_num','ticket_recharge_paid_num','ticket_recharge_unpaid_num','ticket_recharge_amount','year_recharge_paid_num','year_recharge_unpaid_num','year_recharge_amount','send_order_num','real_send_order_num','register_user_num','first_recharge_user_num','first_recharge_amount','month','reg_user_first_recharge_amount','reg_user_first_recharge_user_num','fee','charge_balance','reward_balance','real_register_user_num','channel_merchant_recharge_amount',
  10. 'whole_site_uv','whole_site_pv','auto_force_sub_num','self_force_sub_num','subscribe_user_num','subscribe_amount','old_user_subscribe_num','male_channel_recharge','female_channel_recharge'];
  11. //创建日统计数据
  12. static function add($params)
  13. {
  14. $data = [];
  15. $data['channel_user_id'] = $params['channel_user_id'];
  16. $data['distribution_channel_id'] = $params['distribution_channel_id'];
  17. $data['distribution_channel_name'] = $params['distribution_channel_name'];
  18. $data['date'] = $params['date'];
  19. $data['month'] = $params['month'];
  20. $data['pay_success_user_num'] = $params['pay_success_user_num'];
  21. $data['ticket_recharge_user_num'] = $params['ticket_recharge_user_num'];
  22. $data['year_recharge_user_num'] = $params['year_recharge_user_num'];
  23. $data['total_recharge_amount'] = $params['total_recharge_amount'];
  24. $data['unpaid_num'] = $params['unpaid_num'];
  25. $data['paid_num'] = $params['paid_num'];
  26. $data['promotion_total_uv'] = $params['promotion_total_uv'];
  27. $data['promotion_total_pv'] = $params['promotion_total_pv'];
  28. $data['force_user_num'] = $params['force_user_num'];
  29. //普通充值数据
  30. $data['ticket_recharge_paid_num'] = $params['ticket_recharge_paid_num'];
  31. $data['ticket_recharge_unpaid_num'] = $params['ticket_recharge_unpaid_num'];
  32. $data['ticket_recharge_amount'] = $params['ticket_recharge_amount'];
  33. //包年充值数据
  34. $data['year_recharge_paid_num'] = $params['year_recharge_paid_num'];
  35. $data['year_recharge_unpaid_num'] = $params['year_recharge_unpaid_num'];
  36. $data['year_recharge_amount'] = $params['year_recharge_amount'];
  37. $data['send_order_num'] = $params['send_order_num'];
  38. $data['real_send_order_num'] = $params['real_send_order_num'];
  39. $data['register_user_num'] = $params['register_user_num'];
  40. $data['real_register_user_num'] = $params['real_register_user_num'];
  41. //注册用户当日充值数据
  42. $data['reg_user_first_recharge_amount'] = $params['reg_user_first_recharge_amount'];
  43. $data['reg_user_first_recharge_user_num'] = $params['reg_user_first_recharge_user_num'];
  44. //首充数据
  45. $data['first_recharge_user_num'] = $params['first_recharge_user_num'];
  46. $data['first_recharge_amount'] = $params['first_recharge_amount'];
  47. $data['channel_merchant_recharge_amount'] = $params['channel_merchant_recharge_amount'];
  48. $data['whole_site_uv'] = $params['whole_site_uv'];
  49. $data['whole_site_pv'] = $params['whole_site_pv'];
  50. $data['auto_force_sub_num'] = $params['auto_force_sub_num'];
  51. $data['self_force_sub_num'] = $params['self_force_sub_num'];
  52. $data['old_user_subscribe_num'] = $params['old_user_subscribe_num'];
  53. // echo "<pre>";
  54. // print_r($data);
  55. return self::create($data);
  56. }
  57. static function accountSearch($params, $is_all)
  58. {
  59. $search_obj = self::join('distribution_channels','distribution_channels.id','=','order_day_stats.distribution_channel_id')
  60. ->join('channel_users','channel_users.id','=','distribution_channels.channel_user_id')
  61. ->join('companies','companies.id','=','channel_users.company_id')
  62. ->select("order_day_stats.date",
  63. DB::raw("sum(order_day_stats.pay_success_user_num) as pay_success_user_num"),
  64. DB::raw("sum(order_day_stats.ticket_recharge_user_num) as ticket_recharge_user_num"),
  65. DB::raw("sum(order_day_stats.year_recharge_user_num) as year_recharge_user_num"),
  66. DB::raw("sum(order_day_stats.total_recharge_amount) as total_recharge_amount"),
  67. DB::raw("sum(order_day_stats.unpaid_num) as unpaid_num"),
  68. DB::raw("sum(order_day_stats.paid_num) as paid_num"),
  69. DB::raw("sum(order_day_stats.promotion_total_uv) as promotion_total_uv"),
  70. DB::raw("sum(order_day_stats.promotion_total_pv) as promotion_total_pv"),
  71. DB::raw("sum(order_day_stats.force_user_num) as force_user_num"),
  72. "companies.name as company_name",
  73. "companies.fans_gender");
  74. if(isset($params['distribution_channel_id']) && $params['distribution_channel_id'])
  75. {
  76. if(is_array($params['distribution_channel_id']) && count($params['distribution_channel_id']))
  77. {
  78. $search_obj->whereIn('order_day_stats.distribution_channel_id',$params['distribution_channel_id']);
  79. }else{
  80. $search_obj->where('order_day_stats.distribution_channel_id',$params['distribution_channel_id']);
  81. }
  82. }
  83. if(isset($params['begin_time']) && $params['begin_time']) $search_obj->where('order_day_stats.date','>=',$params['begin_time']);
  84. if(isset($params['end_time']) && $params['end_time']) $search_obj->where('order_day_stats.date','<=',$params['end_time']);
  85. $search_obj->groupBy('order_day_stats.date');
  86. $search_obj->orderBy('order_day_stats.date','desc');
  87. if($is_all)
  88. {
  89. return $search_obj->get();
  90. }else{
  91. return $search_obj->paginate();
  92. }
  93. }
  94. static function search($params, $is_all)
  95. {
  96. $search_obj = self::join('distribution_channels','distribution_channels.id','=','order_day_stats.distribution_channel_id')
  97. ->join('channel_users','channel_users.id','=','distribution_channels.channel_user_id')
  98. ->join('companies','companies.id','=','channel_users.company_id')
  99. ->select(DB::raw("order_day_stats.*,companies.name as company_name,companies.fans_gender"));
  100. if(isset($params['orderBy']) && $params['orderBy'])
  101. {
  102. $search_obj->orderBy('order_day_stats.'.$params['orderBy'],'desc');
  103. }else{
  104. $search_obj->orderBy('order_day_stats.id','desc');
  105. }
  106. if(isset($params['distribution_channel_id']) && $params['distribution_channel_id'])
  107. {
  108. if(is_array($params['distribution_channel_id']) && count($params['distribution_channel_id']))
  109. {
  110. $search_obj->whereIn('order_day_stats.distribution_channel_id',$params['distribution_channel_id']);
  111. }else{
  112. $search_obj->where('order_day_stats.distribution_channel_id',$params['distribution_channel_id']);
  113. }
  114. }
  115. if(isset($params['begin_time']) && $params['begin_time']) $search_obj->where('order_day_stats.date','>=',$params['begin_time']);
  116. if(isset($params['end_time']) && $params['end_time']) $search_obj->where('order_day_stats.date','<=',$params['end_time']);
  117. if($is_all)
  118. {
  119. return $search_obj->get();
  120. }else{
  121. return $search_obj->paginate();
  122. }
  123. }
  124. /**
  125. * 获取渠道汇总统计数据
  126. * @param int $distribution_channel_id 分销渠道ID
  127. */
  128. static function getSumByChannelId($distribution_channel_id)
  129. {
  130. $fields = [
  131. DB::raw("sum(pay_success_user_num) pay_success_user_num,
  132. sum(total_recharge_amount) total_recharge_amount,
  133. sum(unpaid_num) unpaid_num,
  134. sum(paid_num) paid_num,
  135. sum(promotion_total_uv) promotion_total_uv,
  136. sum(promotion_total_pv) promotion_total_pv,
  137. sum(force_user_num) force_user_num,
  138. sum(ticket_recharge_user_num) ticket_recharge_user_num,
  139. sum(ticket_recharge_paid_num) ticket_recharge_paid_num,
  140. sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,
  141. sum(ticket_recharge_amount) ticket_recharge_amount,
  142. sum(year_recharge_user_num) year_recharge_user_num,
  143. sum(year_recharge_paid_num) year_recharge_paid_num,
  144. sum(year_recharge_unpaid_num) year_recharge_unpaid_num,
  145. sum(year_recharge_amount) year_recharge_amount,
  146. sum(send_order_num) send_order_num,
  147. sum(real_send_order_num) real_send_order_num,
  148. sum(register_user_num) register_user_num,
  149. sum(first_recharge_user_num) first_recharge_user_num,
  150. sum(first_recharge_amount) first_recharge_amount
  151. ")
  152. ];
  153. return self::select($fields)->where('distribution_channel_id', $distribution_channel_id)->first();
  154. }
  155. /**
  156. * 获取昨日渠道汇总统计数据
  157. * @param int $distribution_channel_id 分销渠道ID
  158. */
  159. static function getYesterdaySumByChannelId($distribution_channel_id)
  160. {
  161. $fields = [
  162. DB::raw("sum(pay_success_user_num) pay_success_user_num,
  163. sum(total_recharge_amount) total_recharge_amount,
  164. sum(unpaid_num) unpaid_num,
  165. sum(paid_num) paid_num,
  166. sum(promotion_total_uv) promotion_total_uv,
  167. sum(promotion_total_pv) promotion_total_pv,
  168. sum(force_user_num) force_user_num,
  169. sum(ticket_recharge_user_num) ticket_recharge_user_num,
  170. sum(ticket_recharge_paid_num) ticket_recharge_paid_num,
  171. sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,
  172. sum(ticket_recharge_amount) ticket_recharge_amount,
  173. sum(year_recharge_user_num) year_recharge_user_num,
  174. sum(year_recharge_paid_num) year_recharge_paid_num,
  175. sum(year_recharge_unpaid_num) year_recharge_unpaid_num,
  176. sum(year_recharge_amount) year_recharge_amount,
  177. sum(send_order_num) send_order_num,
  178. sum(register_user_num) register_user_num,
  179. sum(first_recharge_user_num) first_recharge_user_num,
  180. sum(first_recharge_amount) first_recharge_amount
  181. ")
  182. ];
  183. $yesterday = date("Y-m-d",strtotime('-1 day'));
  184. return self::select($fields)->where('distribution_channel_id', $distribution_channel_id)->where('date','=',$yesterday)->first();
  185. }
  186. /**
  187. * 获取当月渠道汇总统计数据
  188. * @param int $distribution_channel_id 分销渠道ID
  189. */
  190. static function getCurrentMonthSumByChannelId($distribution_channel_id)
  191. {
  192. $fields = [
  193. DB::raw("sum(pay_success_user_num) pay_success_user_num,
  194. sum(total_recharge_amount) total_recharge_amount,
  195. sum(unpaid_num) unpaid_num,
  196. sum(paid_num) paid_num,
  197. sum(promotion_total_uv) promotion_total_uv,
  198. sum(promotion_total_pv) promotion_total_pv,
  199. sum(force_user_num) force_user_num,
  200. sum(ticket_recharge_user_num) ticket_recharge_user_num,
  201. sum(ticket_recharge_paid_num) ticket_recharge_paid_num,
  202. sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,
  203. sum(ticket_recharge_amount) ticket_recharge_amount,
  204. sum(year_recharge_user_num) year_recharge_user_num,
  205. sum(year_recharge_paid_num) year_recharge_paid_num,
  206. sum(year_recharge_unpaid_num) year_recharge_unpaid_num,
  207. sum(year_recharge_amount) year_recharge_amount,
  208. sum(send_order_num) send_order_num,
  209. sum(register_user_num) register_user_num,
  210. sum(first_recharge_user_num) first_recharge_user_num,
  211. sum(first_recharge_amount) first_recharge_amount
  212. ")
  213. ];
  214. $begin_date = date("Y-m").'-1';
  215. $end_date = date("Y-m",strtotime('+1 month')).'-1';
  216. return self::select($fields)->where('distribution_channel_id', $distribution_channel_id)
  217. ->where('date','>=',$begin_date)
  218. ->where('date','<',$end_date)
  219. ->first();
  220. }
  221. /**
  222. * 获取上月渠道汇总统计数据
  223. * @param int $distribution_channel_id 分销渠道ID
  224. */
  225. static function getLastMonthSumByChannelId($distribution_channel_id)
  226. {
  227. $fields = [
  228. DB::raw("sum(pay_success_user_num) pay_success_user_num,
  229. sum(total_recharge_amount) total_recharge_amount,
  230. sum(unpaid_num) unpaid_num,
  231. sum(paid_num) paid_num,
  232. sum(promotion_total_uv) promotion_total_uv,
  233. sum(promotion_total_pv) promotion_total_pv,
  234. sum(force_user_num) force_user_num,
  235. sum(ticket_recharge_user_num) ticket_recharge_user_num,
  236. sum(ticket_recharge_paid_num) ticket_recharge_paid_num,
  237. sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,
  238. sum(ticket_recharge_amount) ticket_recharge_amount,
  239. sum(year_recharge_user_num) year_recharge_user_num,
  240. sum(year_recharge_paid_num) year_recharge_paid_num,
  241. sum(year_recharge_unpaid_num) year_recharge_unpaid_num,
  242. sum(year_recharge_amount) year_recharge_amount,
  243. sum(send_order_num) send_order_num,
  244. sum(register_user_num) register_user_num,
  245. sum(first_recharge_user_num) first_recharge_user_num,
  246. sum(first_recharge_amount) first_recharge_amount
  247. ")
  248. ];
  249. $begin_date = date("Y-m",strtotime('-1 month')).'-01';
  250. $end_date = date("Y-m").'-01';
  251. return self::select($fields)->where('distribution_channel_id', $distribution_channel_id)
  252. ->where('date','>=',$begin_date)
  253. ->where('date','<',$end_date)
  254. ->first();
  255. }
  256. //根据渠道获取合计
  257. static function getStatByChannel($params)
  258. {
  259. $fields = [
  260. DB::raw("date,
  261. sum(pay_success_user_num) pay_success_user_num,
  262. sum(total_recharge_amount) total_recharge_amount,
  263. sum(unpaid_num) unpaid_num,
  264. sum(paid_num) paid_num,
  265. sum(promotion_total_uv) promotion_total_uv,
  266. sum(promotion_total_pv) promotion_total_pv,
  267. sum(force_user_num) force_user_num,
  268. sum(ticket_recharge_user_num) ticket_recharge_user_num,
  269. sum(ticket_recharge_paid_num) ticket_recharge_paid_num,
  270. sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,
  271. sum(ticket_recharge_amount) ticket_recharge_amount,
  272. sum(year_recharge_user_num) year_recharge_user_num,
  273. sum(year_recharge_paid_num) year_recharge_paid_num,
  274. sum(year_recharge_unpaid_num) year_recharge_unpaid_num,
  275. sum(year_recharge_amount) year_recharge_amount,
  276. sum(send_order_num) send_order_num,
  277. sum(real_send_order_num) real_send_order_num,
  278. sum(register_user_num) register_user_num,
  279. sum(real_register_user_num) real_register_user_num,
  280. sum(first_recharge_user_num) first_recharge_user_num,
  281. sum(first_recharge_amount) first_recharge_amount,
  282. sum(reg_user_first_recharge_amount) reg_user_first_recharge_amount,
  283. sum(reg_user_first_recharge_user_num) reg_user_first_recharge_user_num,
  284. sum(channel_merchant_recharge_amount) channel_merchant_recharge_amount
  285. ")
  286. ];
  287. $begin_time = $params['begin_time'];
  288. $end_time = $params['end_time'];
  289. return self::select($fields)
  290. ->where('date','>=',$begin_time)
  291. ->where('date','<=',$end_time)
  292. ->orderBy('date','desc')
  293. ->groupBy('date')
  294. ->get();
  295. }
  296. static function getAllGroupbyMonth()
  297. {
  298. $fields = [
  299. DB::raw("month,
  300. sum(pay_success_user_num) pay_success_user_num,
  301. sum(total_recharge_amount) total_recharge_amount,
  302. sum(unpaid_num) unpaid_num,
  303. sum(paid_num) paid_num,
  304. sum(promotion_total_uv) promotion_total_uv,
  305. sum(promotion_total_pv) promotion_total_pv,
  306. sum(force_user_num) force_user_num,
  307. sum(ticket_recharge_user_num) ticket_recharge_user_num,
  308. sum(ticket_recharge_paid_num) ticket_recharge_paid_num,
  309. sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,
  310. sum(ticket_recharge_amount) ticket_recharge_amount,
  311. sum(year_recharge_user_num) year_recharge_user_num,
  312. sum(year_recharge_paid_num) year_recharge_paid_num,
  313. sum(year_recharge_unpaid_num) year_recharge_unpaid_num,
  314. sum(year_recharge_amount) year_recharge_amount,
  315. sum(send_order_num) send_order_num,
  316. sum(real_send_order_num) real_send_order_num,
  317. sum(register_user_num) register_user_num,
  318. sum(real_register_user_num) real_register_user_num,
  319. sum(first_recharge_user_num) first_recharge_user_num,
  320. sum(first_recharge_amount) first_recharge_amount
  321. ")
  322. ];
  323. return self::select($fields)->groupBy('month')->orderBy('month','desc')->orderBy('total_recharge_amount','desc')->get();
  324. }
  325. static function getAllGroupbyMonthChannel($params=[],$is_all)
  326. {
  327. $fields = [
  328. DB::raw("month,
  329. distribution_channel_id,
  330. distribution_channel_name,
  331. sum(pay_success_user_num) pay_success_user_num,
  332. sum(total_recharge_amount) total_recharge_amount,
  333. sum(unpaid_num) unpaid_num,
  334. sum(paid_num) paid_num,
  335. sum(promotion_total_uv) promotion_total_uv,
  336. sum(promotion_total_pv) promotion_total_pv,
  337. sum(force_user_num) force_user_num,
  338. sum(ticket_recharge_user_num) ticket_recharge_user_num,
  339. sum(ticket_recharge_paid_num) ticket_recharge_paid_num,
  340. sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,
  341. sum(ticket_recharge_amount) ticket_recharge_amount,
  342. sum(year_recharge_user_num) year_recharge_user_num,
  343. sum(year_recharge_paid_num) year_recharge_paid_num,
  344. sum(year_recharge_unpaid_num) year_recharge_unpaid_num,
  345. sum(year_recharge_amount) year_recharge_amount,
  346. sum(send_order_num) send_order_num,
  347. sum(real_send_order_num) real_send_order_num,
  348. sum(register_user_num) register_user_num,
  349. sum(real_register_user_num) real_register_user_num,
  350. sum(first_recharge_user_num) first_recharge_user_num,
  351. sum(first_recharge_amount) first_recharge_amount,
  352. sum(fee) as fee,
  353. sum(charge_balance) as charge_balance,
  354. sum(reward_balance) as reward_balance
  355. ")
  356. ];
  357. $search_obj = self::select($fields);
  358. if(isset($params['month']) && $params['month']) $search_obj->where('month',$params['month']);
  359. if(isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('distribution_channel_id',$params['distribution_channel_id']);
  360. if(isset($params['distribution_channel_name']) && $params['distribution_channel_name']) $search_obj->where('distribution_channel_name',$params['distribution_channel_name']);
  361. $search_obj->groupBy(['month','distribution_channel_id'])->orderBy('month','desc')->orderBy('total_recharge_amount','desc');
  362. if($is_all)
  363. {
  364. return $search_obj->get();
  365. }else{
  366. return $search_obj->paginate();
  367. }
  368. }
  369. static function getOutPayData($params = [], $isAll = false) {
  370. //渠道方通道充值总额
  371. $not_in_pay_merchant_ids = env('not_in_pay_merchant_id');
  372. $sqlObj = self::select('order_day_stats.distribution_channel_id',
  373. 'order_day_stats.distribution_channel_name',
  374. 'order_day_stats.month',
  375. 'order_day_stats.date',
  376. 'order_day_stats.channel_merchant_recharge_amount',
  377. 'distribution_channels.pay_merchant_id'
  378. )
  379. ->leftjoin('distribution_channels','distribution_channels.id','=','order_day_stats.distribution_channel_id')
  380. ->where('order_day_stats.channel_merchant_recharge_amount' , '>', 0)
  381. ->orderBy('order_day_stats.date', 'desc');
  382. if(isset($params['distribution_channel_id']) && $params['distribution_channel_id']) {
  383. $sqlObj->where('order_day_stats.distribution_channel_id', $params['distribution_channel_id']);
  384. }
  385. if(isset($params['distribution_channel_name']) && $params['distribution_channel_name']) {
  386. $sqlObj->where('order_day_stats.distribution_channel_name', 'like' , '%'.$params['distribution_channel_name'].'%');
  387. }
  388. if(isset($params['start_date']) && $params['start_date']) {
  389. $sqlObj->where('order_day_stats.date', '>=', $params['start_date']);
  390. }
  391. if(isset($params['end_date']) && $params['end_date']) {
  392. $sqlObj->where('order_day_stats.date', '<=', $params['end_date']);
  393. }
  394. if($isAll)
  395. {
  396. return $sqlObj->get();
  397. }else{
  398. return $sqlObj->paginate();
  399. }
  400. }
  401. static function getRechargeByChannels($distribution_channels,$time_range) {
  402. $obj = self::whereIn('distribution_channel_id',$distribution_channels);
  403. if($time_range['begin_time']){
  404. $obj->where('date','>=',$time_range['begin_time']);
  405. }
  406. if($time_range['end_time']){
  407. $obj->where('date','<=',$time_range['end_time']);
  408. }
  409. return $obj->sum('total_recharge_amount');
  410. }
  411. }