PublicController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller;
  4. use App\JsonRpc\PublicRpcServiceInterface;
  5. use Hyperf\Di\Annotation\Inject;
  6. use Hyperf\HttpServer\Annotation\AutoController;
  7. use App\Tools\Result;
  8. use App\Tools\CommonService;
  9. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  10. use App\Tools\PublicData;
  11. use Hyperf\HttpServer\Annotation\RequestMapping;
  12. use Hyperf\HttpServer\Contract\RequestInterface;
  13. use Hyperf\HttpServer\Contract\ResponseInterface;
  14. use ZipArchive;
  15. use function Hyperf\Support\env;
  16. /**
  17. * Class PublicController
  18. * @package App\Controller
  19. */
  20. #[AutoController]
  21. class PublicController extends AbstractController
  22. {
  23. #[Inject]
  24. protected ValidatorFactoryInterface $validationFactory;
  25. /**
  26. * @var PublicRpcServiceInterface
  27. */
  28. #[Inject]
  29. private $publicServiceClient;
  30. /**
  31. * 地区
  32. * @return array
  33. */
  34. public function getDistrictList()
  35. {
  36. $pid = $this->request->input("pid",0);
  37. $data = [
  38. 'pid'=>$pid
  39. ];
  40. $result = $this->publicServiceClient->getDistrictList($data);
  41. return $result ? Result::success($result['data']) : Result::error($result['message']);
  42. }
  43. /**
  44. * 获取用户等级
  45. * @return array
  46. */
  47. public function getUserLevelList()
  48. {
  49. $requireData = $this->request->all();
  50. $result = $this->publicServiceClient->getUserLevelList($requireData);
  51. return $result ? Result::success($result['data']) : Result::error($result['message']);
  52. }
  53. /**
  54. * 上传图片
  55. * @return array
  56. */
  57. public function uploadFile()
  58. {
  59. $urlN = new CommonService();
  60. $file = $this->request->file('file');
  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. return Result::success($data, '上传成功');
  68. } catch (\Exception $e) {
  69. return Result::error($e->getMessage());
  70. }
  71. }
  72. /**
  73. * 添加用户等级
  74. * @return array
  75. */
  76. public function addUserLevel()
  77. {
  78. $requireData = $this->request->all();
  79. $validator = $this->validationFactory->make(
  80. $requireData,
  81. [
  82. 'name' => 'required',
  83. ],
  84. [
  85. 'name.required' => '等级名不能为空',
  86. ]
  87. );
  88. if ($validator->fails()){
  89. $errorMessage = $validator->errors()->first();
  90. return Result::error($errorMessage);
  91. }
  92. $result = $this->publicServiceClient->addUserLevel($requireData);
  93. return $result ? Result::success($result['data']) : Result::error($result['message']);
  94. }
  95. /**
  96. * 删除用户等级
  97. * @return array
  98. */
  99. public function delUserLevel()
  100. {
  101. $requireData = $this->request->all();
  102. $validator = $this->validationFactory->make(
  103. $requireData,
  104. [
  105. 'id' => 'required'
  106. ],
  107. [
  108. 'id.required' => 'ID不能为空'
  109. ]
  110. );
  111. if ($validator->fails()){
  112. $errorMessage = $validator->errors()->first();
  113. return Result::error($errorMessage);
  114. }
  115. $result = $this->publicServiceClient->delUserLevel($requireData);
  116. return $result ? Result::success($result['data']) : Result::error($result['message']);
  117. }
  118. /**
  119. * 更新用户等级
  120. * @return array
  121. */
  122. public function updateUserLevel()
  123. {
  124. $requireData = $this->request->all();
  125. $validator = $this->validationFactory->make(
  126. $requireData,
  127. [
  128. 'name' => 'required',
  129. 'id' => 'required'
  130. ],
  131. [
  132. 'id.required' => 'ID不能为空',
  133. 'name.required' => '名称不能为空'
  134. ]
  135. );
  136. if ($validator->fails()){
  137. $errorMessage = $validator->errors()->first();
  138. return Result::error($errorMessage);
  139. }
  140. $result = $this->publicServiceClient->updateUserLevel($requireData);
  141. return $result ? Result::success($result['data']) : Result::error($result['message']);
  142. }
  143. /**
  144. * 城市列表
  145. * @return array
  146. */
  147. public function getCityList()
  148. {
  149. $requireData = $this->request->all();
  150. var_dump($requireData);
  151. $result = $this->publicServiceClient->getDistrictList($requireData);
  152. return $result ? Result::success($result['data']) : Result::error($result['message']);
  153. }
  154. /**
  155. * 投诉举报
  156. * @return void
  157. */
  158. public function addComplaint()
  159. {
  160. $requireData = $this->request->all();
  161. $validator = $this->validationFactory->make(
  162. $requireData,
  163. [
  164. 'title' => 'required',
  165. 'nature' => 'required',
  166. 'nature_level'=> 'required',
  167. 'type'=> 'required',
  168. 'name'=> 'required',
  169. 'mobile'=> 'required',
  170. 'describe'=> 'required',
  171. 'type_level'=> 'required',
  172. ],
  173. [
  174. 'title.required' => '标题不能为空',
  175. 'nature.required' => '性质不能为空',
  176. 'nature_level.required' => '进度不能为空',
  177. 'type.required' => '类型不能为空',
  178. 'name.required' => '姓名不能为空',
  179. 'mobile.required' => '手机号码不能为空',
  180. 'describe.required' => '详细说明不能为空',
  181. 'type_level.required' => '详细说明不能为空',
  182. ]
  183. );
  184. if ($validator->fails()){
  185. $errorMessage = $validator->errors()->first();
  186. return Result::error($errorMessage);
  187. }
  188. $requireData = $this->request->all();
  189. $requireData['user_id'] = $this->UserId;
  190. $result = $this->publicServiceClient->addLetterOfComplaint($requireData);
  191. return $result ? Result::success($result['data']) : Result::error($result['message']);
  192. }
  193. /**
  194. * 更新投诉举报信息
  195. * @return array
  196. */
  197. public function upComplaint()
  198. {
  199. $requireData = $this->request->all();
  200. $validator = $this->validationFactory->make(
  201. $requireData,
  202. [
  203. 'id' => 'required',
  204. ],
  205. [
  206. 'id.required' => 'id不能为空',
  207. ]
  208. );
  209. if ($validator->fails()){
  210. $errorMessage = $validator->errors()->first();
  211. return Result::error($errorMessage);
  212. }
  213. var_dump($requireData);
  214. if(isset($requireData['is_admin']) && !empty($requireData['is_admin'])){
  215. $requireData['admin_id'] = $this->UserId;
  216. }
  217. $result = $this->publicServiceClient->upLetterOfComplaint($requireData);
  218. return $result ? Result::success([]) : Result::error($result['message']);
  219. }
  220. /**
  221. * 获取投诉列表
  222. * @return array
  223. */
  224. public function getComplaint()
  225. {
  226. $requireData = $this->request->all();
  227. $requireData['user_id'] = $this->UserId;
  228. if(isset($data['is_admin']) && !empty($data['is_admin'])){
  229. unset( $requireData['user_id']);
  230. }
  231. $result = $this->publicServiceClient->getLetterOfComplaint($requireData);
  232. return $result ? Result::success($result['data']) : Result::error($result['message']);
  233. }
  234. /**
  235. * 获取投诉举报信息
  236. * @return array
  237. */
  238. public function getLetterOfComplaintInfo()
  239. {
  240. $requireData = $this->request->all();
  241. $requireData['user_id'] = $this->UserId;
  242. if(isset($data['is_admin']) && !empty($data['is_admin'])){
  243. unset( $requireData['user_id']);
  244. }
  245. $result = $this->publicServiceClient->getLetterOfComplaintInfo($requireData);
  246. return $result ? Result::success($result['data']) : Result::error($result['message']);
  247. }
  248. /**
  249. * 删除投诉举报信息
  250. * @return array
  251. */
  252. public function delLetterOfComplaint()
  253. {
  254. $requireData = $this->request->all();
  255. $requireData['user_id'] = $this->UserId;
  256. if(isset($data['is_admin']) && !empty($data['is_admin'])){
  257. unset( $requireData['user_id']);
  258. }
  259. $result = $this->publicServiceClient->delLetterOfComplaint($requireData);
  260. return $result ? Result::success($result['data']) : Result::error($result['message']);
  261. }
  262. /**
  263. * 获取投诉分类信息
  264. * @return array
  265. */
  266. public function getLetterType()
  267. {
  268. $requireData = $this->request->all();
  269. $result = $this->publicServiceClient->getLetterType($requireData);
  270. $rep = PublicData::buildMenuTree($result['data']);
  271. return $rep ? Result::success($rep) : Result::error("查询失败");
  272. }
  273. public function downloadFile(RequestInterface $request, ResponseInterface $response)
  274. {
  275. //验证是否有传参数
  276. $requireData = $this->request->all();
  277. $validator = $this->validationFactory->make(
  278. $requireData,
  279. [
  280. 'files' => 'required',
  281. ],
  282. [
  283. 'files.required' => '文件不能为空',
  284. ]
  285. );
  286. if ($validator->fails()){
  287. $errorMessage = $validator->errors()->first();
  288. return Result::error($errorMessage);
  289. }
  290. $requireData['fileName'] = $requireData['fileName']??'政讯通';
  291. //打包文件
  292. $zip = new ZipArchive();
  293. $fileType = 'zip';
  294. $date = date('Ymd');
  295. $filePath = $fileType . DIRECTORY_SEPARATOR . $date ;
  296. $allDir = 'public' . DIRECTORY_SEPARATOR . $filePath;
  297. if (!is_dir($allDir)) {
  298. if (!mkdir($allDir, 0755, true)) {
  299. return Result::error('创建文件夹失败');
  300. }
  301. }
  302. $fileName = $requireData['fileName'].time().mt_rand(1, 1000000) . '.zip';
  303. $zipFileName = $allDir.DIRECTORY_SEPARATOR.$requireData['fileName'].time().mt_rand(1, 1000000) . '.zip';
  304. // $zipFileName = 'public/zip/files.zip';
  305. if ($zip->open($zipFileName, ZipArchive::CREATE) === TRUE) {
  306. // 将要下载的文件逐个添加到zip文件中
  307. $string = trim($requireData['files'], "[]'"); // 去掉最外层的方括号和单引号(注意:这里假设了单引号,如果是双引号则替换为 ")
  308. $string = str_replace("'", '', $string); // 去掉所有剩余的单引号(如果原字符串中使用的是双引号,则替换为双引号)
  309. $filePaths = explode(',', $string);
  310. foreach ($filePaths as $filePathu) {
  311. $attachmentItem = 'public'.$filePathu;
  312. $zip->addFile($attachmentItem, pathinfo($attachmentItem, PATHINFO_BASENAME));
  313. }
  314. // 关闭zip文件
  315. $zip->close();
  316. // 将zip文件提供给用户进行下载
  317. // readfile($zipFileName);
  318. $fileUrlName = explode("public", $zipFileName);
  319. return Result::success(['fileUrl'=>env('HOST').$fileUrlName[1]]);
  320. } else {
  321. return Result::error('无法创建zip文件');
  322. }
  323. // 假设我们从请求中获取一个名为'filename'的查询参数
  324. // $filenameParam = $request->input('filename', 'files.zip'); // 如果没有提供'filename',则使用'default_filename.csv'
  325. //
  326. // // 构造完整的文件路径(这里假设文件都存放在public目录下)
  327. // $filePath = BASE_PATH . '/public/zip/files.zip'; // 注意:这里应该是你实际文件的路径
  328. //
  329. // // 注意:download方法的第二个参数是可选的,用于指定下载时的文件名
  330. // // 如果不需要动态设置下载文件名,可以省略第二个参数或传递null
  331. // return $response->download($filePath, $filenameParam);
  332. }
  333. }