MessageController.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600
  1. <?php
  2. namespace App\Http\Controllers\Admin\Manage;
  3. use App\Exports\Manage\SimilarAddressExport;
  4. use App\Exports\Manage\SimilarBodyExport;
  5. use App\Exports\Manage\SimilarPeopleExport;
  6. use App\Exports\Manage\SimilarTypeExport;
  7. use App\Http\Controllers\Controller;
  8. use App\Jobs\Manage\AutoAnalysisMessageJob;
  9. use App\Repositories\Enums\Manage\DealStatusEnum;
  10. use App\Services\Manage\MessageService;
  11. use Carbon\Carbon;
  12. use Illuminate\Http\Request;
  13. use Maatwebsite\Excel\Facades\Excel;
  14. /**
  15. * 信息管理
  16. */
  17. class MessageController extends Controller
  18. {
  19. /**
  20. * @var MessageService
  21. */
  22. private $messageService;
  23. /**
  24. * MessageController constructor.
  25. *
  26. * @param MessageService $messageService
  27. */
  28. public function __construct(MessageService $messageService)
  29. {
  30. parent::__construct();
  31. $this->middleware('checkUserPermission');
  32. $this->messageService = $messageService;
  33. }
  34. /**
  35. * 列表
  36. * @param Request $request
  37. *
  38. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  39. * @throws \Prettus\Repository\Exceptions\RepositoryException
  40. */
  41. public function index(Request $request)
  42. {
  43. $messages = $this->messageService->handleList($request);
  44. return $this->response->success($messages);
  45. }
  46. /**
  47. * 新增
  48. * @param Request $request
  49. *
  50. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  51. * @throws \Prettus\Validator\Exceptions\ValidatorException
  52. */
  53. public function store(Request $request)
  54. {
  55. $data = $this->validateData($request, [
  56. 'type_id' => 'required|integer',
  57. 'category_id' => 'required|integer',
  58. 'name' => 'required|string|max:300',
  59. // 'sex' => 'required|in:0,1,2',
  60. // 'id_card' => 'nullable|id_card',
  61. 'mobile' => 'required|mobile',
  62. // 'address' => 'nullable',
  63. 'complain_date' => 'required|date',
  64. // 'warn_type_id' => 'required|integer',
  65. // 'goal' => 'nullable',
  66. 'body' => 'required|string',
  67. 'remark' => 'nullable',
  68. 'deal_department_id' => 'required|integer',
  69. 'deal_status' => 'required|integer',
  70. 'deal_time' => 'nullable',
  71. 'deal_idea' => 'nullable',
  72. 'deal_evaluation' => 'nullable',
  73. 'deal_limit_day' => 'required|integer',
  74. 'status' => 'required|integer',
  75. ], [
  76. 'type_id' => '来源',
  77. 'category_id' => '分类',
  78. 'name' => '投诉人姓名',
  79. 'sex' => '投诉人性别',
  80. 'id_card' => '投诉人身份证号',
  81. 'mobile' => '投诉人手机号',
  82. 'address' => '投诉人地址',
  83. 'complain_date' => '投诉日期',
  84. 'warn_type_id' => '紧急类型',
  85. 'goal' => '投诉目的',
  86. 'body' => '投诉内容',
  87. 'remark' => '备注',
  88. 'status' => '状态',
  89. 'deal_department_id' => '处理部门',
  90. 'deal_status' => '处理状态',
  91. 'deal_time' => '处理时间',
  92. 'deal_idea' => '处理意见',
  93. 'deal_evaluation' => '满意度',
  94. 'deal_limit_day' => '处理限期',
  95. 'import_record_id' => '导入记录id',
  96. ]);
  97. if ($data['deal_status'] == DealStatusEnum::OK) {
  98. $this->validateData($request, [
  99. 'deal_time' => 'required',
  100. 'deal_idea' => 'required',
  101. 'deal_evaluation' => 'required|integer',
  102. 'deal_file_ids' => 'nullable|array',
  103. ], [
  104. 'deal_time' => '处理时间',
  105. 'deal_idea' => '处理意见',
  106. 'deal_evaluation' => '满意度',
  107. 'deal_file_ids' => '处理完结附件',
  108. ]);
  109. } else {
  110. $data['deal_evaluation'] = 0;
  111. }
  112. $message = $this->messageService->handleStore($data);
  113. //自动分析
  114. $this->dispatch(new AutoAnalysisMessageJob($message->id));
  115. return $this->response->created($message, '创建成功');
  116. }
  117. /**
  118. * 详情
  119. * @param Request $request
  120. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  121. */
  122. public function show(Request $request)
  123. {
  124. $this->validate($request, ['id' => 'required|integer']);
  125. $message = $this->messageService->handleProfile($request->get('id'));
  126. return $this->response->success($message);
  127. }
  128. /**
  129. * 更新
  130. * @param Request $request
  131. *
  132. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  133. * @throws \Prettus\Validator\Exceptions\ValidatorException
  134. */
  135. public function update(Request $request)
  136. {
  137. $data = $this->validateData($request, [
  138. 'id' => 'required|integer',
  139. 'type_id' => 'required|integer',
  140. 'category_id' => 'required|integer',
  141. 'name' => 'required|string|max:300',
  142. // 'sex' => 'required|in:0,1,2',
  143. // 'id_card' => 'nullable|id_card',
  144. 'mobile' => 'required|mobile',
  145. // 'address' => 'nullable',
  146. 'complain_date' => 'required|date',
  147. // 'warn_type_id' => 'required|integer',
  148. // 'goal' => 'nullable',
  149. 'body' => 'required|string',
  150. 'remark' => 'nullable',
  151. 'deal_status' => 'required|integer',
  152. 'deal_department_id' => 'required|integer',
  153. 'deal_time' => 'nullable',
  154. 'deal_idea' => 'nullable',
  155. 'deal_file_ids' => 'nullable|array',
  156. 'deal_evaluation' => 'nullable',
  157. 'deal_limit_day' => 'required|integer',
  158. 'status' => 'required|integer',
  159. ], [
  160. 'type_id' => '来源',
  161. 'category_id' => '分类',
  162. 'name' => '投诉人姓名',
  163. 'sex' => '投诉人性别',
  164. 'id_card' => '投诉人身份证号',
  165. 'mobile' => '投诉人手机号',
  166. 'address' => '投诉人地址',
  167. 'complain_date' => '投诉日期',
  168. 'warn_type_id' => '紧急类型',
  169. 'goal' => '投诉目的',
  170. 'body' => '投诉内容',
  171. 'remark' => '备注',
  172. 'status' => '状态',
  173. 'deal_status' => '处理状态',
  174. 'deal_department_id' => '处理部门',
  175. 'deal_time' => '处理时间',
  176. 'deal_idea' => '处理意见',
  177. 'deal_evaluation' => '满意度',
  178. 'deal_limit_day' => '处理限期',
  179. 'deal_file_ids' => '处理完结附件',
  180. 'import_record_id' => '导入记录id',
  181. ]);
  182. if ($data['deal_status'] == DealStatusEnum::OK) {
  183. $this->validateData($request, [
  184. 'deal_time' => 'required',
  185. 'deal_idea' => 'required',
  186. 'deal_evaluation' => 'required|integer',
  187. ], [
  188. 'deal_time' => '处理时间',
  189. 'deal_idea' => '处理意见',
  190. 'deal_evaluation' => '满意度',
  191. ]);
  192. } else {
  193. $data['deal_evaluation'] = 0;
  194. }
  195. $message = $this->messageService->handleUpdate($data);
  196. return $this->response->success($message, '更新成功');
  197. }
  198. /**
  199. * 删除
  200. * @param Request $request
  201. */
  202. public function destroy(Request $request)
  203. {
  204. $this->validate($request, ['id' => 'required|integer']);
  205. $re = $this->messageService->handleDelete($request->get('id'));
  206. if ($re) {
  207. return $this->response->ok('删除成功');
  208. }
  209. return $this->response->fail('删除失败');
  210. }
  211. /**
  212. * 批量删除
  213. * @param Request $request
  214. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  215. * @throws \Illuminate\Validation\ValidationException
  216. */
  217. public function batchDelete(Request $request)
  218. {
  219. $this->validate($request, ['ids' => 'required|array']);
  220. $this->messageService->handleBatchDelete($request->get('ids'));
  221. return $this->response->ok('删除成功');
  222. }
  223. /**
  224. * 分配任务
  225. * @param Request $request
  226. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  227. */
  228. public function allot(Request $request)
  229. {
  230. $data = $this->validateData($request, [
  231. 'id' => 'required|integer',
  232. 'deal_department_id' => 'required|integer',
  233. 'deal_admin_id' => 'required|integer',
  234. ], [
  235. 'id' => 'id',
  236. 'deal_department_id' => '部门id',
  237. 'deal_admin_id' => '管理员id',
  238. ]);
  239. $this->messageService->handleAllot($data['id'], $data['deal_department_id'], $data['deal_admin_id']);
  240. return $this->response->ok('操作成功');
  241. }
  242. /**
  243. * 批量分配
  244. * @param Request $request
  245. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  246. * @throws \Illuminate\Validation\ValidationException
  247. */
  248. public function batchAllot(Request $request)
  249. {
  250. $data = $this->validateData($request, [
  251. 'ids' => 'required|array',
  252. 'deal_department_id' => 'required|integer',
  253. 'deal_admin_id' => 'required|integer',
  254. ], [
  255. 'id' => 'id',
  256. 'deal_department_id' => '部门id',
  257. 'deal_admin_id' => '管理员id',
  258. ]);
  259. $this->messageService->handleBatchAllot($data['ids'], $data['deal_department_id'], $data['deal_admin_id']);
  260. return $this->response->ok('操作成功');
  261. }
  262. /**
  263. * 办结
  264. * @param Request $request
  265. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  266. * @throws \Illuminate\Validation\ValidationException
  267. */
  268. public function finish(Request $request)
  269. {
  270. $data = $this->validateData($request, [
  271. 'id' => 'required|integer',
  272. 'deal_idea' => 'required',
  273. 'deal_evaluation' => 'required|integer',
  274. 'deal_file_ids' => 'nullable|array',
  275. ], [
  276. 'id' => 'id',
  277. 'deal_idea' => '意见',
  278. 'deal_evaluation' => '满意度',
  279. 'deal_file_ids' => '附件',
  280. ]);
  281. $this->messageService->handleFinish($data);
  282. return $this->response->ok('操作成功');
  283. }
  284. /**
  285. * 批量办结
  286. * @param Request $request
  287. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  288. * @throws \Illuminate\Validation\ValidationException
  289. */
  290. public function batchFinish(Request $request)
  291. {
  292. $data = $this->validateData($request, [
  293. 'ids' => 'required|array',
  294. 'deal_idea' => 'required',
  295. 'deal_evaluation' => 'required|integer',
  296. ], [
  297. 'ids' => 'id',
  298. 'deal_idea' => '意见',
  299. 'deal_evaluation' => '满意度',
  300. ]);
  301. $this->messageService->handleBatchFinish($data);
  302. return $this->response->ok('操作成功');
  303. }
  304. /**
  305. * 转办
  306. * @param Request $request
  307. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  308. */
  309. public function transfer(Request $request)
  310. {
  311. $data = $this->validateData($request, [
  312. 'ids' => 'required|array',
  313. 'deal_department_id' => 'required|integer',
  314. 'deal_admin_id' => 'required|integer',
  315. ], [
  316. 'id' => 'id',
  317. 'deal_department_id' => '部门id',
  318. 'deal_admin_id' => '管理员id',
  319. ]);
  320. $this->messageService->handleTransfer($data['id'], $data['deal_department_id'], $data['deal_admin_id']);
  321. return $this->response->ok('操作成功');
  322. }
  323. // /**
  324. // * 转办
  325. // * @param Request $request
  326. // * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  327. // * @throws \Illuminate\Validation\ValidationException
  328. // */
  329. // public function batchTransfer(Request $request)
  330. // {
  331. // $data = $this->validateData($request, [
  332. // 'ids' => 'required|array',
  333. // 'deal_department_id' => 'required|integer',
  334. // 'deal_admin_id' => 'required|integer',
  335. // ], [
  336. // 'id' => 'id',
  337. // 'deal_department_id' => '部门id',
  338. // 'deal_admin_id' => '管理员id',
  339. // ]);
  340. //
  341. // $this->messageService->handleBatchTransfer($data['ids'], $data['deal_department_id'], $data['deal_admin_id']);
  342. //
  343. // return $this->response->ok('操作成功');
  344. // }
  345. /**
  346. * 多部门协助
  347. * @param Request $request
  348. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  349. * @throws \Illuminate\Validation\ValidationException
  350. */
  351. public function applicationMultiDepartment(Request $request)
  352. {
  353. $data = $this->validateData($request, [
  354. 'id' => 'required|integer',
  355. 'reason' => 'required',
  356. 'multiData' => 'required|array',
  357. 'multiData.*.department_id' => 'required|integer',
  358. 'multiData.*.limit_day' => 'required|integer',
  359. 'multiData.*.body' => 'required',
  360. 'multiData.*.claim' => 'nullable',
  361. ], [
  362. 'reason' => '原因',
  363. 'multiData' => '多部门协调数据',
  364. ]);
  365. $this->messageService->handleApplicationMultiDepartment($data);
  366. return $this->response->ok('操作成功');
  367. }
  368. /**
  369. * 审核
  370. * @param Request $request
  371. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  372. * @throws \Illuminate\Validation\ValidationException
  373. */
  374. public function checkApplicationMultiDepartment(Request $request)
  375. {
  376. $data = $this->validateData($request, [
  377. 'id' => 'required|integer',
  378. 'reason' => 'required',
  379. // 'check_status' => 'required:in:2,3',
  380. 'multiData' => 'required|array',
  381. 'multiData.*.department_id' => 'required|integer',
  382. 'multiData.*.limit_day' => 'required|integer',
  383. 'multiData.*.body' => 'required',
  384. 'multiData.*.claim' => 'nullable',
  385. ], [
  386. 'reason' => '原因',
  387. 'multiData' => '多部门协调数据',
  388. ]);
  389. $this->messageService->handleCheckApplicationMultiDepartment($data);
  390. return $this->response->ok('操作成功');
  391. }
  392. /**
  393. * 受理
  394. * @param Request $request
  395. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  396. * @throws \Illuminate\Validation\ValidationException
  397. */
  398. public function accept(Request $request)
  399. {
  400. $data = $this->validateData($request, [
  401. 'id' => 'required|integer',
  402. ], [
  403. 'id' => 'id',
  404. ]);
  405. $this->messageService->handleAccept($data);
  406. return $this->response->ok('操作成功');
  407. }
  408. /**
  409. * 相似人聚合
  410. * @param Request $request
  411. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  412. */
  413. public function similarPeople(Request $request)
  414. {
  415. $data = $this->messageService->handleSimilarPeople($request);
  416. return $this->response->success($data);
  417. }
  418. /**
  419. * 相似地址
  420. * @param Request $request
  421. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  422. */
  423. public function similarAddress(Request $request)
  424. {
  425. $data = $this->messageService->handleSimilarAddress($request);
  426. return $this->response->success($data);
  427. }
  428. /**
  429. * 相似行业
  430. * @param Request $request
  431. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  432. */
  433. public function similarType(Request $request)
  434. {
  435. $data = $this->messageService->handleSimilarType($request);
  436. return $this->response->success($data);
  437. }
  438. /**
  439. * 导出相似人
  440. * @param Request $request
  441. * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
  442. * @throws \Illuminate\Validation\ValidationException
  443. */
  444. public function exportSimilarPeople(Request $request)
  445. {
  446. $data = $this->validateData($request, [
  447. 'ids' => 'required|array',
  448. ]);
  449. $file_name = time() . '.xlsx';
  450. return Excel::download(new SimilarPeopleExport($data), $file_name);
  451. }
  452. /**
  453. * 相似地址
  454. * @param Request $request
  455. * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
  456. * @throws \Illuminate\Validation\ValidationException
  457. */
  458. public function exportSimilarAddress(Request $request)
  459. {
  460. $data = $this->validateData($request, [
  461. 'ids' => 'required|array',
  462. ]);
  463. $file_name = time() . '.xlsx';
  464. return Excel::download(new SimilarAddressExport($data), $file_name);
  465. }
  466. /**
  467. * 相似类型
  468. * @param Request $request
  469. * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
  470. * @throws \Illuminate\Validation\ValidationException
  471. */
  472. public function exportSimilarType(Request $request)
  473. {
  474. $data = $this->validateData($request, [
  475. 'ids' => 'required|array',
  476. ]);
  477. $file_name = time() . '.xlsx';
  478. return Excel::download(new SimilarTypeExport($data), $file_name);
  479. }
  480. /**
  481. * 相似案情
  482. * @param Request $request
  483. * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
  484. * @throws \Illuminate\Validation\ValidationException
  485. */
  486. public function exportMessage(Request $request)
  487. {
  488. $data = $this->validateData($request, [
  489. 'ids' => 'required|array',
  490. ]);
  491. $file_name = time() . '.xlsx';
  492. return Excel::download(new SimilarBodyExport($data), $file_name);
  493. }
  494. /**
  495. * 相似数据
  496. * @param Request $request
  497. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  498. * @throws \Illuminate\Validation\ValidationException
  499. */
  500. public function similar(Request $request)
  501. {
  502. $data = $this->validateData($request, [
  503. 'id' => 'required|integer',
  504. ]);
  505. $lists = $this->messageService->handleSimilar($data);
  506. return $this->response->success($lists);
  507. }
  508. /**
  509. * 移除相似
  510. * @param Request $request
  511. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  512. * @throws \Illuminate\Validation\ValidationException
  513. */
  514. public function removeSimilar(Request $request)
  515. {
  516. $data = $this->validateData($request, [
  517. 'id' => 'required|integer',
  518. 'mids' => 'required|array',
  519. ]);
  520. $this->messageService->handleRemoveSimilar($data);
  521. return $this->response->ok('操作成功');
  522. }
  523. /**
  524. * 聚合数据
  525. * @param Request $request
  526. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  527. * @throws \Illuminate\Validation\ValidationException
  528. */
  529. public function checkSimilar(Request $request)
  530. {
  531. $data = $this->validateData($request, [
  532. 'id' => 'required|integer',
  533. ]);
  534. $this->messageService->handleCheckSimilar($data);
  535. return $this->response->ok('操作成功');
  536. }
  537. /**
  538. * 指挥交办数量查询--员工端小程序
  539. * @param Request $request
  540. *
  541. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  542. * @throws \Prettus\Validator\Exceptions\ValidatorException
  543. */
  544. public function nums(Request $request)
  545. {
  546. $data = $this->messageService->nums($request);
  547. return $this->response->success($data);
  548. }
  549. }