TravelImageController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. <?php
  2. namespace App\Http\Controllers\TravelImage;
  3. use App\Handlers\ImageUploadHandler;
  4. use App\Http\Controllers\Controller;
  5. use App\Models\TravelImage\TravelFaceInfo;
  6. use App\Models\TravelImage\TravelFaceName;
  7. use App\Models\TravelImage\TravelImage;
  8. use App\Models\TravelImage\TravelImageClass;
  9. use App\Models\TravelImage\TravelImageFolder;
  10. use App\Models\TravelImage\TravelInfo;
  11. use App\Models\TravelImage\TravelUser;
  12. use App\Models\User;
  13. use GuzzleHttp\Client;
  14. use Illuminate\Http\Request;
  15. use Illuminate\Support\Facades\Auth;
  16. use Illuminate\Support\Facades\Log;
  17. class TravelImageController extends Controller{
  18. /**时光相册**/
  19. public function TravelImageList(Request $request){
  20. $input=$request->all();
  21. $page_size=$input['page_size'];
  22. $page_index=$input['page_index'];
  23. $num=$page_size*($page_index-1);
  24. // $array=TravelUser::pluck('travel_id')->toArray();//报名的情况
  25. $array=[1];
  26. $image=TravelImageClass::where('is_deleted',0)->whereIn('travel_id',$array)->with(['get_image'=>function($q)use($array,$type){
  27. $q->where('is_cover',1)->orderByDesc('created_at')->whereIn('travel_id',$array);//只展示用户报名的赛季
  28. },'get_folder'=>function($q)use($array,$type){
  29. $q->orderByDesc('created_at')->whereIn('travel_id',$array);//只展示用户报名的赛季
  30. }])->orderByDesc('travel_id')->orderBy('img_type');
  31. $count=$image->get()->count();
  32. $image=$image->orderByDesc('created_at')->take($page_size)->skip($num)->get();
  33. $re=[];
  34. foreach ($image as $k=>$v){
  35. if ($v->img_type==1){
  36. $re[$k]['imgclass_name']=$v->imgclass_name;
  37. $re[$k]['created_at']=$v->created_at->toDateTimeString();
  38. $re[$k]['count']=$v->count;
  39. $re[$k]['id']=$v->id;
  40. $re[$k]['op_name']=$v->op_name;
  41. $re[$k]['images']=$v->get_image;
  42. $re[$k]['img_type']=$v->img_type;
  43. $re[$k]['travel_id']=$v->travel_id;
  44. $re[$k]['is_old']=true;
  45. }else{
  46. $re[$k]['imgclass_name']=$v->imgclass_name;
  47. $re[$k]['created_at']=$v->created_at->toDateTimeString();
  48. $re[$k]['count']=$v->count;
  49. $re[$k]['id']=$v->id;
  50. $re[$k]['op_name']=$v->op_name;
  51. $re[$k]['images']=$v->get_image;
  52. $re[$k]['img_type']=$v->img_type;
  53. $re[$k]['travel_id']=$v->travel_id;
  54. $re[$k]['is_old']=true;
  55. }
  56. }
  57. return $this->success_list($re,'',$count);
  58. }
  59. /**查看所有*/
  60. public function GetTravelImgDetail(Request $request){
  61. $input=$request->all();
  62. $page_size=$input['page_size'];
  63. $page_index=$input['page_index'];
  64. $num=$page_size*($page_index-1);
  65. // $user_id=Auth::user()->id;
  66. // $res=TravelUser::where('dwbs_id',$user_id)->first();
  67. // if (!$res){
  68. // return $this->error('500214','','你没有权限查看');
  69. // }
  70. // $ids=Like::where('user_id',Auth::user()->id)->where('activity_id',$request->activity_id)->pluck('image_id')->toArray();
  71. $images=TravelImage::where('class_id',$request->id);
  72. $count=$images->get()->count();
  73. $images=$images->orderByDesc('id')->take($page_size)->skip($num)->get();
  74. return $this->success_list($images,'',$count);
  75. }
  76. public function get_folder(Request $request){
  77. $id=$request->input('id',1);
  78. $type=$request->input('type')??0;
  79. if ($type==0){
  80. $re=TravelImageFolder::where('travel_id',$id)->orderBy('sort')->OrderBy('id','desc')->get();
  81. foreach ($re as $k=>$v){
  82. if ($v->cover){
  83. $re[$k]['cover']=['thumbnail'=>$v->cover];
  84. }else{
  85. $re[$k]['cover']=null;
  86. }
  87. // $re[$k]['cover']=TravelImage::where('img_folder_id',$v->id)->orderByDesc('created_at')->first();
  88. }
  89. }else{
  90. $re=TravelImage::where('travel_id',$id)->where('img_type',1)->get();
  91. }
  92. return $this->success_list($re);
  93. }
  94. public function get_img_detail(Request $request){
  95. $input=$request->all();
  96. $page_size=$input['page_size'];
  97. $page_index=$input['page_index'];
  98. $num=$page_size*($page_index-1);
  99. $id=$request->input('id');
  100. $images=TravelImage::where('img_folder_id',$id);
  101. $count=$images->get()->count();
  102. $re=$images->orderByDesc('id')->take($page_size)->skip($num)->get();
  103. // foreach ($re as $k=>$v){
  104. // $re[$k]->img_url=$re[$k]->img_url.'?imageView2/0/q/20';
  105. //// $re[$k]->img_url=$re[$k]->img_url.'?imageMogr2/thumbnail/999999@';
  106. //// $re[$k]->img_url=$re[$k]->img_url.'?imageMogr2/thumbnail/!40p';
  107. // }
  108. return $this->success_list($re,'',$count);
  109. }
  110. /*
  111. * 获取openid
  112. */
  113. public function getUserOpenid($Code){
  114. $client=new Client();
  115. $AppId=config('wechat.official_account.default.app_id');
  116. $Secret=config('wechat.official_account.default.secret');
  117. $url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$AppId.'&secret='.$Secret.'&code='.$Code.'&grant_type=authorization_code';
  118. $data=$client->request('get',$url);
  119. $da=$data->getBody()->getContents();
  120. $da=json_decode($da,true);
  121. $da=(array)$da;
  122. return $da;
  123. }
  124. public function wx_Login(Request $request){
  125. $Code=$request->code;
  126. $data=$this->getUserOpenid($Code);
  127. if(isset($data['openid'])){
  128. $user=User::where('openid',$data['openid'])->first();
  129. if($user){
  130. $id=TravelUser::where('id','>',0)->pluck('dwbs_id')->toArray();
  131. if (!in_array($user->id,$id)){
  132. return $this->error(500214,'','你没有权限访问!');
  133. }
  134. $token = Auth::guard('api')->fromUser($user);
  135. $da['token'] = $token;
  136. $da['openid'] = $data['openid'];
  137. return $this->success($da);
  138. }
  139. return $this->error(450001,'','请先登录个人中心');
  140. }else{
  141. return $this->error(450001,$data,'你没有权限访问');
  142. }
  143. }
  144. /***账号密码登录**/
  145. public function Login(Request $request){
  146. $mobile=$request->input('mobile');
  147. $password=$request->input('password');
  148. $user=User::where('mobile',$mobile)->first();
  149. if (!$user){
  150. return $this->error(50014,'','账号不存在');
  151. }
  152. if (!$password){
  153. return $this->error(500014,'','账号密码不正确');
  154. }
  155. if ($user->password!=md5($password)){
  156. return $this->error(500014,'','账号密码不正确');
  157. }
  158. $token=Auth::guard('api')->fromUser($user);
  159. return $this->success(['token'=>$token]);
  160. }
  161. public function travel(){
  162. return view('travel');
  163. }
  164. /**获取每次活动的相册**/
  165. public function GetTravelList(Request $request){
  166. $input=$request->all();
  167. $page_size=$input['page_size'];
  168. $page_index=$input['page_index'];
  169. $num=$page_size*($page_index-1);
  170. $search_name=$input['search_name'];
  171. $re=TravelInfo::query();
  172. $id=Auth::user()->id;
  173. $travel_id=TravelUser::where('dwbs_id',$id)->pluck('travel_id');
  174. if ($search_name){
  175. $re->where('travel_name','like',"%$search_name%");
  176. }
  177. $re->whereIn('id',$travel_id);
  178. $count=$re->count();
  179. $data=$re->select('travel_name','id','time_start','time_end','cover_url')
  180. ->with(['get_img'=>function($q){
  181. $q->select('thumbnail','id','travel_id')->orderBy('id');
  182. }])->orderByDesc('id')->take($page_size)->skip($num)->get()->map(function ($item) {
  183. $item->setRelation('get_img', $item->get_img->take(10));
  184. return $item;
  185. });;
  186. return $this->success_list($data,'',$count);
  187. }
  188. /**上传相片**/
  189. public function UploadImg(Request $request,ImageUploadHandler $handler){
  190. $travel_id=$request->input('travel_id');
  191. if (!$request->file('file')){
  192. return $this->error(50214,'','请使用正确的参数');
  193. }
  194. $re=$handler->save($request->file('file'),'headImg',Auth::user()->id);
  195. if (isset($re['path'])){
  196. $res=$this->GetFaceInfo($travel_id,$re['path']);
  197. if (isset($res['group_id'])){
  198. $face=TravelUser::where('dwbs_id',Auth::user()->id)->first();
  199. $face->img_url=$re['path'];
  200. $face->group_id=$res['group_id'];
  201. $face->save();
  202. return $this->success(['group_id'=>$res['group_id']]);
  203. }
  204. return $this->error($res['code'],'',$res['msg']);
  205. }
  206. }
  207. public function GetImg(Request $request){
  208. $travel_id=$request->input('travel_id');
  209. $re=TravelUser::where('travel_id',$travel_id)->where('dwbs_id',Auth::user()->id)->first();
  210. $avatar='';
  211. $group_id='';
  212. $user=['nickname'=>Auth::user()->remark_name,'avatar'=>Auth::user()->headimgurl,'mobile'=>Auth::user()->mobile];
  213. if ($re){
  214. if (is_numeric($re->group_id)){
  215. return $this->success(['url'=>$re->img_url,'group_id'=>$re->group_id,'user'=>$user]);
  216. }
  217. }
  218. return $this->success(['url'=>$avatar,'group_id'=>$group_id,'user'=>$user]);
  219. }
  220. public function GetUserImage(Request $request){
  221. $page_index=$request->input('page_index');
  222. $page_size=$request->input('page_size');
  223. $group_id=$request->input('group_id');
  224. $travel_id=$request->input('travel_id');
  225. $ids=TravelFaceInfo::where('groupid',$group_id)->where('travel_id',$travel_id)->groupBy('img_id')->pluck('img_id');
  226. $count=count($ids);
  227. $re=TravelImage::whereIn('id',$ids)->select('id','url','download_url','file_name','thumbnail','img_url','url')->take($page_size)->skip(($page_index-1)*$page_size)->orderBy('id')->get();
  228. return $this->success_list($re,'',$count);
  229. }
  230. public function GetFaceInfo($travel_id,$url_img){
  231. try {
  232. $re=TravelFaceName::where('travel_id',$travel_id)->first();
  233. $msg='成功';
  234. $code=200;
  235. if (!$re){
  236. $msg='暂未开启相册聚类';
  237. $code=3000;
  238. return ['msg'=>$msg,'code'=>$code];
  239. }
  240. $facename=$re->face_name;
  241. $appkey=config('faceplus.api_key');
  242. $appsecret=config('faceplus.api_secret');
  243. $url='https://api-cn.faceplusplus.com/imagepp/v1/facealbum/addimage';
  244. $client=new Client();
  245. $array = [
  246. 'form_params'=>[
  247. 'api_secret'=>$appsecret,
  248. 'api_key'=>$appkey,
  249. 'facealbum_token'=>$facename,
  250. 'image_url'=>$url_img
  251. ]
  252. ];
  253. try {
  254. $re=$client->post($url,$array);
  255. $res=$re->getBody()->getContents();
  256. $ress=json_decode($res,true);
  257. }catch (\Exception $exception){
  258. $error=$exception->getMessage();
  259. $msg='识别失败,请重新上传';
  260. $code=30001;
  261. return ['msg'=>$msg,'code'=>$code];
  262. }
  263. $face_token=$ress['faces'][0]['face_token'];
  264. $url1='https://api-cn.faceplusplus.com/imagepp/v1/facealbum/groupface';
  265. $client1=new Client();
  266. $array1 = [
  267. 'form_params'=>[
  268. 'api_secret'=>$appsecret,
  269. 'api_key'=>$appkey,
  270. 'facealbum_token'=>$facename,
  271. ]
  272. ];
  273. $re1=$client1->post($url1,$array1);
  274. $res1=$re1->getBody()->getContents();
  275. $ress1=json_decode($res1,true);
  276. $task_id=$ress1['task_id'];
  277. sleep(5);
  278. $url2='https://api-cn.faceplusplus.com/imagepp/v1/facealbum/groupfacetaskquery';
  279. $client2=new Client();
  280. $array2 = [
  281. 'form_params'=>[
  282. 'api_secret'=>$appsecret,
  283. 'api_key'=>$appkey,
  284. 'task_id'=>$task_id,
  285. ]
  286. ];
  287. $facess=$client2->post($url2,$array2);
  288. $face=$facess->getBody()->getContents();
  289. $faces=json_decode($face,true);
  290. if ($faces['status']==0){
  291. sleep(4);
  292. }
  293. if ($faces['status']==1){
  294. $url2='https://api-cn.faceplusplus.com/imagepp/v1/facealbum/groupfacetaskquery';
  295. $client2=new Client();
  296. $array2 = [
  297. 'form_params'=>[
  298. 'api_secret'=>$appsecret,
  299. 'api_key'=>$appkey,
  300. 'task_id'=>$task_id,
  301. ]
  302. ];
  303. $facess_1=$client2->post($url2,$array2);
  304. $face_1=$facess_1->getBody()->getContents();
  305. Log::error($face_1);
  306. $faces_1=json_decode($face_1,true);
  307. }
  308. if (!isset($faces_1['group_result'])){
  309. $msg='分组失败,请上传新的照片';
  310. $code=30002;
  311. }
  312. $arr=$faces_1['group_result'];
  313. foreach ($arr as $k=>$v){
  314. $s=TravelFaceInfo::where('face_token',$v['face_token'])->first();
  315. if ($s){
  316. $s->groupid=$v['group_id'];
  317. }
  318. if ($v['face_token']==$face_token){
  319. $group_id=$v['group_id'];
  320. }
  321. }
  322. return ['group_id'=>$group_id,'msg'=>$msg,'code'=>200];
  323. }catch (\Exception $exception){
  324. $msg='识别失败,请上传新的照片';
  325. $code=30002;
  326. return ['msg'=>$msg,'code'=>$code];
  327. }
  328. }
  329. public function insert(){
  330. $data=[19646,
  331. 36704,
  332. 69201,
  333. 83389,
  334. 1013,
  335. 23732,
  336. 127981,
  337. 10225,
  338. 51726,
  339. 109918,
  340. 10192,
  341. 3131,
  342. 55725,
  343. 14109,
  344. 109466,
  345. 107231,
  346. 78743,
  347. 5081,
  348. 35072,
  349. 136398,
  350. 11086,
  351. 31070,
  352. 81680,
  353. 64487,
  354. 92428,
  355. 24676,
  356. 82898,
  357. 57233,
  358. 56973,
  359. 73958,
  360. 13361,
  361. 25,
  362. 27912,
  363. 58229,
  364. 12947,
  365. 88111,
  366. 64688];
  367. foreach ($data as $k=>$v){
  368. $re=new TravelUser();
  369. $re->dwbs_id=$v;
  370. $re->travel_id=3;
  371. $re->save();
  372. }
  373. }
  374. }