PublicController.php 20 KB

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