AttachmentService.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. namespace App\User\Services;
  3. use App\Services\CommonUserBaseService;
  4. use App\User\Facades\UserFacade;
  5. use App\User\Models\AttachmentModel;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Cache;
  8. use Illuminate\Support\Facades\Log;
  9. use App\Exceptions\ApiException;
  10. use App\Common\Facades\UploadFileFacade;
  11. use App\Common\Facades\PinYinFacade;
  12. class AttachmentService extends CommonUserBaseService
  13. {
  14. /**
  15. * 文件上传
  16. * @param Request $request
  17. */
  18. public function upload(Request $request)
  19. {
  20. //验证上传文件类型
  21. try {
  22. $isReName= $request->input('is_re_name', false);
  23. $upload = UploadFileFacade::upload($request, $request->input('field', 'file'),[],false,$isReName);
  24. $mimeType = empty($upload['mimeType']) ? '' : $upload['mimeType'];
  25. $data = [
  26. 'user_id' => $this->getAuthUserId(),
  27. 'file' => $upload['url'],//文件地址
  28. 'name' => $upload['filename'] ?? '',//文件名
  29. 'old_name' => $upload['original_filename'] ?? '',//文件名
  30. 'alt' => $upload['original_filename'] ?? '',//文件名
  31. 'size' => $upload['size'],
  32. 'ext' => $upload['ext'],
  33. 'pic'=>empty($upload['pic'])?'':$upload['pic'],
  34. 'resolution' => empty($upload['resolution']) ? '' : $upload['resolution'],
  35. 'type' => $this->getFileType($mimeType)
  36. ];
  37. $data['name'] = str_replace('.' . strtolower($data['ext']), '', $data['name']);
  38. if (empty($data['name'])) {
  39. die;
  40. } else {
  41. $data['first_letter'] = PinYinFacade::getOnePY($data['old_name']);
  42. }
  43. $saveModel = $this->save($data);
  44. return $saveModel;
  45. } catch (\Exception $ex) {
  46. Log::info('method:upload:' . $ex->getMessage());
  47. Log::info('method:upload:' . $ex->getTraceAsString());
  48. throw new ApiException(1004,['msg'=> $ex->getMessage()]);
  49. }
  50. }
  51. /**
  52. * 获取文件类型
  53. * */
  54. private function getFileType($mimeType)
  55. {
  56. $type = 0;
  57. if (strpos($mimeType, 'image') !== false) {
  58. $type = 1;
  59. } else if (strpos($mimeType, 'video') !== false) {
  60. $type = 2;
  61. } else if (strpos($mimeType, 'audio') !== false) {
  62. $type = 3;
  63. }
  64. return $type;
  65. }
  66. /**
  67. * 文件上传
  68. * @param Request $request
  69. */
  70. public function uploadImg($data, $fileExt, $selectFileName = '',$host='',$userId = null)
  71. {
  72. $userId = $userId ?? $this->getAuthUserId();
  73. $upload = UploadFileFacade::uploadImgBase64($data, $fileExt,$host,$selectFileName,false);
  74. //如果该url已存在于该公司
  75. $data = [
  76. 'user_id' => $userId,
  77. 'file' => $upload['url'],//文件地址
  78. 'name' => $upload['filename'] ?? '',//文件名
  79. 'old_name' => $selectFileName ?? '',//文件名
  80. 'alt' => $selectFileName ?? '',//文件名
  81. 'size' => $upload['size'],
  82. 'ext' => $upload['ext'],
  83. 'resolution' => empty($upload['resolution']) ? '' : $upload['resolution'],
  84. 'type' => 1
  85. ];
  86. $data['name'] = str_replace('.' . strtolower($data['ext']), '', $data['name']);
  87. if (empty($data['name'])) {
  88. die;
  89. } else {
  90. $data['first_letter'] = PinYinFacade::getOnePY($data['old_name']);
  91. }
  92. $saveModel = $this->save($data);
  93. return $saveModel;
  94. }
  95. /**
  96. * 附件列表详情
  97. * */
  98. public function getAttachmentList($requestParams)
  99. {
  100. $pageSize = $requestParams['page_size'] ? $requestParams['page_size'] : 10; //页面大小,不传默认一页10条记录
  101. $pageNo = $requestParams['page'] ? $requestParams['page'] : 1; //页码,不传默认第1页
  102. $skip = ($pageNo - 1) * $pageSize; //页面记录的开始位置,即偏移量
  103. $where = [];
  104. $where['a.status'] = 0;
  105. if (isset($requestParams['type']) && $requestParams['type'] !== '' && $requestParams['type'] != -1) {
  106. $where['a.type'] = $requestParams['type'];
  107. }
  108. //查询的月份处理
  109. if (!empty($requestParams['month'])) {
  110. $begin = $requestParams['month'].'-01 00:00:00';
  111. $end = date('Y-m-d 23:59:59',strtotime('+1 month', strtotime($begin)) - 1);
  112. $requestParams['begin_end_time'] = [$begin, $end];
  113. }
  114. $resultData = [];
  115. $model = new AttachmentModel();
  116. $totalCount = $model->alias('a')->where($where)->count();
  117. $query = $model->alias('a')
  118. ->leftJoin('sys_admin_user as b', 'a.user_id', '=', 'b.id')
  119. ->where($where);
  120. if (!empty($requestParams['begin_end_time'])) {
  121. $begin = empty($requestParams['begin_end_time'][0]) ? '' : $requestParams['begin_end_time'][0];
  122. $end = empty($requestParams['begin_end_time'][1]) ? '' : $requestParams['begin_end_time'][1];
  123. if (!empty($begin) && !empty($end)) {
  124. $query->whereBetween('a.create_time', [$begin, $end]);
  125. }
  126. }
  127. if (!empty($requestParams['keyword'])) {
  128. $keyword = $requestParams['keyword'];
  129. $query->where(function ($queryStr) use ($keyword) {
  130. $queryStr->where('a.des', 'like', "%" . $keyword . "%")
  131. ->orWhere('a.alt', 'like', "%" . $keyword . "%")
  132. ->orWhere('a.old_name', 'like', "%" . $keyword . "%")
  133. ->orWhere('a.title', 'like', "%{$keyword}%");
  134. });
  135. }
  136. $data = $query
  137. ->selectRaw('a.*,b.real_name as nick_name,b.user_name,b.real_name')
  138. ->skip($skip)
  139. ->limit($pageSize)
  140. ->orderByDesc('a.create_time')
  141. ->get();
  142. if (!empty($data)) {
  143. $resultData = $data->toArray();
  144. }
  145. $result = buildPage($resultData, $skip, $pageNo, $pageSize, $totalCount);
  146. return $result;
  147. }
  148. public function saveAttachment($params)
  149. {
  150. $model = new AttachmentModel();
  151. $data = $model->where(['id' => $params['id']])->first();
  152. $data->update_time = nowTime();
  153. if ($data->type == 1) {
  154. $data->alt = empty($params['alt']) ? '' : $params['alt'];
  155. $data->title = empty($params['title']) ? '' : $params['title'];
  156. $data->remark = empty($params['remark']) ? '' : $params['remark'];
  157. $data->des = empty($params['des']) ? '' : $params['des'];
  158. }
  159. $data->save();
  160. return $data;
  161. }
  162. public function delAttachment($id)
  163. {
  164. $model = new AttachmentModel();
  165. if (!is_array($id)) {
  166. $ids = [$id];
  167. } else {
  168. $ids = $id;
  169. }
  170. $where = [];
  171. $where['id'] = [['in', $ids]];
  172. $ret = $model->buildQuery($where)->update(['update_time' => nowTime(), 'status' => 2]);
  173. return $ret;
  174. }
  175. public function uploadCustomImage(Request $request)
  176. {
  177. //验证上传文件类型
  178. try {
  179. $allowedRequests = 10;
  180. // 时间窗口,单位为秒
  181. $timeWindow = 60;
  182. $ip = getClientIp();
  183. if ($ip) {
  184. $key = 'upload_custom_image_' . $ip;
  185. $times = Cache::get($key);
  186. if (!$times) {
  187. Cache::put($key, 1, $timeWindow);
  188. } else if ($times >= $allowedRequests) {
  189. throw new ApiException(40002);
  190. } else {
  191. Cache::increment($key);
  192. }
  193. }
  194. $upload = UploadFileFacade::uploadCustomImage($request, 'file', [], false, true);
  195. return $upload['url'] ?? '';
  196. } catch (\Exception $ex) {
  197. Log::info('method:upload:' . $ex->getMessage());
  198. Log::info('method:upload:' . $ex->getTraceAsString());
  199. throw new ApiException(40002);
  200. }
  201. }
  202. }