PublicController.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586
  1. <?php
  2. declare (strict_types = 1);
  3. namespace App\Controller;
  4. use App\JsonRpc\PublicRpcServiceInterface;
  5. use App\Tools\CommonService;
  6. use App\Tools\PublicData;
  7. use App\Tools\Result;
  8. use function Hyperf\Support\env;
  9. use Hyperf\Context\Context;
  10. use Hyperf\Di\Annotation\Inject;
  11. use Hyperf\HttpServer\Contract\RequestInterface;
  12. use Hyperf\HttpServer\Contract\ResponseInterface;
  13. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  14. use ZipArchive;
  15. /**
  16. * Class PublicController
  17. * @package App\Controller
  18. */
  19. //#[AutoController]
  20. class PublicController extends AbstractController
  21. {
  22. #[Inject]
  23. protected ValidatorFactoryInterface $validationFactory;
  24. /**
  25. * @var PublicRpcServiceInterface
  26. */
  27. #[Inject]
  28. private $publicServiceClient;
  29. /**
  30. * 地区
  31. * @return array
  32. */
  33. public function getDistrictList()
  34. {
  35. $pid = $this->request->input("pid", 0);
  36. $data = [
  37. 'pid' => $pid,
  38. ];
  39. $result = $this->publicServiceClient->getDistrictList($data);
  40. return $result ? Result::success($result['data']) : Result::error($result['message']);
  41. }
  42. /**
  43. * 获取用户等级
  44. * @return array
  45. */
  46. public function getUserLevelList()
  47. {
  48. $requireData = $this->request->all();
  49. $result = $this->publicServiceClient->getUserLevelList($requireData);
  50. return $result ? Result::success($result['data']) : Result::error($result['message']);
  51. }
  52. /**
  53. * 上传图片
  54. * @return array
  55. */
  56. public function uploadFile()
  57. {
  58. $urlN = new CommonService();
  59. $file = $this->request->file('file');
  60. $fileName = $this->request->input("fileName", '');
  61. try {
  62. if ($file == null) {
  63. return Result::error("未找到上传文件");
  64. }
  65. $data = CommonService::uploadFile($file, ['png', 'jpg', 'png', 'jpeg', 'gif', 'xls', 'xlsx', 'pdf', 'xls', 'xlsx', 'doc', 'docx', 'ppt', 'zip', 'pptx', 'mp4', 'flv'], 'image');
  66. $data['imgUrl'] = $urlN->imgUrl($data['src']);
  67. $data['oldFileName'] = $fileName;
  68. return Result::success($data, '上传成功');
  69. } catch (\Exception $e) {
  70. return Result::error($e->getMessage());
  71. }
  72. }
  73. /**
  74. * 添加用户等级
  75. * @return array
  76. */
  77. public function addUserLevel()
  78. {
  79. $requireData = $this->request->all();
  80. $validator = $this->validationFactory->make(
  81. $requireData,
  82. [
  83. 'name' => 'required',
  84. ],
  85. [
  86. 'name.required' => '等级名不能为空',
  87. ]
  88. );
  89. if ($validator->fails()) {
  90. $errorMessage = $validator->errors()->first();
  91. return Result::error($errorMessage);
  92. }
  93. $result = $this->publicServiceClient->addUserLevel($requireData);
  94. return $result ? Result::success($result['data']) : Result::error($result['message']);
  95. }
  96. /**
  97. * 删除用户等级
  98. * @return array
  99. */
  100. public function delUserLevel()
  101. {
  102. $requireData = $this->request->all();
  103. $validator = $this->validationFactory->make(
  104. $requireData,
  105. [
  106. 'id' => 'required',
  107. ],
  108. [
  109. 'id.required' => 'ID不能为空',
  110. ]
  111. );
  112. if ($validator->fails()) {
  113. $errorMessage = $validator->errors()->first();
  114. return Result::error($errorMessage);
  115. }
  116. $result = $this->publicServiceClient->delUserLevel($requireData);
  117. return $result ? Result::success($result['data']) : Result::error($result['message']);
  118. }
  119. /**
  120. * 更新用户等级
  121. * @return array
  122. */
  123. public function updateUserLevel()
  124. {
  125. $requireData = $this->request->all();
  126. $validator = $this->validationFactory->make(
  127. $requireData,
  128. [
  129. 'name' => 'required',
  130. 'id' => 'required',
  131. ],
  132. [
  133. 'id.required' => 'ID不能为空',
  134. 'name.required' => '名称不能为空',
  135. ]
  136. );
  137. if ($validator->fails()) {
  138. $errorMessage = $validator->errors()->first();
  139. return Result::error($errorMessage);
  140. }
  141. $result = $this->publicServiceClient->updateUserLevel($requireData);
  142. return $result ? Result::success($result['data']) : Result::error($result['message']);
  143. }
  144. /**
  145. * 城市列表
  146. * @return array
  147. */
  148. public function getCityList()
  149. {
  150. $requireData = $this->request->all();
  151. var_dump($requireData);
  152. $result = $this->publicServiceClient->getDistrictList($requireData);
  153. return $result ? Result::success($result['data']) : Result::error($result['message']);
  154. }
  155. /**
  156. * 投诉举报
  157. * @return void
  158. */
  159. public function addComplaint()
  160. {
  161. $requireData = $this->request->all();
  162. $validator = $this->validationFactory->make(
  163. $requireData,
  164. [
  165. 'title' => 'required',
  166. 'nature' => 'required',
  167. 'nature_level' => 'required',
  168. 'type' => 'required',
  169. 'name' => 'required',
  170. 'mobile' => 'required',
  171. 'describe' => 'required',
  172. 'type_level' => 'required',
  173. ],
  174. [
  175. 'title.required' => '标题不能为空',
  176. 'nature.required' => '性质不能为空',
  177. 'nature_level.required' => '进度不能为空',
  178. 'type.required' => '类型不能为空',
  179. 'name.required' => '姓名不能为空',
  180. 'mobile.required' => '手机号码不能为空',
  181. 'describe.required' => '详细说明不能为空',
  182. 'type_level.required' => '详细说明不能为空',
  183. ]
  184. );
  185. if ($validator->fails()) {
  186. $errorMessage = $validator->errors()->first();
  187. return Result::error($errorMessage);
  188. }
  189. $requireData = $this->request->all();
  190. $requireData['user_id'] = Context::get("UserId");
  191. if ($requireData['id']) {
  192. $result = $this->publicServiceClient->userUpLetterOfComplaint($requireData);
  193. } else {
  194. $result = $this->publicServiceClient->addLetterOfComplaint($requireData);
  195. }
  196. return $result ? Result::success($result['data']) : Result::error($result['message']);
  197. }
  198. /**
  199. * 更新投诉举报信息
  200. * @return array
  201. */
  202. public function upComplaint()
  203. {
  204. $requireData = $this->request->all();
  205. $validator = $this->validationFactory->make(
  206. $requireData,
  207. [
  208. 'id' => 'required',
  209. ],
  210. [
  211. 'id.required' => 'id不能为空',
  212. ]
  213. );
  214. if ($validator->fails()) {
  215. $errorMessage = $validator->errors()->first();
  216. return Result::error($errorMessage);
  217. }
  218. var_dump($requireData);
  219. if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
  220. $requireData['admin_id'] = Context::get("UserId");
  221. }
  222. $result = $this->publicServiceClient->upLetterOfComplaint($requireData);
  223. return $result ? Result::success([]) : Result::error($result['message']);
  224. }
  225. /**
  226. * 获取投诉列表
  227. * @return array
  228. */
  229. public function getComplaint()
  230. {
  231. $requireData = $this->request->all();
  232. $requireData['user_id'] = Context::get("UserId");
  233. var_dump("用户id:", Context::get("UserId"));
  234. if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
  235. unset($requireData['user_id']);
  236. }
  237. $result = $this->publicServiceClient->getLetterOfComplaint($requireData);
  238. return $result ? Result::success($result['data']) : Result::error($result['message']);
  239. }
  240. /**
  241. * 获取投诉举报信息
  242. * @return array
  243. */
  244. public function getLetterOfComplaintInfo()
  245. {
  246. $requireData = $this->request->all();
  247. $requireData['user_id'] = Context::get("UserId");
  248. if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
  249. unset($requireData['user_id']);
  250. }
  251. $result = $this->publicServiceClient->getLetterOfComplaintInfo($requireData);
  252. if ($result) {
  253. $result['data']['judgment'] = $result['data']['judgment'] ? json_decode($result['data']['judgment']) : '';
  254. $result['data']['audio_and_video'] = $result['data']['audio_and_video'] ? json_decode($result['data']['audio_and_video']) : '';
  255. $result['data']['contract'] = $result['data']['contract'] ? json_decode($result['data']['contract']) : '';
  256. $result['data']['qualifications'] = $result['data']['qualifications'] ? json_decode($result['data']['qualifications']) : '';
  257. }
  258. return $result ? Result::success($result['data']) : Result::error($result['message']);
  259. }
  260. /**
  261. * 删除投诉举报信息
  262. * @return array
  263. */
  264. public function delLetterOfComplaint()
  265. {
  266. $requireData = $this->request->all();
  267. $requireData['user_id'] = Context::get("UserId");
  268. if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
  269. unset($requireData['user_id']);
  270. }
  271. $result = $this->publicServiceClient->delLetterOfComplaint($requireData);
  272. return $result ? Result::success($result['data']) : Result::error($result['message']);
  273. }
  274. /**
  275. * 获取投诉分类信息
  276. * @return array
  277. */
  278. public function getLetterType()
  279. {
  280. $requireData = $this->request->all();
  281. $result = $this->publicServiceClient->getLetterType($requireData);
  282. $rep = PublicData::buildMenuTree($result['data']);
  283. return $rep ? Result::success($rep) : Result::error("查询失败");
  284. }
  285. public function downloadFile(RequestInterface $request, ResponseInterface $response)
  286. {
  287. //验证是否有传参数
  288. $requireData = $this->request->all();
  289. $validator = $this->validationFactory->make(
  290. $requireData,
  291. [
  292. 'files' => 'required',
  293. ],
  294. [
  295. 'files.required' => '文件不能为空',
  296. ]
  297. );
  298. if ($validator->fails()) {
  299. $errorMessage = $validator->errors()->first();
  300. return Result::error($errorMessage);
  301. }
  302. $requireData['fileName'] = $requireData['fileName'] ?? '政讯通';
  303. //打包文件
  304. $zip = new ZipArchive();
  305. $fileType = 'zip';
  306. $date = date('Ymd');
  307. $filePath = $fileType . DIRECTORY_SEPARATOR . $date;
  308. $allDir = 'public' . DIRECTORY_SEPARATOR . $filePath;
  309. if (!is_dir($allDir)) {
  310. if (!mkdir($allDir, 0755, true)) {
  311. return Result::error('创建文件夹失败');
  312. }
  313. }
  314. $fileName = $requireData['fileName'] . time() . mt_rand(1, 1000000) . '.zip';
  315. $zipFileName = $allDir . DIRECTORY_SEPARATOR . $requireData['fileName'] . time() . mt_rand(1, 1000000) . '.zip';
  316. // $zipFileName = 'public/zip/files.zip';
  317. if ($zip->open($zipFileName, ZipArchive::CREATE) === true) {
  318. // 将要下载的文件逐个添加到zip文件中
  319. // $string = trim($requireData['files'], "[]'"); // 去掉最外层的方括号和单引号(注意:这里假设了单引号,如果是双引号则替换为 ")
  320. // $string = str_replace("'", '', $string); // 去掉所有剩余的单引号(如果原字符串中使用的是双引号,则替换为双引号)
  321. // $filePaths = explode(',', $string);
  322. foreach ($requireData['files'] as $filePathu) {
  323. $attachmentItem = 'public/' . $filePathu;
  324. $zip->addFile($attachmentItem, pathinfo($attachmentItem, PATHINFO_BASENAME));
  325. }
  326. // 关闭zip文件
  327. $zip->close();
  328. // 将zip文件提供给用户进行下载
  329. // readfile($zipFileName);
  330. $fileUrlName = explode("public", $zipFileName);
  331. return Result::success(['fileUrl' => env('HOST') . $fileUrlName[1]]);
  332. } else {
  333. return Result::error('无法创建zip文件');
  334. }
  335. }
  336. /**
  337. * 检测是否被处理
  338. * @return array
  339. */
  340. public function checkMeasure()
  341. {
  342. $requireData = $this->request->all();
  343. $validator = $this->validationFactory->make(
  344. $requireData,
  345. [
  346. 'id' => 'required',
  347. ],
  348. [
  349. 'id.required' => 'id不能为空',
  350. ]
  351. );
  352. if ($validator->fails()) {
  353. $errorMessage = $validator->errors()->first();
  354. return Result::error($errorMessage);
  355. }
  356. $requireData['user_id'] = Context::get("UserId");
  357. $result = $this->publicServiceClient->checkMeasure($requireData);
  358. return $result['code'] == 200 ? Result::success() : Result::error("已经处理了");
  359. }
  360. /**
  361. * 获取职能部门
  362. * @return void
  363. */
  364. public function getDepartment()
  365. {
  366. $requireData = $this->request->all();
  367. $validator = $this->validationFactory->make(
  368. $requireData,
  369. [
  370. 'pid' => 'required',
  371. ],
  372. [
  373. 'pid.required' => 'id不能为空',
  374. ]
  375. );
  376. if ($validator->fails()) {
  377. $errorMessage = $validator->errors()->first();
  378. return Result::error($errorMessage);
  379. }
  380. $result = $this->publicServiceClient->getDepartment($requireData);
  381. return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
  382. }
  383. /**
  384. * 获取职能部门
  385. * @return array
  386. */
  387. public function getZhinengbumenList()
  388. {
  389. // 获取请求参数
  390. $requireData = $this->request->all();
  391. // 参数验证
  392. $validator = $this->validationFactory->make(
  393. $requireData,
  394. [
  395. 'page' => 'integer|min:1',
  396. 'pagesize' => 'integer|min:1',
  397. 'search' => 'string|nullable',
  398. ],
  399. [
  400. 'page.integer' => 'page 必须是整数',
  401. 'page.min' => 'page 必须大于等于 1',
  402. 'pagesize.integer' => 'pagesize 必须是整数',
  403. 'pagesize.min' => 'pagesize 必须大于等于 1',
  404. 'search.string' => 'search 必须是字符串',
  405. ]
  406. );
  407. if ($validator->fails()) {
  408. $errorMessage = $validator->errors()->first();
  409. return Result::error($errorMessage);
  410. }
  411. // 添加用户 ID
  412. $requireData['user_id'] = Context::get("UserId");
  413. // 调用服务客户端方法获取分页数据
  414. $result = $this->publicServiceClient->getZhinengbumenList($requireData);
  415. // 处理结果
  416. return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
  417. }
  418. /**
  419. * 添加职能部门
  420. * @return array
  421. */
  422. public function addZhinengbumen()
  423. {
  424. // 获取请求参数
  425. $requireData = $this->request->all();
  426. $validator = $this->validationFactory->make(
  427. $requireData,
  428. [
  429. 'name' => 'required|string|regex:/^[\x{4e00}-\x{9fa5}]+$/u',
  430. 'pid' => 'required|integer',
  431. ],
  432. [
  433. 'name.required' => 'name 不能为空',
  434. 'name.string' => 'name 必须是字符串',
  435. 'name.regex' => 'name 必须是汉字',
  436. 'pid.required' => 'pid 不能为空',
  437. 'pid.integer' => 'pid 必须是整数',
  438. ]
  439. );
  440. if ($validator->fails()) {
  441. $errorMessage = $validator->errors()->first();
  442. return Result::error($errorMessage);
  443. }
  444. // $requireData['user_id'] = Context::get("UserId");
  445. $result = $this->publicServiceClient->addZhinengbumen($requireData);
  446. return $result['code'] == 200 ? Result::success() : Result::error("添加失败");
  447. }
  448. /**
  449. * 删除职能部门
  450. * @return array
  451. */
  452. public function delZhinengbumen()
  453. {
  454. $requireData = $this->request->all();
  455. $validator = $this->validationFactory->make(
  456. $requireData,
  457. [
  458. 'id' => 'required|integer',
  459. ],
  460. [
  461. 'id.required' => 'id 不能为空',
  462. 'id.integer' => 'id 必须是整数',
  463. ]
  464. );
  465. if ($validator->fails()) {
  466. $errorMessage = $validator->errors()->first();
  467. return Result::error($errorMessage);
  468. }
  469. $requireData['user_id'] = Context::get("UserId");
  470. $result = $this->publicServiceClient->delZhinengbumen($requireData);
  471. return $result['code'] == 200 ? Result::success() : Result::error("删除失败");
  472. }
  473. /**
  474. * 职能部门详情
  475. * @return array
  476. */
  477. public function getZhinengbumen()
  478. {
  479. $requireData = $this->request->all();
  480. $validator = $this->validationFactory->make(
  481. $requireData,
  482. [
  483. 'id' => 'required|integer',
  484. ],
  485. [
  486. 'id.required' => 'id 不能为空',
  487. 'id.integer' => 'id 必须是整数',
  488. ]
  489. );
  490. if ($validator->fails()) {
  491. $errorMessage = $validator->errors()->first();
  492. return Result::error($errorMessage);
  493. }
  494. $requireData['user_id'] = Context::get("UserId");
  495. $result = $this->publicServiceClient->getZhinengbumen($requireData);
  496. return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
  497. }
  498. /**
  499. * 获取职能部门某pid的所有子级,默认0级
  500. * @return array
  501. */
  502. public function getPidZhinengbumen()
  503. {
  504. // 获取请求参数
  505. $requireData = $this->request->all();
  506. // 参数验证
  507. $validator = $this->validationFactory->make(
  508. $requireData,
  509. [
  510. 'pid' => 'integer|min:0',
  511. ],
  512. [
  513. 'pid.integer' => 'pid 必须是整数',
  514. 'pid.min' => 'pid 必须大于等于 0',
  515. ]
  516. );
  517. if ($validator->fails()) {
  518. $errorMessage = $validator->errors()->first();
  519. return Result::error($errorMessage);
  520. }
  521. $requireData['user_id'] = Context::get("UserId");
  522. $result = $this->publicServiceClient->getPidZhinengbumen($requireData);
  523. return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
  524. }
  525. /**
  526. * 修改职能部门名称
  527. * @return array
  528. */
  529. public function modZhinengbumen()
  530. {
  531. $requireData = $this->request->all();
  532. // 参数验证
  533. $validator = $this->validationFactory->make(
  534. $requireData,
  535. [
  536. 'id' => 'required|integer',
  537. 'name' => 'required|string|regex:/^[\x{4e00}-\x{9fa5}]+$/u',
  538. ],
  539. [
  540. 'id.required' => 'id 不能为空',
  541. 'id.integer' => 'id 必须是整数',
  542. 'name.required' => 'name 不能为空',
  543. 'name.string' => 'name 必须是字符串',
  544. 'name.regex' => 'name 必须是汉字',
  545. ]
  546. );
  547. if ($validator->fails()) {
  548. $errorMessage = $validator->errors()->first();
  549. return Result::error($errorMessage);
  550. }
  551. $requireData['user_id'] = Context::get("UserId");
  552. $result = $this->publicServiceClient->upZhinengbumen($requireData);
  553. return $result['code'] == 200 ? Result::success() : Result::error("修改失败");
  554. }
  555. }