BusinessChannelStat.php 19 KB

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