HomeController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <?php
  2. namespace App\Admin\Controllers;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Admin\AdminRole;
  5. use App\Models\Appeal;
  6. use App\Models\Category;
  7. use App\Models\PersonalJobsApply;
  8. use App\Models\RefreshLog;
  9. use App\Repositories\AppealRepository;
  10. use App\Repositories\CompanyImgRepository;
  11. use App\Repositories\CompanyRepository;
  12. use App\Repositories\FeedbackRepository;
  13. use App\Repositories\Jobfair\JobfairCompanyRepository;
  14. use App\Repositories\Jobfair\JobfairJobRepository;
  15. use App\Repositories\Jobfairout\JobfairoutCompanyRepository;
  16. use App\Repositories\JobsRepository;
  17. use App\Repositories\MemberInfoRepository;
  18. use App\Repositories\MemberRepository;
  19. use App\Repositories\ReportRepository;
  20. use App\Repositories\ResumeImgRepository;
  21. use App\Repositories\ResumeRepository;
  22. use Encore\Admin\Facades\Admin;
  23. use Encore\Admin\Layout\Content;
  24. use Illuminate\Support\Facades\DB;
  25. class HomeController extends Controller
  26. {
  27. protected $where = [];
  28. public function __construct()
  29. {
  30. if (get_subsite_id()!=0) {
  31. $this->where[] = array('subsite_id','=',get_subsite_id());
  32. }
  33. }
  34. public function index(
  35. Content $content,
  36. CompanyRepository $companyRepository,
  37. MemberRepository $memberRepository,
  38. JobsRepository $jobsRepository,
  39. ResumeRepository $resumeRepository,
  40. ResumeImgRepository $resumeImgRepository,
  41. FeedbackRepository $feedbackRepository,
  42. ReportRepository $reportRepository
  43. ) {
  44. return $content
  45. ->header('首页')
  46. ->description('统计列表')
  47. ->body(view('admin.home.index')->with([
  48. 'company'=>$this->company($companyRepository, $this->where),
  49. 'person'=>$this->person($memberRepository, $this->where),
  50. 'jobs'=>$this->jobs($jobsRepository, $this->where),
  51. 'resume'=>$this->resume($resumeRepository, $this->where),
  52. 'needAuthCompany'=>$this->needAuthCompany($companyRepository, $this->where),
  53. 'needAuditJobs'=>$this->needAuditJobs($jobsRepository, $this->where),
  54. 'needAuditResume'=>$this->needAuditResume($resumeRepository, $this->where),
  55. 'needAuditResumeImg'=>$this->needAuditResumeImg($resumeImgRepository, $this->where),
  56. 'suggestion'=>$this->suggestion($feedbackRepository, $this->where),
  57. 'report'=>$this->report($reportRepository, $this->where),
  58. ]));
  59. }
  60. protected function company($companyRepository, $where)
  61. {
  62. return (object)['getCompanyCount'=>$companyRepository->getCompanyCount($where),'getLastCompanyCount'=>$companyRepository->getLastCompanyCount($where),'getNextCompanyCount'=>$companyRepository->getNextCompanyCount($where)];
  63. }
  64. protected function person($memberRepository, $where)
  65. {
  66. return (object)['getPersonCount'=>$memberRepository->getPersonCount($where),'getLastPersonCount'=>$memberRepository->getLastPersonCount($where),'getNextPersonCount'=>$memberRepository->getNextPersonCount($where)];
  67. }
  68. protected function jobs($jobsRepository, $where)
  69. {
  70. return (object)['getJobCount'=>$jobsRepository->getJobCount($where),'getLastJobsCount'=>$jobsRepository->getLastJobsCount($where),'getNextJobsCount'=>$jobsRepository->getNextJobsCount($where)];
  71. }
  72. protected function resume($resumeRepository, $where)
  73. {
  74. return (object)['getResumesCount'=>$resumeRepository->getResumesCount($where),'getLastResumeCount'=>$resumeRepository->getLastResumeCount($where),'getNextResumeCount'=>$resumeRepository->getNextResumeCount($where)];
  75. }
  76. protected function needAuthCompany($companyRepository, $where)
  77. {
  78. $where[] = ['audit','=',2];
  79. return (object)['getAuditCount'=>$companyRepository->getAuditCount($where)];
  80. }
  81. protected function needAuditJobs($jobsRepository, $where)
  82. {
  83. $where[] = ['audit','=',2];
  84. return (object)['getJobsCount'=>$jobsRepository->getJobCount($where)];
  85. }
  86. protected function needAuditResume($resumeRepository, $where)
  87. {
  88. $where[] = ['audit','=',1];
  89. return (object)['getAuditCount'=>$resumeRepository->getAuditCount($where)];
  90. }
  91. protected function needAuditResumeImg($resumeImgRepository, $subsite_id)
  92. {
  93. $where[] = ['audit','=',1];
  94. return (object)['getAuditCount'=>$resumeImgRepository->getAuditCount($where, $subsite_id)];
  95. }
  96. protected function suggestion($feedbackRepository, $where)
  97. {
  98. $where[] = array('audit','=',0);
  99. return (object)['getCount'=>$feedbackRepository->getCount($where)];
  100. }
  101. protected function report($reportRepository, $where)
  102. {
  103. $where[] = array('audit','=',1);
  104. return (object)['getCount'=>$reportRepository->getCount($where)];
  105. }
  106. protected function appeal($appealRepository, $where)
  107. {
  108. $where[] = array('status','=',0);
  109. return (object)['getCount'=>$appealRepository->getCount($where)];
  110. }
  111. protected function jobfairJobs($jobfairJobRepository)
  112. {
  113. $where[] = array('audit','=',2);
  114. $where[] = array('type','=',1);
  115. return (object)['getCount'=>$jobfairJobRepository->getCount($where)];
  116. }
  117. protected function jobfairCompany($jobfairCompanyRepository, $subsite_id)
  118. {
  119. $where[] = array('audit','=',2);
  120. return (object)['getCount'=>$jobfairCompanyRepository->getCount($where, $subsite_id)];
  121. }
  122. protected function jobfairoutJobs($jobfairJobRepository)
  123. {
  124. $where[] = array('audit','=',2);
  125. $where[] = array('type','=',2);
  126. return (object)['getCount'=>$jobfairJobRepository->getCount($where)];
  127. }
  128. protected function jobfairoutCompany($jobfairoutCompanyRepository, $subsite_id)
  129. {
  130. $where[] = array('audit','=',2);
  131. return (object)['getCount'=>$jobfairoutCompanyRepository->getCount($where, $subsite_id)];
  132. }
  133. protected function companyImg($companyImgRepository, $subsite_id)
  134. {
  135. return (object)['getCount'=>$companyImgRepository->getCount($subsite_id, [0,2])];
  136. }
  137. protected function memberInfo($memberInfoRepository, $subsite_id)
  138. {
  139. $where[] = array('photo','=',1);
  140. $where[] = array('photo_audit','=',1);
  141. return (object)['getCount'=>$memberInfoRepository->getCount($where, $subsite_id)];
  142. }
  143. protected function register($table, $where)
  144. {
  145. $result = [];
  146. $dayArr = getLastDates(30);
  147. $sql = "deleted_at is null";
  148. if ($where) {
  149. $whereSubsite = $where[0][2] ? $where[0][2] : 0;
  150. $sql.=" and subsite_id=".$whereSubsite;
  151. }
  152. $realArr = DB::select("select DATE_FORMAT(created_at,'%Y-%m-%d') as days,count(*) as count FROM ".$table." WHERE ".$sql." and created_at >= '".date('Y-m-d H:i:s', strtotime('-30 days'))."' AND created_at <= '".date('Y-m-d H:i:s')."' GROUP BY days");
  153. foreach ($dayArr as $key => $val) {
  154. if (in_array($val, array_column($realArr, 'days'))) {
  155. foreach ($realArr as $key1 => $val1) {
  156. if ($val==$val1->days) {
  157. $result[] = [$val, $val1->count];
  158. break;
  159. }
  160. }
  161. } else {
  162. $result[] = [$val, 0];
  163. }
  164. }
  165. return $result;
  166. }
  167. protected function companyType($where)
  168. {
  169. $sql = "deleted_at is null";
  170. if ($where) {
  171. $whereSubsite = $where[0][2] ? $where[0][2] : 0;
  172. $sql.=" and subsite_id=".$whereSubsite;
  173. }
  174. $result = [];
  175. $category = Category::where('alias', 'AIX_company_type')->select(['id', 'demand'])->get()->toArray();
  176. $category_name = array_column($category, 'demand');
  177. $company = DB::select("select nature,count(*) as count from companys WHERE ".$sql." group by nature");
  178. foreach ($category as $key => $val) {
  179. if (in_array($val['id'], array_column($company, 'nature'))) {
  180. foreach ($company as $key1 => $val1) {
  181. if ($val['id']==$val1->nature) {
  182. $result[] = ['value'=>$val1->count, 'name'=>$val['demand']];
  183. break;
  184. }
  185. }
  186. } else {
  187. $result[] = ['value'=>0, 'name'=>$val['demand']];
  188. }
  189. }
  190. return ['category_name'=>$category_name,'result'=>$result];
  191. }
  192. protected function userAction()
  193. {
  194. $result = [];
  195. $dayArr = getLastDates(14);
  196. $jobsRefresh = RefreshLog::when(get_subsite_id()>0, function ($query) {
  197. $query->whereHas('companys', function ($query) {
  198. $query->where('subsite_id', get_subsite_id());
  199. });
  200. })->where('utype', 1)->where('type', 1006)->where('created_at', '>=', date('Y-m-d H:i:s', strtotime('-14 days')))->where('created_at', '<=', date('Y-m-d H:i:s'))->selectRaw('DATE_FORMAT(created_at,\'%Y-%m-%d\') as days,count(*) as count')->groupBy('days')->get()->toArray();
  201. $jobsApply = PersonalJobsApply::when(get_subsite_id()>0, function ($query) {
  202. $query->whereHas('resumes', function ($query) {
  203. $query->where('subsite_id', get_subsite_id());
  204. });
  205. })->where('created_at', '>=', date('Y-m-d H:i:s', strtotime('-14 days')))->where('created_at', '<=', date('Y-m-d H:i:s'))->selectRaw('DATE_FORMAT(created_at,\'%Y-%m-%d\') as days,count(*) as count')->groupBy('days')->get()->toArray();
  206. $newArray = ['jobsRefresh'=>$jobsRefresh,'jobsApply'=>$jobsApply];
  207. foreach ($dayArr as $key => $val) {
  208. foreach ($newArray as $key2 => $val2) {
  209. if (in_array($val, array_column($val2, 'days'))) {
  210. foreach ($val2 as $key1 => $val1) {
  211. if ($val==$val1['days']) {
  212. $result[$key2][] = $val1['count'];
  213. break;
  214. }
  215. }
  216. } else {
  217. $result[$key2][] = 0;
  218. }
  219. }
  220. }
  221. return ['day'=>$dayArr, 'userAction'=>$result];
  222. }
  223. public function ajax()
  224. {
  225. $where = $this->where;
  226. $member = $this->register('members', $where);
  227. $company = $this->register('companys', $where);
  228. $companyType = $this->companyType($where);
  229. $userAction = $this->userAction();
  230. return response()->json(['member'=>$member,'company'=>$company,'companyType'=>$companyType,'userAction'=>$userAction]);
  231. }
  232. public function menuMessage(
  233. CompanyRepository $companyRepository,
  234. JobsRepository $jobsRepository,
  235. CompanyImgRepository $companyImgRepository,
  236. ResumeRepository $resumeRepository,
  237. ResumeImgRepository $resumeImgRepository,
  238. MemberInfoRepository $memberInfoRepository,
  239. FeedbackRepository $feedbackRepository,
  240. ReportRepository $reportRepository,
  241. AppealRepository $appealRepository,
  242. JobfairJobRepository $jobfairJobRepository,
  243. JobfairCompanyRepository $jobfairCompanyRepository,
  244. JobfairoutCompanyRepository $jobfairoutCompanyRepository
  245. ) {
  246. $needAuthCompany = $this->needAuthCompany($companyRepository, $this->where)->getAuditCount;
  247. $needAuditJobs = $this->needAuditJobs($jobsRepository, $this->where)->getJobsCount;
  248. $companyImg =$this->companyImg($companyImgRepository, $this->where)->getCount;
  249. $needAuditResume = $this->needAuditResume($resumeRepository, $this->where)->getAuditCount;
  250. $needAuditResumeImg = $this->needAuditResumeImg($resumeImgRepository, $this->where)->getAuditCount;
  251. $memberInfo = $this->memberInfo($memberInfoRepository, $this->where)->getCount;
  252. $suggestion = $this->suggestion($feedbackRepository, $this->where)->getCount;
  253. $report = $this->report($reportRepository, $this->where)->getCount;
  254. $appeal = $this->appeal($appealRepository, $this->where)->getCount;
  255. $jobfairJobs = $this->jobfairJobs($jobfairJobRepository)->getCount;
  256. $jobfairCompany = $this->jobfairCompany($jobfairCompanyRepository, $this->where)->getCount;
  257. $jobfairoutJobs = $this->jobfairoutJobs($jobfairJobRepository)->getCount;
  258. $jobfairoutCompany = $this->jobfairoutCompany($jobfairoutCompanyRepository, $this->where)->getCount;
  259. return response()->json([
  260. ["id"=>13,"num"=>$needAuthCompany+$needAuditJobs+$companyImg, "has_child"=>true],
  261. ["id"=>14,"num"=>$needAuthCompany, "has_child"=>false],
  262. ["id"=>31,"num"=>$needAuditJobs, "has_child"=>false],
  263. ["id"=>41,"num"=>$companyImg, "has_child"=>false],
  264. ["id"=>110,"num"=>$needAuditResume+$needAuditResumeImg+$memberInfo, "has_child"=>true],
  265. ["id"=>111,"num"=>$needAuditResume, "has_child"=>false],
  266. ["id"=>112,"num"=>$needAuditResumeImg, "has_child"=>false],
  267. ["id"=>113,"num"=>$memberInfo, "has_child"=>false],
  268. ["id"=>19,"num"=>$suggestion+$report+$appeal, "has_child"=>true],
  269. ["id"=>106,"num"=>$suggestion, "has_child"=>false],
  270. ["id"=>47,"num"=>$report, "has_child"=>false],
  271. ["id"=>50,"num"=>$appeal, "has_child"=>false],
  272. ["id"=>145,"num"=>$jobfairJobs+$jobfairCompany, "has_child"=>true],
  273. ["id"=>149,"num"=>$jobfairJobs, "has_child"=>false],
  274. ["id"=>151,"num"=>$jobfairCompany, "has_child"=>false],
  275. ["id"=>175,"num"=>$jobfairoutJobs+$jobfairoutCompany, "has_child"=>true],
  276. ["id"=>177,"num"=>$jobfairoutJobs, "has_child"=>false],
  277. ["id"=>179,"num"=>$jobfairoutCompany, "has_child"=>false],
  278. ]);
  279. }
  280. }