StatisticsController.php 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140
  1. <?php
  2. namespace App\Http\Controllers\Admin\Manage;
  3. use App\Http\Controllers\Controller;
  4. use App\Repositories\Enums\Manage\DealStatusEnum;
  5. use App\Repositories\Models\Base\Department;
  6. use App\Repositories\Models\Manage\Category;
  7. use App\Repositories\Models\Manage\Message;
  8. use Carbon\Carbon;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\DB;
  11. use PhpOffice\PhpWord\Element\Table;
  12. use PhpOffice\PhpWord\TemplateProcessor;
  13. /**
  14. * 信息管理
  15. */
  16. class StatisticsController extends Controller
  17. {
  18. /**
  19. * 下载报告
  20. * @param Request $request
  21. * @throws \Illuminate\Validation\ValidationException
  22. */
  23. public function down(Request $request)
  24. {
  25. $data = $this->validateData($request, [
  26. 'date_type' => 'required|in:1,2,3,4',
  27. 'start_time' => 'nullable',
  28. 'end_time' => 'nullable',
  29. 'type_id' => 'required|integer',
  30. 'deal_status' => 'required|integer',
  31. 'department_id' => 'required|integer',
  32. 'category_id' => 'required|integer',
  33. 'suggestion' => 'nullable',
  34. ], [
  35. 'date_type' => '日期类型',
  36. 'start_time' => '开始日期',
  37. 'end_time' => '结束日期',
  38. 'type_id' => '来源id',
  39. 'deal_status' => '办理状态',
  40. 'department_id' => '部门id',
  41. 'category_id' => '分类id',
  42. 'suggestion' => '建议',
  43. ]);
  44. $suggestion = $request->get('suggestion', '');
  45. $title = '';
  46. switch ($data['date_type']) {
  47. case 1:
  48. //当天
  49. $data['start_time'] = Carbon::now()->startOfDay()->toDateTimeString();
  50. $data['end_time'] = false;
  51. //$title = date('Y-m-d') . '日';
  52. $title = '分析研判日';
  53. break;
  54. case 2:
  55. //本周
  56. $data['start_time'] = Carbon::now()->startOfWeek()->toDateTimeString();
  57. $data['end_time'] = false;
  58. //$title = Carbon::now()->startOfWeek()->toDateString() . '~' . Carbon::now()->endOfWeek()->toDateString() . '周';
  59. $title = '分析研判周';
  60. break;
  61. case 3:
  62. //本月
  63. $data['start_time'] = Carbon::now()->startOfMonth()->toDateTimeString();
  64. $data['end_time'] = false;
  65. //$title = Carbon::now()->format('Y-m') . '月';
  66. $title = '分析研判月';
  67. break;
  68. case 4:
  69. //自定义
  70. $this->validateData($request, [
  71. 'start_time' => 'required|date',
  72. 'end_time' => 'required|date',
  73. ]);
  74. //$title = "{$data['start_time']}~{$data['end_time']}时间段";
  75. $title = "分析研判";
  76. break;
  77. }
  78. $arr = [];
  79. if ($data['category_id']) $arr = Category::byCategoryIdGetCategoryArr($data['category_id']);
  80. $category_1_id = 0;
  81. $category_2_id = 0;
  82. $category_3_id = 0;
  83. $category_4_id = 0;
  84. $category_5_id = 0;
  85. if (count($arr) >= 1) $category_1_id = $arr[0];
  86. if (count($arr) >= 2) $category_2_id = $arr[1];
  87. if (count($arr) >= 3) $category_3_id = $arr[2];
  88. if (count($arr) >= 4) $category_3_id = $arr[3];
  89. if (count($arr) >= 5) $category_3_id = $arr[4];
  90. $model = Message::query()
  91. ->where('created_at', '>=', $data['start_time'])
  92. ->whereIn('deal_department_id', Department::statistics())
  93. ->when($data['end_time'], function ($query) use ($data) {
  94. return $query->where('created_at', '<', $data['end_time']);
  95. })
  96. ->when($data['type_id'], function ($query) use ($data) {
  97. return $query->where('type_id', '=', $data['type_id']);
  98. })
  99. ->when($data['deal_status'], function ($query) use ($data) {
  100. return $query->where('deal_status', '=', $data['deal_status']);
  101. })
  102. ->when($data['department_id'], function ($query) use ($data) {
  103. return $query->where('deal_department_id', '=', $data['department_id']);
  104. })
  105. ->when($category_1_id, function ($query) use ($category_1_id) {
  106. return $query->where('category_1_id', '=', $category_1_id);
  107. })
  108. ->when($category_2_id, function ($query) use ($category_2_id) {
  109. return $query->where('category_2_id', '=', $category_2_id);
  110. })
  111. ->when($category_3_id, function ($query) use ($category_3_id) {
  112. return $query->where('category_3_id', '=', $category_3_id);
  113. })
  114. ->when($category_4_id, function ($query) use ($category_4_id) {
  115. return $query->where('category_4_id', '=', $category_4_id);
  116. })
  117. ->when($category_5_id, function ($query) use ($category_5_id) {
  118. return $query->where('category_5_id', '=', $category_5_id);
  119. });
  120. //事件总数
  121. $model_temp = $model->clone();
  122. $numS = $model_temp->count();
  123. //部门统计
  124. $model_department = $model->clone();
  125. $dataDepartments = $model_department->selectRaw('count(*) as nums,deal_department_id')->groupBy('deal_department_id')->with(['deal_department'])->get();
  126. $departmentsS = [];
  127. foreach ($dataDepartments as $dataDepartment) {
  128. $departmentsS[] = [
  129. 'name' => $dataDepartment['deal_department'] ? $dataDepartment['deal_department']['name'] : '未知',
  130. 'nums' => $dataDepartment['nums']
  131. ];
  132. }
  133. $departmentsS = arraySort($departmentsS, 'nums');
  134. $departmentsSS = word_arr2str($departmentsS);
  135. //分类统计
  136. // $categories = Category::getLast();
  137. // $categoriesS = [];
  138. // foreach ($categories as $category) {
  139. // $model_category = $model->clone();
  140. // $level = $category['level'];
  141. // $nums = $model_category->where("category_{$level}_id", $category['id'])->count();
  142. // if (!$nums) continue;
  143. // $categoriesS[] = [
  144. // 'nums' => $nums,
  145. // 'name' => arr2str(Category::byIdGetParentName($category['id']), '/')
  146. // ];
  147. // }
  148. // $categoriesS = arraySort($categoriesS, 'nums');
  149. // $categoriesSS = word_arr2str($categoriesS);
  150. $categoriesA = $this->statisticsArr($model->clone());
  151. $table = new Table([
  152. 'borderSize' => 6,
  153. 'alignment' => \PhpOffice\PhpWord\SimpleType\JcTable::CENTER,
  154. 'alignMent' => 'center'
  155. ]);
  156. foreach ($categoriesA as $r => $da) {
  157. if (!$r) {
  158. $table->addRow();
  159. $table->addCell(500)->addText('序号', null, ['align' => 'center']);
  160. $table->addCell(8000, ['gridSpan' => '4', 'valign' => 'center'])->addText('类别及数量', null, ['align' => 'center']);
  161. }
  162. $table->addRow();
  163. if ($da[0]) {
  164. $table->addCell(500, ['vMerge' => 'restart', 'valign' => 'center'])->addText($da[0]['name'], null, ['align' => 'center']);
  165. } else {
  166. $table->addCell(500, ['vMerge' => 'continue'])->addText('--');
  167. }
  168. if ($da[1]) {
  169. $table->addCell(2000, ['vMerge' => 'restart', 'valign' => 'center'])->addText("{$da[1]['name']}({$da[1]['nums']})", null, ['align' => 'center']);
  170. } else {
  171. $table->addCell(2000, ['vMerge' => 'continue']);
  172. }
  173. if ($da[2]) {
  174. $table->addCell(2000, ['vMerge' => 'restart', 'valign' => 'center'])->addText("{$da[2]['name']}({$da[2]['nums']})", null, ['align' => 'center']);
  175. } else {
  176. $table->addCell(2000, ['vMerge' => 'continue'])->addText('--');
  177. }
  178. if ($da[3]) {
  179. $table->addCell(2000, ['vMerge' => 'restart', 'valign' => 'center'])->addText("{$da[3]['name']}({$da[3]['nums']})", null, ['align' => 'center']);
  180. } else {
  181. $table->addCell(2000, ['vMerge' => 'continue'])->addText('--');
  182. }
  183. if ($da[4]) {
  184. $table->addCell(2000)->addText("{$da[4]['name']}({$da[4]['nums']})", null, ['align' => 'center']);
  185. } else {
  186. $table->addCell(2000)->addText('--', null, ['align' => 'center']);
  187. }
  188. }
  189. $categoriesSS = $table;
  190. //办理状态
  191. $model_deal_status = $model->clone();
  192. $dataDeals = $model_deal_status->selectRaw('count(*) as nums,deal_status')->groupBy('deal_status')->get();
  193. $dealS = [];
  194. foreach ($dataDeals as $dataDeal) {
  195. $dealS[] = [
  196. 'name' => DealStatusEnum::getDescription($dataDeal['deal_status']),
  197. 'nums' => $dataDeal['nums']
  198. ];
  199. }
  200. $dealSS = word_arr2str($dealS);
  201. //行业
  202. $model_type = $model->clone();
  203. $dataTypes = $model_type->selectRaw('count(*) as nums,type_id')->groupBy('type_id')->with(['type'])->get();
  204. $typeS = [];
  205. foreach ($dataTypes as $dataType) {
  206. $typeS[] = [
  207. 'name' => $dataType['type'] ? $dataType['type']['name'] : '',
  208. 'nums' => $dataType['nums']
  209. ];
  210. }
  211. $typeSS = word_arr2str($typeS);
  212. //乡镇
  213. $model_address = $model->clone();
  214. $dataAddress = $model_address->selectRaw('count(*) as nums,address_id')->groupBy('address_id')->with(['address'])->get();
  215. $addressS = [];
  216. foreach ($dataAddress as $address) {
  217. $addressS[] = [
  218. 'name' => $address['address'] ? $address['address']['name'] : '未知',
  219. 'nums' => $address['nums']
  220. ];
  221. }
  222. $addressS = arraySort($addressS, 'nums');
  223. $addressSS = word_arr2str($addressS);
  224. $path = base_path("public/template/manage/2023.docx");
  225. $is = file_exists($path);
  226. if (!$is) {
  227. return $this->error('模板文件找不到');
  228. }
  229. try {
  230. $template = new TemplateProcessor($path);
  231. $template->setValue('title', $title);
  232. $template->setValue('numS', $numS);
  233. $template->setValue('departmentsSS', $departmentsSS);
  234. $template->setComplexBlock('categorySS', $categoriesSS);
  235. $template->setValue('dealSS', $dealSS);
  236. $template->setValue('addressSS', $addressSS);
  237. $template->setValue('typeSS', $typeSS);
  238. $template->setValue('suggestion', $suggestion);
  239. $filename = date('Y-m-d') . '.docx';
  240. // if (self::$TYPE == 'weapp') {
  241. // $filename = Str::random(8) . '.docx';
  242. // $template->saveAs(base_path() . '/storage/app/public/tmp/' . $filename);
  243. // $url = '/storage/tmp/' . $filename;
  244. // return Response::success(compact('url', 'filename'));
  245. // }
  246. header('Content-Type: application/vnd.ms-word');
  247. header('Content-Disposition: attachment;filename=' . $filename);
  248. header('Cache-Control: max-age=0');
  249. $template->saveAs('php://output');//直接下载
  250. } catch (\Exception $exception) {
  251. $this->exception($exception);
  252. }
  253. }
  254. /**
  255. * 统计
  256. * @param Request $request
  257. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  258. * @throws \Illuminate\Validation\ValidationException
  259. */
  260. public function statistics(Request $request)
  261. {
  262. $data = $this->validateData($request, [
  263. 'date_type' => 'required|in:1,2,3,4',
  264. 'start_time' => 'nullable',
  265. 'end_time' => 'nullable',
  266. 'type_id' => 'required|integer',
  267. 'deal_status' => 'required|integer',
  268. 'department_id' => 'required|integer',
  269. 'category_id' => 'required|integer',
  270. ], [
  271. 'date_type' => '日期类型',
  272. 'start_time' => '开始日期',
  273. 'end_time' => '结束日期',
  274. 'type_id' => '来源id',
  275. 'deal_status' => '办理状态',
  276. 'department_id' => '部门id',
  277. 'category_id' => '分类id',
  278. ]);
  279. switch ($data['date_type']) {
  280. case 1:
  281. //当天
  282. $data['start_time'] = Carbon::now()->startOfDay()->toDateTimeString();
  283. $data['end_time'] = false;
  284. break;
  285. case 2:
  286. //本周
  287. $data['start_time'] = Carbon::now()->startOfWeek()->toDateTimeString();
  288. $data['end_time'] = false;
  289. break;
  290. case 3:
  291. //本月
  292. $data['start_time'] = Carbon::now()->startOfMonth()->toDateTimeString();
  293. $data['end_time'] = false;
  294. break;
  295. case 4:
  296. //自定义
  297. $this->validateData($request, [
  298. 'start_time' => 'required|date',
  299. 'end_time' => 'required|date',
  300. ],
  301. ['start_time' => '开始时间', 'end_time' => '结束时间']
  302. );
  303. break;
  304. }
  305. $arr = [];
  306. if ($data['category_id']) $arr = Category::byCategoryIdGetCategoryArr($data['category_id']);
  307. $category_1_id = 0;
  308. $category_2_id = 0;
  309. $category_3_id = 0;
  310. $category_4_id = 0;
  311. $category_5_id = 0;
  312. if (count($arr) >= 1) $category_1_id = $arr[0];
  313. if (count($arr) >= 2) $category_2_id = $arr[1];
  314. if (count($arr) >= 3) $category_3_id = $arr[2];
  315. if (count($arr) >= 4) $category_3_id = $arr[3];
  316. if (count($arr) >= 5) $category_3_id = $arr[4];
  317. $model = Message::query()
  318. ->where('created_at', '>=', $data['start_time'])
  319. ->when($data['end_time'], function ($query) use ($data) {
  320. return $query->where('created_at', '<', $data['end_time']);
  321. })
  322. ->when($data['type_id'], function ($query) use ($data) {
  323. return $query->where('type_id', '=', $data['type_id']);
  324. })
  325. ->when($data['deal_status'], function ($query) use ($data) {
  326. return $query->where('deal_status', '=', $data['deal_status']);
  327. })
  328. ->when($data['department_id'], function ($query) use ($data) {
  329. return $query->where('deal_department_id', '=', $data['department_id']);
  330. })
  331. ->when($category_1_id, function ($query) use ($category_1_id) {
  332. return $query->where('category_1_id', '=', $category_1_id);
  333. })
  334. ->when($category_2_id, function ($query) use ($category_2_id) {
  335. return $query->where('category_2_id', '=', $category_2_id);
  336. })
  337. ->when($category_3_id, function ($query) use ($category_3_id) {
  338. return $query->where('category_3_id', '=', $category_3_id);
  339. })
  340. ->when($category_4_id, function ($query) use ($category_4_id) {
  341. return $query->where('category_4_id', '=', $category_4_id);
  342. })
  343. ->when($category_5_id, function ($query) use ($category_5_id) {
  344. return $query->where('category_5_id', '=', $category_5_id);
  345. });
  346. //事件总数
  347. $model_temp = $model->clone();
  348. $numS = $model_temp->count();
  349. //部门统计
  350. $model_department = $model->clone();
  351. $dataDepartments = $model_department->selectRaw('count(*) as nums,deal_department_id')->groupBy('deal_department_id')->with(['deal_department'])->get();
  352. $departmentsS = [];
  353. foreach ($dataDepartments as $dataDepartment) {
  354. $departmentsS[] = [
  355. 'name' => $dataDepartment['deal_department'] ? $dataDepartment['deal_department']['name'] : '未知',
  356. 'nums' => $dataDepartment['nums']
  357. ];
  358. }
  359. $departmentsS = arraySort($departmentsS, 'nums');
  360. //分类统计
  361. // $categories = Category::getLast();
  362. $categoriesS = [];
  363. // $categoriesA = $this->statisticsArr();
  364. // foreach ($categories as $category) {
  365. // $model_category = $model->clone();
  366. // $level = $category['level'];
  367. // $nums = $model_category->where("category_{$level}_id", $category['id'])->count();
  368. // if (!$nums) continue;
  369. // $names = Category::byIdGetParentName($category['id']);
  370. //
  371. // if ($level >= 1) $categoriesA[$names[0]]['row'] += $nums;
  372. // if ($level >= 2) $categoriesA[$names[0]][$names[1]]['row'] += $nums;
  373. // if ($level >= 3) $categoriesA[$names[0]][$names[1]][$names[2]]['row'] += $nums;
  374. // if ($level >= 4) $categoriesA[$names[0]][$names[1]][$names[2]][$names[3]]['row'] += $nums;
  375. //
  376. // $categoriesS[] = [
  377. // 'nums' => $nums,
  378. // 'name' => arr2str($names, '/')
  379. // ];
  380. // }
  381. // $categoriesS = arraySort($categoriesS, 'nums');
  382. //行业
  383. $model_type = $model->clone();
  384. $dataTypes = $model_type->selectRaw('count(*) as nums,type_id')->groupBy('type_id')->with(['type'])->get()->toArray();
  385. $typeS = [];
  386. foreach ($dataTypes as $dataType) {
  387. $typeS[] = [
  388. 'name' => $dataType['type'] ? $dataType['type']['name'] : '',
  389. 'nums' => $dataType['nums']
  390. ];
  391. }
  392. $typeS = arraySort($typeS, 'nums');
  393. //办理状态
  394. $model_deal_status = $model->clone();
  395. $dataDeals = $model_deal_status->selectRaw('count(*) as nums,deal_status')->groupBy('deal_status')->get();
  396. $dealS = [];
  397. foreach ($dataDeals as $dataDeal) {
  398. $dealS[] = [
  399. 'name' => DealStatusEnum::getDescription($dataDeal['deal_status']),
  400. 'nums' => $dataDeal['nums']
  401. ];
  402. }
  403. //乡镇
  404. $model_address = $model->clone();
  405. $dataAddress = $model_address->selectRaw('count(*) as nums,address_id')->groupBy('address_id')->with(['address'])->get();
  406. $addressS = [];
  407. foreach ($dataAddress as $address) {
  408. $addressS[] = [
  409. 'name' => $address['address'] ? $address['address']['name'] : '未知',
  410. 'nums' => $address['nums']
  411. ];
  412. }
  413. $addressS = arraySort($addressS, 'nums');
  414. $categoriesB = $this->statisticsArrB($model->clone());
  415. return $this->response->success(compact('numS', 'departmentsS', 'categoriesS', 'dealS', 'addressS', 'typeS', 'categoriesB'));
  416. }
  417. private function statisticsArrB($messages)
  418. {
  419. $messagesB = $messages->clone();
  420. $messages = $messages->groupBy("category_1_id")->limit(3)->select(DB::raw("category_1_id as id,count(*) as nums"))->orderByDesc('nums')->get()->toArray();
  421. foreach ($messages as &$da) {
  422. $da['level'] = 1;
  423. $child = $this->fB(2, $da['id'], $messagesB->clone());
  424. $da['row'] = array_sum(array_column($child, 'row'));
  425. $da['child'] = $child;
  426. $da['name'] = Category::query()->where('id', $da['id'])->value('name');
  427. }
  428. return $messages;
  429. }
  430. private function fB($l = 1, $cid = 0, $messages = false)
  431. {
  432. $messagesC = $messages->clone();
  433. $lp = $l - 1;
  434. $messages = $messages->where("category_{$l}_id", '<>', 0)->where("category_{$lp}_id", $cid)->groupBy("category_{$l}_id")->select(DB::raw("category_{$l}_id as id,count(*) as nums"))->orderByDesc('nums')->get()->toArray();
  435. if (!$messages) return false;
  436. foreach ($messages as $k => $message) {
  437. $messages[$k]['level'] = $l;
  438. $messages[$k]['name'] = Category::query()->where('id', $message['id'])->value('name');
  439. }
  440. if ($l == 4) {
  441. foreach ($messages as $k => $message) {
  442. $messages[$k]['row'] = 1;
  443. }
  444. return $messages;
  445. }
  446. foreach ($messages as $k => $m) {
  447. $child = $this->fB($l + 1, $m['id'], $messagesC->clone());
  448. if ($child) {
  449. $messages[$k]['row'] = array_sum(array_column($child, 'row'));
  450. $messages[$k]['child'] = $child;
  451. } else {
  452. $messages[$k]['row'] = 1;
  453. }
  454. }
  455. return $messages;
  456. }
  457. /**
  458. * 分类统计
  459. * @return array
  460. */
  461. private function statisticsArr($messages = false)
  462. {
  463. $messagesB = $messages->clone();
  464. $messages = $messages->groupBy("category_1_id")->limit(3)->select(DB::raw("category_1_id as id,count(*) as nums"))->orderByDesc('nums')->get()->toArray();
  465. foreach ($messages as &$da) {
  466. $da['level'] = 1;
  467. $child = $this->f(2, $da['id'], $messagesB->clone());
  468. $da['row'] = array_sum(array_column($child, 'row'));
  469. $da['child'] = $child;
  470. }
  471. $data = [];
  472. foreach ($messages as $k => $message) {
  473. $c2n = 0;
  474. $c3n = 0;
  475. $c4n = 0;
  476. $c1 = 0;
  477. $c2 = 0;
  478. $c3 = 0;
  479. $mD = [
  480. 'id' => $message['id'],
  481. 'name' => Category::query()->where('id', $message['id'])->value('name'),
  482. 'nums' => $message['nums'],
  483. 'row' => $message['row'],
  484. ];
  485. for ($i = 1; $i <= $message['row']; $i++) {
  486. $col2 = 0;
  487. $col3 = 0;
  488. $col4 = 0;
  489. if (isset($message['child'])) {
  490. if ($c2n == 0) {
  491. $model = $message['child'][$c1];
  492. $col2 = [
  493. 'id' => $model['id'],
  494. 'name' => Category::query()->where('id', $model['id'])->value('name'),
  495. 'nums' => $model['nums'],
  496. 'row' => $c2n == 0 ? $model['row'] : 0,
  497. ];
  498. }
  499. $c2n++;
  500. }
  501. if (isset($message['child'][$c1]['child'])) {
  502. if ($c3n == 0) {
  503. $model = $message['child'][$c1]['child'][$c2];
  504. $col3 = [
  505. 'id' => $model['id'],
  506. 'name' => Category::query()->where('id', $model['id'])->value('name'),
  507. 'nums' => $model['nums'],
  508. 'row' => $c3n == 0 ? $model['row'] : 0,
  509. ];
  510. }
  511. $c3n++;
  512. }
  513. if (isset($message['child'][$c1]['child'][$c2]['child'])) {
  514. if ($c4n == 0) {
  515. $model = $message['child'][$c1]['child'][$c2]['child'][$c3];
  516. $col4 = [
  517. 'id' => $model['id'],
  518. 'name' => Category::query()->where('id', $model['id'])->value('name'),
  519. 'nums' => $model['nums'],
  520. 'row' => $c4n == 0 ? $model['row'] : 0,
  521. ];
  522. }
  523. $c4n++;
  524. }
  525. if ($i == 1) $mD['row'] = $message['row'];
  526. $data[] = [
  527. $i == 1 ? ['name' => ($k + 1), 'row' => $mD['row']] : 0,
  528. $i == 1 ? $mD : 0,
  529. $col2,
  530. $col3,
  531. $col4,
  532. ];
  533. if ($c2n && $c2n == $message['child'][$c1]['row']) {
  534. $c1++;
  535. $c2 = 0;
  536. $c3 = 0;
  537. $c2n = 0;
  538. $c3n = 0;
  539. $c4n = 0;
  540. continue;
  541. }
  542. if ($c3n && $c3n == $message['child'][$c1]['child'][$c2]['row']) {
  543. $c2++;
  544. $c3 = 0;
  545. $c3n = 0;
  546. $c4n = 0;
  547. continue;
  548. }
  549. if ($c4n && $c4n == $message['child'][$c1]['child'][$c2]['child'][$c3]['row']) {
  550. $c3++;
  551. $c4n = 0;
  552. }
  553. }
  554. }
  555. return $data;
  556. }
  557. private function f($l = 1, $cid = 0, $messages = false)
  558. {
  559. $messagesC = $messages->clone();
  560. $lp = $l - 1;
  561. $messages = $messages->where("category_{$l}_id", '<>', 0)->where("category_{$lp}_id", $cid)->groupBy("category_{$l}_id")->select(DB::raw("category_{$l}_id as id,count(*) as nums"))->orderByDesc('nums')->get()->toArray();
  562. if (!$messages) return false;
  563. foreach ($messages as $k => $message) {
  564. $messages[$k]['level'] = $l;
  565. }
  566. if ($l == 4) {
  567. foreach ($messages as $k => $message) {
  568. $messages[$k]['row'] = 1;
  569. }
  570. return $messages;
  571. }
  572. foreach ($messages as $k => $m) {
  573. $child = $this->f($l + 1, $m['id'], $messagesC->clone());
  574. if ($child) {
  575. $messages[$k]['row'] = array_sum(array_column($child, 'row'));
  576. $messages[$k]['child'] = $child;
  577. } else {
  578. $messages[$k]['row'] = 1;
  579. }
  580. }
  581. return $messages;
  582. }
  583. /**
  584. * 事项数量统计
  585. * @param Request $request
  586. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  587. * @throws \Illuminate\Validation\ValidationException
  588. */
  589. public function messageNumsStatistics(Request $request)
  590. {
  591. $data = $this->validateData($request, [
  592. 'date_type' => 'required|in:1,2,3'
  593. ]);
  594. $date_type = $data['date_type'];
  595. $department_id = $request->get('department_id', false);
  596. $department_ids = Department::byIdGetChildIds($department_id);
  597. $s_department_ids = Department::statistics();
  598. /**
  599. * 近一周:获取每天的办理中数量、已办理数量、已完成数量
  600. * 近一月:获取每天的办理中数量、已办理数量、已完成数量
  601. * 近一年:获取每月的办理中数量、已办理数量、已完成数量
  602. */
  603. $data = [];
  604. $dayTemp = array();
  605. $waitNums = array();
  606. $inNums = array();
  607. $okNums = array();
  608. switch ($date_type) {
  609. case 1:
  610. //近一周
  611. for ($i = 0; $i < 7; $i++) {
  612. $day = Carbon::now()->addDays(-6)->addDays($i)->toDateString();
  613. $wait_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  614. return $query->whereIn('import_department_id', $department_ids);
  615. })->whereDate('created_at', $day)->where('deal_status', DealStatusEnum::WAIT)->count();
  616. $in_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  617. return $query->whereIn('import_department_id', $department_ids);
  618. })->whereDate('created_at', $day)->where('deal_status', DealStatusEnum::IN)->count();
  619. $ok_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  620. return $query->whereIn('import_department_id', $department_ids);
  621. })->whereDate('created_at', $day)->where('deal_status', DealStatusEnum::OK)->count();
  622. array_push($dayTemp, $day);
  623. array_push($waitNums, $wait_nums);
  624. array_push($inNums, $in_nums);
  625. array_push($okNums, $ok_nums);
  626. $data = [
  627. 'day' => $dayTemp,
  628. 'wait_nums' => $waitNums,
  629. 'in_nums' => $inNums,
  630. 'ok_nums' => $okNums,
  631. ];
  632. /*$data[] = [
  633. 'day' => $day,
  634. 'wait_nums' => $wait_nums,
  635. 'in_nums' => $in_nums,
  636. 'ok_nums' => $ok_nums
  637. ];*/
  638. }
  639. break;
  640. case 2:
  641. //近一月
  642. for ($i = 0; $i < 30; $i++) {
  643. $day = Carbon::now()->addDays(-29)->addDays($i)->toDateString();
  644. $wait_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  645. return $query->whereIn('import_department_id', $department_ids);
  646. })->whereDate('created_at', '=', $day)->where('deal_status', DealStatusEnum::WAIT)->count();
  647. $in_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  648. return $query->whereIn('import_department_id', $department_ids);
  649. })->whereDate('created_at', '=', $day)->where('deal_status', DealStatusEnum::IN)->count();
  650. $ok_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  651. return $query->whereIn('import_department_id', $department_ids);
  652. })->whereDate('created_at', '=', $day)->where('deal_status', DealStatusEnum::OK)->count();
  653. array_push($dayTemp, $day);
  654. array_push($waitNums, $wait_nums);
  655. array_push($inNums, $in_nums);
  656. array_push($okNums, $ok_nums);
  657. $data = [
  658. 'day' => $dayTemp,
  659. 'wait_nums' => $waitNums,
  660. 'in_nums' => $inNums,
  661. 'ok_nums' => $okNums,
  662. ];
  663. /*$data[] = [
  664. 'day' => $day,
  665. 'wait_nums' => $wait_nums,
  666. 'in_nums' => $in_nums,
  667. 'ok_nums' => $ok_nums
  668. ];*/
  669. }
  670. break;
  671. case 3:
  672. //近一年
  673. for ($i = 0; $i < 12; $i++) {
  674. $firstDay = date('Y-m-01', strtotime(Carbon::now()->addMonths(-11)->addMonths($i)));
  675. $lastDay = date('Y-m-d', strtotime("$firstDay +1 month -1 day"));
  676. $month = date('Y-m', strtotime($firstDay));
  677. $wait_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  678. return $query->whereIn('import_department_id', $department_ids);
  679. })->whereBetween('created_at', [$firstDay, $lastDay])->where('deal_status', DealStatusEnum::WAIT)->count();
  680. $in_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  681. return $query->whereIn('import_department_id', $department_ids);
  682. })->whereBetween('created_at', [$firstDay, $lastDay])->where('deal_status', DealStatusEnum::IN)->count();
  683. $ok_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  684. return $query->whereIn('import_department_id', $department_ids);
  685. })->whereBetween('created_at', [$firstDay, $lastDay])->where('deal_status', DealStatusEnum::OK)->count();
  686. array_push($dayTemp, $month);
  687. array_push($waitNums, $wait_nums);
  688. array_push($inNums, $in_nums);
  689. array_push($okNums, $ok_nums);
  690. $data = [
  691. 'day' => $dayTemp,
  692. 'wait_nums' => $waitNums,
  693. 'in_nums' => $inNums,
  694. 'ok_nums' => $okNums,
  695. ];
  696. /*$data[] = [
  697. 'day' => $month,
  698. 'wait_nums' => $wait_nums,
  699. 'in_nums' => $in_nums,
  700. 'ok_nums' => $ok_nums
  701. ];*/
  702. }
  703. break;
  704. }
  705. return $this->response->success($data);
  706. }
  707. /**
  708. * 当天办理进度
  709. * @param Request $request
  710. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource]
  711. */
  712. public function todayNumStatistics(Request $request)
  713. {
  714. $department_id = $request->get('department_id', false);
  715. $department_ids = Department::byIdGetChildIds($department_id);
  716. $s_department_ids = Department::statistics();
  717. /**
  718. * 获取当天的办理中数量、已办理数量、已完成数量、总数量、带审核的数量
  719. */
  720. $day = Carbon::now()->toDateString();
  721. //总数
  722. $totalNums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  723. return $query->whereIn('import_department_id', $department_ids);
  724. })->whereDate('created_at', '=', $day)->count();
  725. //未办理
  726. $wait_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  727. return $query->whereIn('import_department_id', $department_ids);
  728. })->whereDate('created_at', '=', $day)->where('deal_status', DealStatusEnum::WAIT)->count();
  729. //办理中
  730. $in_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  731. return $query->whereIn('import_department_id', $department_ids);
  732. })->whereDate('created_at', '=', $day)->where('deal_status', DealStatusEnum::IN)->count();
  733. //已完成(已完结)
  734. $ok_nums = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  735. return $query->whereIn('import_department_id', $department_ids);
  736. })->whereDate('created_at', '=', $day)->where('deal_status', DealStatusEnum::OK)->count();
  737. //待审核
  738. /*$wait_check_nums = Message::query()->when($department_id, function ($query) use ($department_ids) {
  739. return $query->whereIn('import_department_id', $department_ids);
  740. })->whereDate('created_at', '=', $day)->where('check_status', StatusEnum::WAIT)->count();*/
  741. $data = [
  742. 'day' => $day,
  743. 'totalNums' => $totalNums,
  744. 'wait_nums' => $wait_nums,
  745. 'in_nums' => $in_nums,
  746. 'ok_nums' => $ok_nums
  747. ];
  748. return $this->response->success($data);
  749. }
  750. /**
  751. * 事项办理完成情况排行榜
  752. * @param Request $request
  753. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  754. * @throws \Illuminate\Validation\ValidationException
  755. */
  756. public function completionRateStatistics(Request $request)
  757. {
  758. $data = $this->validateData($request, [
  759. 'date_type' => 'required|in:1,2,3'
  760. ]);
  761. $date_type = $data['date_type'];
  762. $department_id = $request->get('department_id', false);
  763. $department_ids = Department::byIdGetChildIds($department_id);
  764. $s_department_ids = Department::statistics();
  765. /**
  766. * 根据部门完成率排行「完成率【完成数/总数】」
  767. */
  768. $data = [];
  769. $day = Carbon::now()->toDateString();
  770. switch ($date_type) {
  771. case 1:
  772. //近一周
  773. $weekAgo = Carbon::now()->addDays(-6)->toDateString();
  774. //根据部门id分组查询,获取到该部门近一周内的数量
  775. $messages = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  776. return $query->whereIn('import_department_id', $department_ids);
  777. })->selectRaw('count(id) as nums,import_department_id')->where('import_department_id', '!=', '0')->whereBetween('created_at', [$weekAgo, $day])->groupBy('import_department_id')->get();
  778. foreach ($messages as $message) {
  779. //根据部门id查询近一周内的已处理完成的数量
  780. $departOkNums = Message::query()->whereBetween('created_at', [$weekAgo, $day])->where('import_department_id', '=', $message->import_department_id)->where('deal_status', '=', DealStatusEnum::OK)->count();
  781. //部门总数量
  782. $departTotalNums = $message->nums;
  783. //部门名称
  784. $departName = '';
  785. if (null != $message->import_department_id && $message->import_department_id != 0) {
  786. $departs = Department::query()->selectRaw('name')->where('id', '=', $message->import_department_id)->get();
  787. foreach ($departs as $depart) {
  788. $departName = $depart->name;
  789. }
  790. }
  791. if ($departTotalNums != null && $departTotalNums != 0) {
  792. //算出完成率
  793. $departRate = (round(($departOkNums / $departTotalNums), 4) * 100) . '%';
  794. $data[] = [
  795. 'departName' => $departName,
  796. 'departRate' => $departRate
  797. ];
  798. }
  799. }
  800. $data = arraySort($data, 'departRate');
  801. break;
  802. case 2:
  803. //近一月
  804. $monthAgo = Carbon::now()->addDays(-29)->toDateString();
  805. //根据部门id分组查询,获取到该部门近一月内的数量
  806. $messages = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  807. return $query->whereIn('import_department_id', $department_ids);
  808. })->selectRaw('count(id) as nums,import_department_id')->where('import_department_id', '!=', '0')->whereBetween('created_at', [$monthAgo, $day])->groupBy('import_department_id')->get();
  809. foreach ($messages as $message) {
  810. //根据部门id查询近一月内的已处理完成的数量
  811. $departOkNums = Message::query()->whereBetween('created_at', [$monthAgo, $day])->where('import_department_id', '=', $message->import_department_id)->where('deal_status', '=', DealStatusEnum::OK)->count();
  812. //部门总数量
  813. $departTotalNums = $message->nums;
  814. //部门名称
  815. $departName = '';
  816. if (null != $message->import_department_id && $message->import_department_id != 0) {
  817. $departs = Department::query()->selectRaw('name')->where('id', '=', $message->import_department_id)->get();
  818. foreach ($departs as $depart) {
  819. $departName = $depart->name;
  820. }
  821. }
  822. if ($departTotalNums != null && $departTotalNums != 0) {
  823. //算出完成率
  824. $departRate = (round(($departOkNums / $departTotalNums), 4) * 100) . '%';
  825. $data[] = [
  826. 'departName' => $departName,
  827. 'departRate' => $departRate
  828. ];
  829. }
  830. }
  831. $data = arraySort($data, 'departRate');
  832. break;
  833. case 3:
  834. //近一年
  835. $yearAgo = Carbon::now()->addDays(-364)->toDateString();
  836. //根据部门id分组查询,获取到该部门近一月内的数量
  837. $messages = Message::query()->whereIn('import_department_id', $s_department_ids)->when($department_id, function ($query) use ($department_ids) {
  838. return $query->whereIn('import_department_id', $department_ids);
  839. })->selectRaw('count(id) as nums,import_department_id')->where('import_department_id', '!=', '0')->whereBetween('created_at', [$yearAgo, $day])->groupBy('import_department_id')->get();
  840. foreach ($messages as $message) {
  841. //根据部门id查询近一年内的已处理完成的数量
  842. $departOkNums = Message::query()->whereBetween('created_at', [$yearAgo, $day])->where('import_department_id', '=', $message->import_department_id)->where('deal_status', '=', DealStatusEnum::OK)->count();
  843. //部门总数量
  844. $departTotalNums = $message->nums;
  845. //部门名称
  846. $departName = '';
  847. if (null != $message->import_department_id && $message->import_department_id != 0) {
  848. $departs = Department::query()->selectRaw('name')->where('id', '=', $message->import_department_id)->get();
  849. foreach ($departs as $depart) {
  850. $departName = $depart->name;
  851. }
  852. }
  853. if ($departTotalNums != null && $departTotalNums != 0) {
  854. //算出完成率
  855. $departRate = (round(($departOkNums / $departTotalNums), 4) * 100) . '%';
  856. $data[] = [
  857. 'departName' => $departName,
  858. 'departRate' => $departRate
  859. ];
  860. }
  861. }
  862. $data = arraySort($data, 'departRate');
  863. break;
  864. }
  865. return $this->response->success($data);
  866. }
  867. /**
  868. * 事项来源统计
  869. * @param Request $request
  870. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  871. * @throws \Illuminate\Validation\ValidationException
  872. */
  873. public function typeStatistics(Request $request)
  874. {
  875. $data = $this->validateData($request, [
  876. 'date_type' => 'required|in:1,2,3'
  877. ]);
  878. $date_type = $data['date_type'];
  879. $department_id = $request->get('department_id', false);
  880. $department_ids = Department::byIdGetChildIds($department_id);
  881. $s_department_ids = Department::statistics();
  882. $data = [];
  883. switch ($date_type) {
  884. case 1:
  885. //近一周
  886. $day = Carbon::now()->addDays(-6)->toDateString();
  887. $messages = Message::query()->whereIn('import_department_id', $s_department_ids)->selectRaw('count(id) as nums,type_id')->when($department_id, function ($query) use ($department_ids) {
  888. return $query->whereIn('import_department_id', $department_ids);
  889. })->whereDate('created_at', '>=', $day)->groupBy('type_id')->with(['type'])->get();
  890. foreach ($messages as $message) {
  891. $data[] = [
  892. //$message['type'] ? $message['type']['name'] : '' => $message->nums,
  893. 'value' => $message->nums,
  894. 'name' => $message['type'] ? $message['type']['name'] : ''
  895. ];
  896. }
  897. $data = arraySort($data, 'value');
  898. break;
  899. case 2:
  900. //近一月
  901. $day = Carbon::now()->addDays(-29)->toDateString();
  902. $messages = Message::query()->whereIn('import_department_id', $s_department_ids)->selectRaw('count(id) as nums,type_id')->when($department_id, function ($query) use ($department_ids) {
  903. return $query->whereIn('import_department_id', $department_ids);
  904. })->whereDate('created_at', '>=', $day)->groupBy('type_id')->with(['type'])->get();
  905. foreach ($messages as $message) {
  906. $data[] = [
  907. //$message['type'] ? $message['type']['name'] : '' => $message->nums,
  908. 'value' => $message->nums,
  909. 'name' => $message['type'] ? $message['type']['name'] : ''
  910. ];
  911. }
  912. $data = arraySort($data, 'value');
  913. break;
  914. case 3:
  915. //近一年
  916. $day = Carbon::now()->addDays(-364)->toDateString();
  917. $messages = Message::query()->whereIn('import_department_id', $s_department_ids)->selectRaw('count(id) as nums,type_id')->when($department_id, function ($query) use ($department_ids) {
  918. return $query->whereIn('import_department_id', $department_ids);
  919. })->whereDate('created_at', '>=', $day)->groupBy('type_id')->with(['type'])->get();
  920. foreach ($messages as $message) {
  921. $data[] = [
  922. //$message['type'] ? $message['type']['name'] : '' => $message->nums,
  923. 'value' => $message->nums,
  924. 'name' => $message['type'] ? $message['type']['name'] : ''
  925. ];
  926. }
  927. $data = arraySort($data, 'value');
  928. break;
  929. }
  930. return $this->response->success($data);
  931. }
  932. /**
  933. * 事项涉及部门数量统计
  934. * @param Request $request
  935. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  936. * @throws \Illuminate\Validation\ValidationException
  937. */
  938. public function departmentStatistics(Request $request)
  939. {
  940. $data = $this->validateData($request, [
  941. 'date_type' => 'required|in:1,2,3'
  942. ]);
  943. $date_type = $data['date_type'];
  944. $department_id = $request->get('department_id', false);
  945. $department_ids = [];
  946. if ($department_id) $department_ids = Department::byIdGetChildIds($department_id);
  947. $s_department_ids = Department::statistics();
  948. $data = [];
  949. //全部部门
  950. $departments = Department::getLast();
  951. switch ($date_type) {
  952. case 1:
  953. //近一周
  954. $day = Carbon::now()->addDays(-6)->toDateString();
  955. foreach ($departments as $department_id) {
  956. if (count($department_ids) && !in_array($department_id, $department_ids)) continue;
  957. $nums = Message::query()->whereIn('import_department_id', $s_department_ids)->where('import_department_id', $department_id)->whereDate('created_at', '>=', $day)->count();
  958. if ($nums == 0) continue;
  959. $data[] = [
  960. 'name' => Department::query()->where('id', $department_id)->value('name'),
  961. 'value' => $nums
  962. ];
  963. }
  964. $data = arraySort($data, 'value');
  965. break;
  966. case 2:
  967. //近一月
  968. $day = Carbon::now()->addDays(-29)->toDateString();
  969. foreach ($departments as $department_id) {
  970. if (count($department_ids) && !in_array($department_id, $department_ids)) continue;
  971. $nums = Message::query()->whereIn('import_department_id', $s_department_ids)->where('import_department_id', $department_id)->whereDate('created_at', '>=', $day)->count();
  972. if ($nums == 0) continue;
  973. $data[] = [
  974. 'name' => Department::query()->where('id', $department_id)->value('name'),
  975. 'value' => $nums
  976. ];
  977. }
  978. $data = arraySort($data, 'value');
  979. break;
  980. case 3:
  981. //近一年
  982. $day = Carbon::now()->addDays(-364)->toDateString();
  983. foreach ($departments as $department_id) {
  984. if (count($department_ids) && !in_array($department_id, $department_ids)) continue;
  985. $nums = Message::query()->whereIn('import_department_id', $s_department_ids)->where('import_department_id', $department_id)->whereDate('created_at', '>=', $day)->count();
  986. if ($nums == 0) continue;
  987. $data[] = [
  988. 'name' => Department::query()->where('id', $department_id)->value('name'),
  989. 'value' => $nums
  990. ];
  991. }
  992. $data = arraySort($data, 'value');
  993. break;
  994. }
  995. return $this->response->success($data);
  996. }
  997. /**
  998. * 事项涉及区域数量统计
  999. * @param Request $request
  1000. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  1001. * @throws \Illuminate\Validation\ValidationException
  1002. */
  1003. public function addressStatistics(Request $request)
  1004. {
  1005. $data = $this->validateData($request, [
  1006. 'date_type' => 'required|in:1,2,3'
  1007. ]);
  1008. $date_type = $data['date_type'];
  1009. $department_id = $request->get('department_id', false);
  1010. $department_ids = Department::byIdGetChildIds($department_id);
  1011. $s_department_ids = Department::statistics();
  1012. $data = [];
  1013. //全部部门
  1014. $departments = Department::getLast();
  1015. switch ($date_type) {
  1016. case 1:
  1017. //近一周
  1018. $day = Carbon::now()->addDays(-6)->toDateString();
  1019. $messages = Message::query()->whereIn('import_department_id', $s_department_ids)->selectRaw('count(id) as nums,address_name')->when($department_id, function ($query) use ($department_ids) {
  1020. return $query->whereIn('import_department_id', $department_ids);
  1021. })->where('address_name', '!=', '')->whereDate('created_at', '>=', $day)->groupBy('address_name')->get();
  1022. foreach ($messages as $message) {
  1023. $data[] = [
  1024. //$message->address_name => $message->nums,
  1025. 'name' => $message->address_name,
  1026. 'value' => $message->nums
  1027. ];
  1028. }
  1029. $data = arraySort($data, 'value');
  1030. break;
  1031. case 2:
  1032. //近一月
  1033. $day = Carbon::now()->addDays(-29)->toDateString();
  1034. $messages = Message::query()->whereIn('import_department_id', $s_department_ids)->selectRaw('count(id) as nums,address_name')->when($department_id, function ($query) use ($department_ids) {
  1035. return $query->whereIn('import_department_id', $department_ids);
  1036. })->where('address_name', '!=', '')->whereDate('created_at', '>=', $day)->groupBy('address_name')->get();
  1037. foreach ($messages as $message) {
  1038. $data[] = [
  1039. 'name' => $message->address_name,
  1040. 'value' => $message->nums
  1041. ];
  1042. }
  1043. $data = arraySort($data, 'value');
  1044. break;
  1045. case 3:
  1046. //近一年
  1047. $day = Carbon::now()->addDays(-364)->toDateString();
  1048. $messages = Message::query()->whereIn('import_department_id', $s_department_ids)->selectRaw('count(id) as nums,address_name')->when($department_id, function ($query) use ($department_ids) {
  1049. return $query->whereIn('import_department_id', $department_ids);
  1050. })->where('address_name', '!=', '')->whereDate('created_at', '>=', $day)->groupBy('address_name')->get();
  1051. foreach ($messages as $message) {
  1052. $data[] = [
  1053. 'name' => $message->address_name,
  1054. 'value' => $message->nums
  1055. ];
  1056. }
  1057. $data = arraySort($data, 'value');
  1058. break;
  1059. }
  1060. return $this->response->success($data);
  1061. }
  1062. }