OrderDayStat.php 22 KB

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