App_Controller_PublicController.proxy.php 12 KB

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