HomeController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. <?php
  2. namespace App\Http\Controllers\Statistics;
  3. use App\Http\Controllers\Statistics\StatisticsBaseController;
  4. use Illuminate\Support\Facades\Auth;
  5. use App\Services\Statistics\CompanyService;
  6. use App\Services\Statistics\MemberService;
  7. use App\Services\Statistics\JobsService;
  8. use App\Services\Statistics\ResumeService;
  9. use App\Services\Statistics\JobfairService;
  10. use App\Services\Statistics\CompanyDownResumeService;
  11. use App\Services\SubsiteService;
  12. class HomeController extends StatisticsBaseController
  13. {
  14. protected $companyService;
  15. protected $memberService;
  16. protected $jobsService;
  17. protected $resumeService;
  18. protected $jobfairService;
  19. protected $companyDownResumeService;
  20. /**
  21. * HomeController constructor.
  22. */
  23. public function __construct(CompanyService $companyService, MemberService $memberService, JobsService $jobsService, ResumeService $resumeService, JobfairService $jobfairService, CompanyDownResumeService $companyDownResumeService, SubsiteService $subsiteService)
  24. {
  25. $this->companyService = $companyService;
  26. $this->memberService = $memberService;
  27. $this->jobsService = $jobsService;
  28. $this->resumeService = $resumeService;
  29. $this->jobfairService = $jobfairService;
  30. $this->companyDownResumeService = $companyDownResumeService;
  31. $this->subsiteService = $subsiteService;
  32. }
  33. public function index()
  34. {
  35. //分站信息
  36. $subsite_id = session('caiqing_susbite_id');
  37. if ($subsite_id === null) {
  38. $subsite_id = -1;
  39. }
  40. //本周起始时间
  41. $now_week_where = array();
  42. $sdefaultDate = date("Y-m-d");
  43. $first=1;
  44. $w=date('w', strtotime($sdefaultDate));
  45. $week_start=date('Y-m-d H:i:s', strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days'));
  46. $week_end = date('Y-m-d H:i:s', strtotime("$week_start +7 days")-1);
  47. //上周起始时间
  48. $prevweek_start = date('Y-m-d H:i:s', strtotime("$week_start -7 days"));
  49. $prevweek_end = date('Y-m-d H:i:s', strtotime("$prevweek_start +7 days")-1);
  50. //本月起始时间
  51. $month_start=date('Y-m-d H:i:s', mktime(0, 0, 0, date('m'), 1, date('Y')));
  52. $month_send=date('Y-m-d H:i:s', mktime(23, 59, 59, date('m'), date('t'), date('Y')));
  53. $days = (int)date('j', time());
  54. //获取上月相同时间段
  55. $last_firstday = date('Y-m-01 H:i:s', strtotime("-1 month", strtotime($month_start))); //上月第一天
  56. $last_moreday = date('Y-m-d H:i:s', strtotime($last_firstday.'+'.$days.' days')-1); //上月第N天
  57. //本周活跃企业数(登录、刷新)
  58. $week_where = array(
  59. ['utype','=',1],
  60. ['user_status','=',1]
  61. );
  62. if ($subsite_id != -1) {
  63. $week_where[] = ['subsite_id','=',$subsite_id];
  64. }
  65. $week_where['time_condition'] = [$week_start, $week_end];
  66. $week_companies = $this->companyService->getCompanyNums($week_where);
  67. //上周活跃企业数
  68. $prevweek_where = $week_where;
  69. $prevweek_where['time_condition'] = [$prevweek_start, $prevweek_end];
  70. $prevweek_companies = $this->companyService->getCompanyNums($prevweek_where);
  71. //本月活跃企业数
  72. $month_where = $week_where;
  73. $month_where['time_condition'] = [$month_start, $month_send];
  74. $month_companies = $this->companyService->getCompanyNums($month_where);
  75. //活跃企业数比较
  76. $company_flag = 0;
  77. if ($prevweek_companies > $week_companies) {
  78. $company_flag = -1;
  79. } elseif ($prevweek_companies == $week_companies) {
  80. $company_flag = 0;
  81. } else {
  82. $company_flag = 1;
  83. }
  84. $company_gap = abs($week_companies - $prevweek_companies);
  85. //本周活跃个人数
  86. $week_person_where = array(
  87. ['utype','=',2],
  88. ['status','=',1]
  89. );
  90. if ($subsite_id != -1) {
  91. $week_person_where[] = ['subsite_id','=',$subsite_id];
  92. }
  93. $week_person_where['time_condition'] = [$week_start, $week_end];
  94. $week_persons = $this->memberService->getMemberNums($week_person_where);
  95. //上周活跃个人数
  96. $prevweek_person_where= $week_person_where;
  97. $prevweek_person_where['time_condition'] = [$prevweek_start, $prevweek_end];
  98. $prevweek_persons = $this->memberService->getMemberNums($prevweek_person_where);
  99. //本月活跃个人数
  100. $month_person_where= $week_person_where;
  101. $month_person_where['time_condition'] = [$month_start, $month_send];
  102. $month_persons = $this->memberService->getMemberNums($month_person_where);
  103. //活跃企业数比较
  104. $person_flag = 0;
  105. if ($prevweek_persons > $week_persons) {
  106. $person_flag = -1;
  107. } elseif ($prevweek_persons < $week_persons) {
  108. $person_flag = 1;
  109. }
  110. $person_gap = abs($week_persons - $prevweek_persons);
  111. //当前有效岗位数
  112. $job_where = array(
  113. array('valid','=','1'),
  114. array('display','=',1)
  115. );
  116. if (config('aix.companyset.comset.show_set.jobs_display')==1) {
  117. $job_where[] = array('audit','=',1);
  118. } else {
  119. $job_where[] = array('audit','<>',3);
  120. }
  121. if ($subsite_id != -1) {
  122. $job_where[] = array('subsite_id','=',$subsite_id);
  123. }
  124. $job_num = $this->jobsService->getValidJobNum($job_where);
  125. $prev_job_where = $job_where;
  126. $prev_job_where[] = array('created_at','>=',$last_firstday);
  127. $prev_job_where[] = array('created_at','<=',$last_moreday);
  128. $prev_job_num = $this->jobsService->getValidJobNum($prev_job_where);
  129. $more_job_num = $prev_job_num - $job_num;
  130. $more_flag = 'down';
  131. if ($job_num > $prev_job_num) {
  132. $more_job_num = $job_num - $prev_job_num;
  133. $more_flag = 'up';
  134. } elseif ($job_num == $prev_job_num) {
  135. $more_flag = 'balance';
  136. } else {
  137. $more_flag = 'down';
  138. }
  139. $more_job_rate = 100;
  140. if ($prev_job_num>0) {
  141. $more_job_rate = sprintf("%.4f", $more_job_num/$prev_job_num)*100;
  142. }
  143. //当前有效简历数
  144. if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
  145. $resume_where[] = array('audit','=','2');
  146. } else {
  147. $resume_where[] = array('audit','<>','0');
  148. }
  149. if ($subsite_id != -1) {
  150. $resume_where[] = ['subsite_id', '=',$subsite_id];
  151. }
  152. $resume_num = $this->resumeService->getValidResumeNum($resume_where);
  153. $prev_resume_where = $resume_where;
  154. $prev_resume_where[] = array('created_at','>=',$last_firstday);
  155. $prev_resume_where[] = array('created_at','<=',$last_moreday);
  156. $prev_resume_num = $this->resumeService->getValidResumeNum($prev_resume_where);
  157. $more_resume_num = $prev_resume_num - $resume_num;
  158. $more_resume_flag = 'down';
  159. if ($resume_num > $prev_resume_num) {
  160. $more_resume_num = $resume_num - $prev_resume_num;
  161. $more_resume_flag = 'up';
  162. } elseif ($resume_num == $prev_resume_num) {
  163. $more_resume_flag = 'balance';
  164. } else {
  165. $more_resume_flag = 'down';
  166. }
  167. $more_resume_rate = 100;
  168. if ($prev_resume_num>0) {
  169. $more_resume_rate = sprintf("%.4f", $more_resume_num/$prev_resume_num)*100;
  170. }
  171. $company_where = array(array('utype','=',1),array('audit','=',1));
  172. if ($subsite_id !='-1') {
  173. $company_where[] = array('subsite_id','=',$subsite_id);
  174. }
  175. //现场招聘会数据(举办结束时间小于当前时间的招聘会)
  176. $jobfair_where[] = array('holddate_end','<', time());
  177. if ($subsite_id != -1) {
  178. $jobfair_where['subsite_id'] = $subsite_id;
  179. }
  180. $jobfair_bum = $this->jobfairService->getJobfairNum($jobfair_where);
  181. //累计进场人数(个人签到数量)
  182. $jobfair_visitor_num = $this->jobfairService->getJobfairVisitorNum(['type'=>1]);
  183. //近30天供求趋势(当前时间往前推一个月之间的职位发布、简历发布、下载简历、投递职位数量)
  184. //近一个月的起始时间
  185. $month_etime = date("Y-m-d H:i:s", strtotime(date("Y-m-d", strtotime("+1 day")))-1);
  186. $month_stime = date("Y-m-d H:i:s", strtotime(date("Y-m-d", strtotime("-29 day"))));
  187. $group_by = 'DATE(created_at)';
  188. //获取职位发布数量(统计发布时间在当前30天、有效职位)
  189. $job_where = [
  190. ['created_at', '<=', $month_etime],
  191. ['created_at', '>=', $month_stime],
  192. ['valid','=',1],
  193. ['display','=',1],
  194. ];
  195. if (config('aix.companyset.comset.show_set.jobs_display')==1) {
  196. $job_where[] = array('audit','=',1);
  197. } else {
  198. $job_where[] = array('audit','<>',3);
  199. }
  200. if ($subsite_id != -1) {
  201. $job_where['subsite_id'] = $subsite_id;
  202. }
  203. $job_nums = $this->jobsService->getJobNumGroup($job_where, $company_where, $group_by);
  204. //获取简历发布数量(统计发布时间在当前30天、有效简历)
  205. $resume_where = [
  206. ['created_at', '<=', $month_etime],
  207. ['created_at', '>=', $month_stime],
  208. ];
  209. if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
  210. $resume_where[] = array('audit','=','2');
  211. } else {
  212. $resume_where[] = array('audit','<>','0');
  213. }
  214. if ($subsite_id != -1) {
  215. $resume_where['subsite_id'] = $subsite_id;
  216. }
  217. $resume_nums = $this->resumeService->getResumeNumGroup($resume_where, $group_by);
  218. //获取下载简历数
  219. $down_where = [
  220. ['created_at', '<=', $month_etime],
  221. ['created_at', '>=', $month_stime]
  222. ];
  223. $down_resume_nums = $this->companyDownResumeService->getResumeNumGroup($down_where, $group_by, $subsite_id);
  224. //获取投递职位数量
  225. $apply_where = [
  226. ['created_at', '<=', $month_etime],
  227. ['created_at', '>=', $month_stime]
  228. ];
  229. $apply_nums = $this->resumeService->getApplyNumGroup($apply_where, $group_by, $subsite_id);
  230. //处理数据显示
  231. $start_date = date("Y-m-d", strtotime(date("Y-m-d", strtotime("-29 day"))));
  232. $end_date = date("Y-m-d", strtotime(date("Y-m-d", strtotime("+1 day")))-1);
  233. $date_arr = [];
  234. for ($i=0; $i<30; $i++) {
  235. $date_arr[] = $start_date;
  236. if (!array_has($job_nums, $start_date)) {
  237. $job_nums[$start_date] = 0;
  238. }
  239. if (!array_has($resume_nums, $start_date)) {
  240. $resume_nums[$start_date] = 0;
  241. }
  242. if (!array_has($apply_nums, $start_date)) {
  243. $apply_nums[$start_date] = 0;
  244. }
  245. if (!array_has($down_resume_nums, $start_date)) {
  246. $down_resume_nums[$start_date] = 0;
  247. }
  248. $start_date = date("Y-m-d", strtotime($start_date)+3600*24);
  249. }
  250. ksort($job_nums);
  251. ksort($resume_nums);
  252. ksort($down_resume_nums);
  253. ksort($apply_nums);
  254. $return_data = array(
  255. 'week_companies' => $week_companies,
  256. 'prevweek_companies' => $prevweek_companies,
  257. 'month_companies' => $month_companies,
  258. 'company_flag' => $company_flag,
  259. 'company_gap' => $company_gap,
  260. 'week_persons' => $week_persons,
  261. 'prevweek_persons' => $prevweek_persons,
  262. 'month_persons' => $month_persons,
  263. 'person_flag' => $person_flag,
  264. 'person_gap' => $person_gap,
  265. 'job_num' => $job_num,
  266. 'more_job_rate' => $more_job_rate,
  267. 'more_flag' => $more_flag,
  268. 'resume_num' => $resume_num,
  269. 'more_resume_flag' => $more_resume_flag,
  270. 'more_resume_rate' => $more_resume_rate,
  271. 'jobfair_bum' => $jobfair_bum,
  272. 'jobfair_visitor_num' => $jobfair_visitor_num,
  273. 'job_nums' => $job_nums,
  274. 'resume_nums' => $resume_nums,
  275. 'down_resume_nums' => $down_resume_nums,
  276. 'apply_nums' => $apply_nums,
  277. 'date_arr' => $date_arr
  278. );
  279. return view('statistics.app.index', $return_data);
  280. }
  281. }