BusinessChannelStat.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: tandunzhao
  5. * Date: 2017/12/26
  6. * Time: 下午3:21
  7. */
  8. namespace App\Modules\Channel\Models;
  9. use Illuminate\Database\Eloquent\Model;
  10. use DB;
  11. /**
  12. * 商务渠道数据统计
  13. * Class BusinessChannelStat
  14. * @package App\Modules\Channel\Models
  15. */
  16. class BusinessChannelStat extends Model
  17. {
  18. protected $table = 'business_channel_stats';
  19. protected $fillable = ['distribution_channel_id', 'yesterday_register_user_num', 'current_month_register_user_num', 'last_month_register_user_num', 'total_register_user_num', 'total_send_order_num',
  20. 'service_account_num','last_week_login_days','current_week_login_days','last_week_actual_send_orders','current_week_actual_send_orders','yesterday_create_orders','is_login_yesterday',
  21. 'current_month_new_channels_recharge','current_month_channels_recharge','last_month_channels_recharge','channel_total_recharge','last_month_new_channel_recharge'];
  22. public static function getByChannelID($channel_id)
  23. {
  24. return self::where('distribution_channel_id',$channel_id)->first();
  25. }
  26. /**
  27. * @param $channel_id
  28. * @param $params [yesterday_register_user_num, current_month_register_user_num,last_month_register_user_num,total_register_user_num,total_send_order_num]
  29. * @return mixed
  30. */
  31. public static function crateUpdate($channel_id, $params) {
  32. $emptyData = false;
  33. $data = self::where('distribution_channel_id', $channel_id)->first();
  34. if(empty($data)) {
  35. $emptyData = true;
  36. }
  37. $data['distribution_channel_id'] = $channel_id;
  38. if(isset($params['yesterday_register_user_num']) && is_numeric($params['yesterday_register_user_num'])) {
  39. $data['yesterday_register_user_num'] = $params['yesterday_register_user_num'];
  40. }
  41. if(isset($params['current_month_register_user_num']) && is_numeric($params['current_month_register_user_num'])) {
  42. $data['current_month_register_user_num'] = $params['current_month_register_user_num'];
  43. }
  44. if(isset($params['last_month_register_user_num']) && is_numeric($params['last_month_register_user_num'])) {
  45. $data['last_month_register_user_num'] = $params['last_month_register_user_num'];
  46. }
  47. if(isset($params['total_register_user_num']) && is_numeric($params['total_register_user_num'])) {
  48. $data['total_register_user_num'] = $params['total_register_user_num'];
  49. }
  50. if(isset($params['total_send_order_num']) && is_numeric($params['total_send_order_num'])) {
  51. $data['total_send_order_num'] = $params['total_send_order_num'];
  52. }
  53. if(isset($params['service_account_num']) && $params['service_account_num']) {
  54. $data['service_account_num'] = intval($params['service_account_num']);
  55. }
  56. if(isset($params['last_week_login_days']) && $params['last_week_login_days']) {
  57. $data['last_week_login_days'] = intval($params['last_week_login_days']);
  58. }
  59. if(isset($params['current_week_login_days']) && $params['current_week_login_days']) {
  60. $data['current_week_login_days'] = intval($params['current_week_login_days']);
  61. }
  62. if(isset($params['current_week_actual_send_orders']) && $params['current_week_actual_send_orders']) {
  63. $data['current_week_actual_send_orders'] = intval($params['current_week_actual_send_orders']);
  64. }
  65. if(isset($params['yesterday_create_orders']) && $params['yesterday_create_orders']) {
  66. $data['yesterday_create_orders'] = intval($params['yesterday_create_orders']);
  67. }
  68. if(isset($params['is_login_yesterday']) && $params['is_login_yesterday']) {
  69. $data['is_login_yesterday'] = intval($params['is_login_yesterday']);
  70. }
  71. if(isset($params['current_month_new_channels_recharge']) && is_numeric($params['current_month_new_channels_recharge'])) {
  72. $data['current_month_new_channels_recharge'] = $params['current_month_new_channels_recharge'];
  73. }
  74. if(isset($params['current_month_channels_recharge']) && is_numeric($params['current_month_channels_recharge'])) {
  75. $data['current_month_channels_recharge'] = $params['current_month_channels_recharge'];
  76. }
  77. if(isset($params['last_month_channels_recharge']) && is_numeric($params['last_month_channels_recharge'])) {
  78. $data['last_month_channels_recharge'] = $params['last_month_channels_recharge'];
  79. }
  80. if(isset($params['last_month_new_channel_recharge']) && is_numeric($params['last_month_new_channel_recharge'])) {
  81. $data['last_month_new_channel_recharge'] = $params['last_month_new_channel_recharge'];
  82. }
  83. if(isset($params['channel_total_recharge']) && is_numeric($params['channel_total_recharge'])) {
  84. $data['channel_total_recharge'] = $params['channel_total_recharge'];
  85. }
  86. if($emptyData) {
  87. $data = BusinessChannelStat::create($data);
  88. } else {
  89. $data->save();
  90. }
  91. return $data;
  92. }
  93. /**
  94. * 商务渠道数据统计列表
  95. * @param $params[]
  96. * channel_id:渠道ID 可选
  97. * channel_name:渠道名称 可选
  98. * search_name: 搜索名称
  99. * start_date:开始时间 可选
  100. * end_date:结束时间 可选
  101. * is_enabled: 是否开通 0:未审核; 1:审核通过
  102. * distribution_manages_id: 管理员 可选
  103. * yesterday_register_user_num_sort: 0 1
  104. * current_month_register_user_num_sort: 0 1
  105. * last_month_register_user_num_sort: 0 1
  106. * total_register_user_num_sort: 0 1
  107. * total_send_order_num_sort: 0 1
  108. *
  109. * @param string $isAll
  110. * @return mixed
  111. */
  112. public static function getList($params, $isAll = '') {
  113. $search_object = Channel::select([
  114. 'distribution_channels.id',
  115. 'distribution_channels.name',
  116. 'distribution_channels.pay_merchant_id',
  117. 'distribution_channels.phone',
  118. 'distribution_channels.nickname',
  119. 'distribution_channels.person_in_charge_name',
  120. 'distribution_channels.latest_login_time',
  121. 'distribution_channels.remark',
  122. 'distribution_channels.latest_login_ip',
  123. 'distribution_channels.password',
  124. 'distribution_channels.register_ip',
  125. 'distribution_channels.is_enabled',
  126. 'distribution_channels.distribution_manages_id',
  127. 'distribution_channels.created_at',
  128. 'distribution_manages.account as distribution_manages_account',
  129. 'distribution_manages.number as distribution_manages_number',
  130. 'distribution_manages.nickname as distribution_manages_nickname',
  131. 'business_channel_stats.yesterday_register_user_num as business_channel_stats_yesterday_register_user_num',
  132. 'business_channel_stats.current_month_register_user_num as business_channel_stats_current_month_register_user_num',
  133. 'business_channel_stats.last_month_register_user_num as business_channel_stats_last_month_register_user_num',
  134. // 'business_channel_stats.total_register_user_num as business_channel_stats_total_register_user_num',
  135. 'business_channel_stats.total_send_order_num as business_channel_stats_total_send_order_num',
  136. ])
  137. ->leftjoin('distribution_manages','distribution_manages.id','=','distribution_channels.distribution_manages_id')
  138. ->leftjoin('business_channel_stats','business_channel_stats.distribution_channel_id','=','distribution_channels.id');
  139. $search_object->where(function ($query) use($params) {
  140. $query->where('distribution_manages.role', 'business')
  141. ->orWhereNull('distribution_manages.role');
  142. });
  143. if(isset($params['channel_id']) && $params['channel_id']) $search_object->where('distribution_channels.id', $params['channel_id']);
  144. if(isset($params['channel_name']) && $params['channel_name']) $search_object->where('distribution_channels.name','like', "%".$params['channel_name']."%");
  145. if(isset($params['search_name']) && $params['search_name']) {
  146. $search_object->where(function ($query) use($params) {
  147. $query->where('distribution_channels.name','like', "%".$params['search_name']."%")
  148. ->orWhere('distribution_channels.nickname', 'like', "%".$params['search_name']."%")
  149. ->orWhere('distribution_channels.person_in_charge_name', 'like', "%".$params['search_name']."%");
  150. });
  151. }
  152. if(isset($params['start_date']) && $params['start_date']) $search_object->where('distribution_channels.created_at','>=', $params['start_date']);
  153. if(isset($params['end_date']) && $params['end_date']) $search_object->where('distribution_channels.created_at','<=', $params['end_date']);
  154. if(isset($params['is_enabled']) && is_numeric($params['is_enabled'])) {
  155. $search_object->where('distribution_channels.is_enabled', $params['is_enabled']);
  156. }
  157. if(isset($params['distribution_manages_id']) && is_numeric($params['distribution_manages_id'])) {
  158. $search_object->where('distribution_channels.distribution_manages_id', $params['distribution_manages_id']);
  159. }
  160. if(isset($params['yesterday_register_user_num_sort']) && is_numeric($params['yesterday_register_user_num_sort'])) {
  161. if($params['yesterday_register_user_num_sort'] == 1) {
  162. $search_object->orderBy('business_channel_stats.yesterday_register_user_num','desc');
  163. } else {
  164. $search_object->orderBy('business_channel_stats.yesterday_register_user_num','asc');
  165. }
  166. }
  167. if(isset($params['current_month_register_user_num_sort']) && is_numeric($params['current_month_register_user_num_sort'])) {
  168. if($params['current_month_register_user_num_sort'] == 1) {
  169. $search_object->orderBy('business_channel_stats.current_month_register_user_num','desc');
  170. } else {
  171. $search_object->orderBy('business_channel_stats.current_month_register_user_num','asc');
  172. }
  173. }
  174. if(isset($params['last_month_register_user_num_sort']) && is_numeric($params['last_month_register_user_num_sort'])) {
  175. if($params['last_month_register_user_num_sort'] == 1) {
  176. $search_object->orderBy('business_channel_stats.last_month_register_user_num','desc');
  177. } else {
  178. $search_object->orderBy('business_channel_stats.last_month_register_user_num','asc');
  179. }
  180. }
  181. if(isset($params['total_register_user_num_sort']) && is_numeric($params['total_register_user_num_sort'])) {
  182. if($params['total_register_user_num_sort'] == 1) {
  183. $search_object->orderBy('business_channel_stats.total_register_user_num','desc');
  184. } else {
  185. $search_object->orderBy('business_channel_stats.total_register_user_num','asc');
  186. }
  187. }
  188. if(isset($params['total_send_order_num_sort']) && is_numeric($params['total_send_order_num_sort'])) {
  189. if($params['total_send_order_num_sort'] == 1) {
  190. $search_object->orderBy('business_channel_stats.total_send_order_num','desc');
  191. } else {
  192. $search_object->orderBy('business_channel_stats.total_send_order_num','asc');
  193. }
  194. }
  195. if($isAll) {
  196. return $search_object->get();
  197. } else {
  198. return $search_object->paginate();
  199. }
  200. }
  201. /**
  202. * 获取指定渠道列表汇总
  203. * @param array $channelIds
  204. * @return mixed
  205. */
  206. public static function getBusinessChannelStatSingle($channelIds=[]) {
  207. $search_object = self::select(
  208. DB::raw('sum(yesterday_register_user_num) as yesterday_register_user_num'),
  209. DB::raw('sum(current_month_register_user_num) as current_month_register_user_num'),
  210. DB::raw('sum(last_month_register_user_num) as last_month_register_user_num'),
  211. DB::raw('sum(total_register_user_num) as total_register_user_num'),
  212. DB::raw('sum(total_send_order_num) as total_send_order_num'),
  213. DB::raw('sum(current_month_new_channels_recharge) as current_month_new_channels_recharge_sum'),
  214. DB::raw('sum(current_month_channels_recharge) as current_month_channels_recharge_sum'),
  215. DB::raw('sum(last_month_channels_recharge) as last_month_channels_recharge_sum'),
  216. DB::raw('sum(last_month_new_channel_recharge) as last_month_new_channels_recharge_sum')
  217. );
  218. $search_object->whereIn('business_channel_stats.distribution_channel_id', $channelIds);
  219. return $search_object->first();
  220. }
  221. /**
  222. * @param $params
  223. * @param string $isAll
  224. */
  225. public static function getListNew($params, $isAll = '') {
  226. $search_object = Channel::select(DB::raw('channel_users.company_id,
  227. distribution_manages.nickname as manage_name,
  228. companies.city as city,
  229. sum(business_channel_stats.yesterday_register_user_num) as business_channel_stats_yesterday_register_user_num,
  230. sum(business_channel_stats.current_month_register_user_num) as business_channel_stats_current_month_register_user_num,
  231. sum(business_channel_stats.last_month_register_user_num) as business_channel_stats_last_month_register_user_num,
  232. sum(business_channel_stats.total_send_order_num) as business_channel_stats_total_send_order_num,
  233. sum(business_channel_stats.service_account_num) as service_account_sum,
  234. sum(business_channel_stats.last_week_actual_send_orders) as last_week_actual_send_orders_sum,
  235. sum(business_channel_stats.current_week_actual_send_orders) as current_week_actual_send_orders_sum,
  236. sum(business_channel_stats.yesterday_create_orders) as yesterday_create_orders_sum,
  237. max(business_channel_stats.last_week_login_days) as last_week_login_day_sum,
  238. max(business_channel_stats.current_week_login_days) as current_week_login_days_sum,
  239. max(business_channel_stats.is_login_yesterday) as is_yesterday_login,
  240. sum(business_channel_stats.last_month_channels_recharge) as last_month_channel_recharge_sum'))
  241. ->leftjoin('channel_users','channel_users.id','=','distribution_channels.channel_user_id')
  242. ->leftjoin('companies','channel_users.company_id','=','companies.id')
  243. ->leftjoin('distribution_manages','distribution_manages.id','=','channel_users.distribution_manages_id')
  244. ->leftjoin('business_channel_stats','business_channel_stats.distribution_channel_id','=','distribution_channels.id')
  245. ->groupBy('channel_users.company_id')
  246. ->whereNotNull('channel_users.company_id');
  247. /*$search_object->where(function ($query) use($params) {
  248. $query->where('distribution_manages.role', 'business')
  249. ->orWhereNull('distribution_manages.role');
  250. });*/
  251. if(isset($params['company_id']) && $params['company_id']) $search_object->where('companies.id', $params['company_id']);
  252. if(isset($params['company_name']) && $params['company_name']) $search_object->where('companies.name','like', "%".$params['company_name']."%");
  253. if(isset($params['manager_name']) && $params['manager_name']){
  254. $search_object->where('distribution_manages.nickname','like', "%".$params['manager_name']."%");
  255. }
  256. if(isset($params['search_name']) && $params['search_name']) {
  257. $search_object->where(function ($query) use($params) {
  258. $query->where('distribution_channels.name','like', "%".$params['search_name']."%")
  259. ->orWhere('distribution_channels.nickname', 'like', "%".$params['search_name']."%")
  260. ->orWhere('distribution_channels.person_in_charge_name', 'like', "%".$params['search_name']."%");
  261. });
  262. }
  263. if(isset($params['start_date']) && $params['start_date']) $search_object->where('distribution_channels.created_at','>=', $params['start_date']);
  264. if(isset($params['end_date']) && $params['end_date']) $search_object->where('distribution_channels.created_at','<=', $params['end_date']);
  265. if(isset($params['is_enabled']) && is_numeric($params['is_enabled'])) {
  266. $search_object->where('distribution_channels.is_enabled', $params['is_enabled']);
  267. }
  268. if(isset($params['distribution_manages_id']) && is_numeric($params['distribution_manages_id'])) {
  269. $search_object->where('distribution_manages.id', $params['distribution_manages_id']);
  270. }
  271. if(isset($params['yesterday_register_user_num_sort']) && is_numeric($params['yesterday_register_user_num_sort'])) {
  272. if($params['yesterday_register_user_num_sort'] == 1) {
  273. $search_object->orderBy('business_channel_stats.yesterday_register_user_num','desc');
  274. } else {
  275. $search_object->orderBy('business_channel_stats.yesterday_register_user_num','asc');
  276. }
  277. }
  278. if(isset($params['current_month_register_user_num_sort']) && is_numeric($params['current_month_register_user_num_sort'])) {
  279. if($params['current_month_register_user_num_sort'] == 1) {
  280. $search_object->orderBy('business_channel_stats.current_month_register_user_num','desc');
  281. } else {
  282. $search_object->orderBy('business_channel_stats.current_month_register_user_num','asc');
  283. }
  284. }
  285. if(isset($params['last_month_register_user_num_sort']) && is_numeric($params['last_month_register_user_num_sort'])) {
  286. if($params['last_month_register_user_num_sort'] == 1) {
  287. $search_object->orderBy('business_channel_stats.last_month_register_user_num','desc');
  288. } else {
  289. $search_object->orderBy('business_channel_stats.last_month_register_user_num','asc');
  290. }
  291. }
  292. if(isset($params['total_register_user_num_sort']) && is_numeric($params['total_register_user_num_sort'])) {
  293. if($params['total_register_user_num_sort'] == 1) {
  294. $search_object->orderBy('business_channel_stats.total_register_user_num','desc');
  295. } else {
  296. $search_object->orderBy('business_channel_stats.total_register_user_num','asc');
  297. }
  298. }
  299. if(isset($params['total_send_order_num_sort']) && is_numeric($params['total_send_order_num_sort'])) {
  300. if($params['total_send_order_num_sort'] == 1) {
  301. $search_object->orderBy('business_channel_stats.total_send_order_num','desc');
  302. } else {
  303. $search_object->orderBy('business_channel_stats.total_send_order_num','asc');
  304. }
  305. }
  306. if($isAll) {
  307. return $search_object->get();
  308. } else {
  309. return $search_object->paginate();
  310. }
  311. }
  312. public static function getNewAddedCompaniesNum($start_time,$end_time,$channelIds) {
  313. $res = DB::table('companies')
  314. ->leftjoin('channel_users','channel_users.company_id','=','companies.id')
  315. ->leftjoin('distribution_channels','distribution_channels.channel_user_id','=','channel_users.id')
  316. ->where([
  317. ['companies.created_at','>=',$start_time],
  318. ['companies.created_at','<=',$end_time]
  319. ]);
  320. if($channelIds){
  321. $res->whereIn('distribution_channels.id',$channelIds);
  322. }
  323. return $res->count(DB::raw('distinct companies.id'));
  324. }
  325. public static function getNewwAddedChannelNum($start_time,$end_time,$channelIds='') {
  326. $res = DB::table('distribution_channels')
  327. //->leftjoin('channel_users','channel_users.id','=','distribution_user_id')
  328. ->where([
  329. ['created_at','>=',$start_time],
  330. ['created_at','<=',$end_time]
  331. ]);
  332. if($channelIds) {
  333. $res->whereIn('id',$channelIds);
  334. }
  335. return $res->count('id');
  336. }
  337. }