CameraApiController.php 48 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: qiuzijian
  5. * Date: 2021-04-25
  6. * Time: 09:53
  7. */
  8. namespace Modules\Camera\Http\Controllers\Api;
  9. use App\Enum\ApiEnum;
  10. use App\Http\Controllers\Api\BaseController;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Facades\Config;
  13. use Illuminate\Support\Facades\Input;
  14. use Illuminate\Support\Facades\Log;
  15. use Modules\Camera\Entities\CameraList;
  16. use Modules\Camera\Enum\CameraEnum;
  17. use Modules\Camera\Services\CameraServices;
  18. use Modules\Mine\Entities\MineList;
  19. use Modules\Mine\Entities\MineListExt;
  20. use DB;
  21. use OSS\OssClient;
  22. class CameraApiController extends BaseController
  23. {
  24. //通过摄像头类型获取摄像头
  25. public function getCameraByType(){
  26. $mine_code = Input::get('mine_code', '');
  27. $camera_type = Input::get('camera_type', '');
  28. if (!$mine_code || !$camera_type) {
  29. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  30. }
  31. $result['status'] = true;
  32. $result['msg'] = ApiEnum::RETURN_SUCCESS;
  33. $mine = DB::table('mine_list')->where('slug','like','%'.$mine_code.'%')->where('parent_id',0)->where('deleted_at',null)->first();
  34. if (!$mine) {
  35. $result['status'] = false;
  36. $result['msg'] = '矿区名称不存在';
  37. return $result;
  38. }
  39. $mine_list = DB::table('mine_list')->where('degree', 'like', $mine->id . '|' . '%')->where('deleted_at',null)->get();
  40. $mine_array = [];
  41. foreach($mine_list as $k=>$v){
  42. $mine_array[] = $v->id;
  43. }
  44. $query = CameraList::where('is_show', CameraEnum::IS_SHOW_YES)->where('deleted_at',null)->whereIn('mine_id',$mine_array)->where('camera_type',$camera_type)->orderBy('sort', 'desc')->get();
  45. if (!$query) {
  46. $result['status'] = false;
  47. $result['msg'] = '矿区下没有摄像头';
  48. return $result;
  49. }
  50. $result = [];
  51. foreach($query as $k=>$v){
  52. $result[$k]['id'] = $v->id;
  53. $result[$k]['mine_id'] = $v->mine_id;
  54. $result[$k]['camera_name'] = $v->camera_name;
  55. $result[$k]['cover_picture'] = $v->cover_picture;
  56. $result[$k]['camera_status'] = $v->camera_status;
  57. $result[$k]['playback'] = $v->playback;
  58. }
  59. return self::successResponse($result);
  60. }
  61. //宁煤摄像头统计
  62. public function getTotalNingmei(){
  63. $result['status'] = true;
  64. $result['msg'] = ApiEnum::RETURN_SUCCESS;
  65. //宁煤集团
  66. $ningmei = DB::table('mine_list')->where('title',config('mine_hls'))->get();
  67. $mine_all = DB::table('mine_list')->where('deleted_at',null)->get();//所有区域
  68. $mine_ningmei = [];//宁煤集团所有区域
  69. foreach($mine_all as $k=>$v){
  70. if(explode('|',$v->degree)[0] == $ningmei[0]->id){
  71. $mine_ningmei[] = $v->id;
  72. }
  73. }
  74. //宁煤在离线数量
  75. $data[0]['title'] = '宁煤公司';
  76. $data[0]['mine_code'] = $ningmei[0]->slug;
  77. $data[0]['total'] = DB::table('camera_list')->whereIn('mine_id',$mine_ningmei)->where('deleted_at',null)->count();
  78. $data[0]['total_online'] = DB::table('camera_list')->whereIn('mine_id',$mine_ningmei)->where('camera_status',1)->where('deleted_at',null)->count();
  79. $data[0]['total_offline'] = $data[0]['total'] - $data[0]['total_online'];
  80. $data[0]['rate'] = round($data[0]['total_online'] / $data[0]['total'] * 100,2)."%";
  81. //宁煤下各矿在离线数量
  82. $mine_list = DB::table('mine_list')->where('parent_id',$ningmei[0]->id)->where('deleted_at',null)->get();
  83. foreach($mine_list as $k => $v){
  84. $mine_use = [];//宁煤下每个矿所有区域
  85. foreach($mine_all as $key=>$value){
  86. if(count(explode('|',$value->degree)) > 1){
  87. if(explode('|',$value->degree)[0] == $ningmei[0]->id && explode('|',$value->degree)[1] == $v->id){
  88. $mine_use[] = $value->id;
  89. }
  90. }
  91. }
  92. $total = DB::table('camera_list')->whereIn('mine_id',$mine_use)->where('is_show',1)->where('deleted_at',null)->count();
  93. $total_online = DB::table('camera_list')->whereIn('mine_id',$mine_use)->where('is_show',1)->where('camera_status',1)->where('deleted_at',null)->count();
  94. if($total == 0){
  95. $rate = "0%";
  96. }else{
  97. $rate = round($total_online / $total * 100,2)."%";
  98. }
  99. if($v->slug == 'NingXiaMeiYeTeShuZuoYeJianKongShiPin'){
  100. $res['title'] = $v->title;
  101. $res['mine_code'] = $v->slug."_jituan";
  102. $res['total'] = $total;
  103. $res['total_online'] = $total_online;
  104. $res['total_offline'] = $total - $total_online;
  105. $res['rate'] = $rate;
  106. }else{
  107. array_push($data,[
  108. 'title'=>$v->title,
  109. 'mine_code'=>$v->slug."_jituan",
  110. 'total'=>$total,
  111. 'total_online'=>$total_online,
  112. 'total_offline'=>$total - $total_online,
  113. 'rate'=>$rate
  114. ]);
  115. }
  116. }
  117. if(isset($res)){
  118. array_push($data,[
  119. 'title'=>$res['title'],
  120. 'mine_code'=>$res['mine_code'],
  121. 'total'=>$res['total'],
  122. 'total_online'=>$res['total_online'],
  123. 'total_offline'=>$res['total_offline'],
  124. 'rate'=>$res['rate']
  125. ]);
  126. }
  127. return self::successResponse($data);
  128. }
  129. //宁煤摄像头统计字符串
  130. public function getTotalString(){
  131. $result['status'] = true;
  132. $result['msg'] = ApiEnum::RETURN_SUCCESS;
  133. //宁煤集团
  134. $ningmei = DB::table('mine_list')->where('title',config('mine_hls'))->get();
  135. $mine_all = DB::table('mine_list')->where('deleted_at',null)->get();//所有区域
  136. $mine_ningmei = [];//宁煤集团所有区域
  137. foreach($mine_all as $k=>$v){
  138. if(explode('|',$v->degree)[0] == $ningmei[0]->id){
  139. $mine_ningmei[] = $v->id;
  140. }
  141. }
  142. //宁煤在离线数量
  143. $nm['title'] = '宁煤公司';
  144. $nm['mine_code'] = $ningmei[0]->slug;
  145. $nm['total'] = DB::table('camera_list')->whereIn('mine_id',$mine_ningmei)->where('deleted_at',null)->count();
  146. $nm['total_online'] = DB::table('camera_list')->whereIn('mine_id',$mine_ningmei)->where('camera_status',1)->where('deleted_at',null)->count();
  147. $nm['total_offline'] = $nm['total'] - $nm['total_online'];
  148. $nm['rate'] = round($nm['total_online'] / $nm['total'] * 100,2);
  149. $data = [];
  150. //宁煤下各矿在离线数量
  151. $mine_list = DB::table('mine_list')->where('parent_id',$ningmei[0]->id)->where('deleted_at',null)->get();
  152. foreach($mine_list as $k => $v){
  153. $mine_use = [];//宁煤下每个矿所有区域
  154. foreach($mine_all as $key=>$value){
  155. if(count(explode('|',$value->degree)) > 1){
  156. if(explode('|',$value->degree)[0] == $ningmei[0]->id && explode('|',$value->degree)[1] == $v->id){
  157. $mine_use[] = $value->id;
  158. }
  159. }
  160. }
  161. $total = DB::table('camera_list')->whereIn('mine_id',$mine_use)->where('is_show',1)->where('deleted_at',null)->count();
  162. $total_online = DB::table('camera_list')->whereIn('mine_id',$mine_use)->where('is_show',1)->where('camera_status',1)->where('deleted_at',null)->count();
  163. if($total == 0){
  164. $rate = "0";
  165. }else{
  166. $rate = round($total_online / $total * 100,2);
  167. }
  168. if($v->slug == 'NingXiaMeiYeTeShuZuoYeJianKongShiPin'){
  169. $res['title'] = $v->title;
  170. $res['mine_code'] = $v->slug."_jituan";
  171. $res['total'] = $total;
  172. $res['total_online'] = $total_online;
  173. $res['total_offline'] = $total - $total_online;
  174. $res['rate'] = $rate;
  175. }else{
  176. array_push($data,[
  177. 'title'=>$v->title,
  178. 'mine_code'=>$v->slug."_jituan",
  179. 'total'=>$total,
  180. 'total_online'=>$total_online,
  181. 'total_offline'=>$total - $total_online,
  182. 'rate'=>$rate
  183. ]);
  184. }
  185. }
  186. if(isset($res)){
  187. array_push($data,[
  188. 'title'=>$res['title'],
  189. 'mine_code'=>$res['mine_code'],
  190. 'total'=>$res['total'],
  191. 'total_online'=>$res['total_online'],
  192. 'total_offline'=>$res['total_offline'],
  193. 'rate'=>$res['rate']
  194. ]);
  195. }
  196. $timestamp = strtotime(date('Y-m-d H:i:s'));
  197. $hour = date('G', $timestamp);
  198. $minute = date('i', $timestamp);
  199. $month = date('n', $timestamp);
  200. $day = date('j', $timestamp);
  201. if($minute == '00'){
  202. $minute = '';
  203. }
  204. if ($hour < 12) {
  205. $time = $month."月".$day."号上午".$hour."时".$minute;
  206. } elseif ($hour >= 12 && $hour < 18) {
  207. $time = $month."月".$day."号下午".$hour."时".$minute;
  208. } else {
  209. $time = $month."月".$day."号晚上".$hour."时".$minute;
  210. }
  211. $unit_max_name = '';
  212. $unit_max_rate = 0;
  213. $unit_min_name = '';
  214. $unit_min_rate = 100;
  215. $mzy_max_name = '';
  216. $mzy_max_rate = 0;
  217. $mzy_min_name = '';
  218. $mzy_min_rate = 100;
  219. $other_max_name = '';
  220. $other_max_rate = 0;
  221. $other_min_name = '';
  222. $other_min_rate = 100;
  223. if(count($data)>0){
  224. for($i=0;$i<count($data);$i++){
  225. if (strpos($data[$i]['title'], '煤矿') !== false || strpos($data[$i]['title'], '洗选') !== false) {
  226. if($data[$i]['rate'] > $unit_max_rate){
  227. $unit_max_rate = $data[$i]['rate'];
  228. }
  229. if($data[$i]['rate'] < $unit_min_rate){
  230. $unit_min_rate = $data[$i]['rate'];
  231. }
  232. }elseif(strpos($data[$i]['title'], '煤制油') !== false || strpos($data[$i]['title'], '烯烃') !== false || strpos($data[$i]['title'], '甲醇') !== false || strpos($data[$i]['title'], '精蜡') !== false){
  233. if($data[$i]['rate'] > $mzy_max_rate){
  234. $mzy_max_rate = $data[$i]['rate'];
  235. }
  236. if($data[$i]['rate'] < $mzy_min_rate){
  237. $mzy_min_rate = $data[$i]['rate'];
  238. }
  239. }else{
  240. if($data[$i]['rate'] > $other_max_rate){
  241. $other_max_rate = $data[$i]['rate'];
  242. }
  243. if($data[$i]['rate'] < $other_min_rate){
  244. $other_min_rate = $data[$i]['rate'];
  245. }
  246. }
  247. }
  248. for($i=0;$i<count($data);$i++){
  249. if (strpos($data[$i]['title'], '煤矿') !== false || strpos($data[$i]['title'], '洗选') !== false) {
  250. if($data[$i]['rate'] == $unit_max_rate){
  251. $unit_max_name = $unit_max_name.'、'.$data[$i]['title'];
  252. }
  253. if($data[$i]['rate'] == $unit_min_rate){
  254. $unit_min_name = $unit_max_name.'、'.$data[$i]['title'];
  255. }
  256. }elseif(strpos($data[$i]['title'], '煤制油') !== false || strpos($data[$i]['title'], '烯烃') !== false || strpos($data[$i]['title'], '甲醇') !== false || strpos($data[$i]['title'], '精蜡') !== false){
  257. if($data[$i]['rate'] == $mzy_max_rate){
  258. $mzy_max_name = $mzy_max_name.'、'.$data[$i]['title'];
  259. }
  260. if($data[$i]['rate'] == $mzy_min_rate){
  261. $mzy_min_name = $mzy_max_name.'、'.$data[$i]['title'];
  262. }
  263. }else{
  264. if($data[$i]['rate'] == $other_max_rate){
  265. $other_max_name = $other_max_name.'、'.$data[$i]['title'];
  266. }
  267. if($data[$i]['rate'] == $other_min_rate){
  268. $other_min_name = $other_max_name.'、'.$data[$i]['title'];
  269. }
  270. }
  271. }
  272. }
  273. $unit_max_name = mb_substr($unit_max_name, 1);
  274. $unit_min_name = mb_substr($unit_min_name, 1);
  275. $mzy_max_name = mb_substr($mzy_max_name, 1);
  276. $mzy_min_name = mb_substr($mzy_min_name, 1);
  277. $other_max_name = mb_substr($other_max_name, 1);
  278. $other_min_name = mb_substr($other_min_name, 1);
  279. $result['data'] = '本周公司视频摄像头在线数'.$nm['total_online'].'个,'.'在线率为'.$nm['rate'].'%('.$time
  280. .'统计)。其中:①煤炭生产建设单位在线率排名第一的单位是'.$unit_max_name.',在线率达到'.$unit_max_rate
  281. .'%;排名末位的单位是'.$unit_min_name.',在线率达到'.$unit_min_rate
  282. .'%。②煤制油化工单位在线率排名第一的单位是'.$mzy_max_name.',在线率达到'.$mzy_max_rate.'%;排名末位的单位是'
  283. .$mzy_min_name.',在线率达到'.$mzy_min_rate.'%。③其他单位在线率排名第一的单位是'.$other_max_name
  284. .',在线率达到'.$other_max_rate.'%;排名末位的单位是'.$other_min_name.',在线率达到'.$other_min_rate.'%。';
  285. return self::successResponse($result);
  286. }
  287. //宁煤不在线摄像头列表
  288. public function offlineList(){
  289. $mine_code = Input::get('mine_code', '');
  290. if (!$mine_code) {
  291. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  292. }
  293. $result['status'] = true;
  294. $result['msg'] = ApiEnum::RETURN_SUCCESS;
  295. //宁煤集团
  296. $ningmei = DB::table('mine_list')->where('title',config('mine_hls'))->get();
  297. $mine_all = DB::table('mine_list')->where('deleted_at',null)->get();//所有区域
  298. $mine_ningmei = [];//宁煤集团所有区域
  299. foreach($mine_all as $k=>$v){
  300. if(explode('|',$v->degree)[0] == $ningmei[0]->id){
  301. $mine_ningmei[] = $v->id;
  302. }
  303. }
  304. if(count(explode('_',$mine_code)) > 1){
  305. $mine_code = explode('_',$mine_code)[0];
  306. }
  307. $mine_list = DB::table('mine_list')->where('parent_id',0)->where('slug','like','%'.$mine_code.'%')->where('deleted_at',null)->get();
  308. //如果传参是宁煤显示全部
  309. if(isset($mine_list[0]->title) && $mine_list[0]->title == config('mine_hls')[0]){
  310. //宁煤在离线数量
  311. $offline_list = DB::table('camera_list')->select('id','camera_name','cover_picture','camera_status')->whereIn('mine_id',$mine_ningmei)->where('camera_status','!=',1)->where('deleted_at',null)->get();
  312. return self::successResponse($offline_list);
  313. }
  314. //宁煤下各矿在离线数量
  315. $mine_list = DB::table('mine_list')->where('parent_id',$ningmei[0]->id)->where('slug','like','%'.$mine_code.'%')->where('deleted_at',null)->get();
  316. $total_offline = [];
  317. foreach($mine_list as $k => $v){
  318. $mine_use = [];//宁煤下每个矿所有区域
  319. foreach($mine_all as $key=>$value){
  320. if(count(explode('|',$value->degree)) > 1){
  321. if(explode('|',$value->degree)[0] == $ningmei[0]->id && explode('|',$value->degree)[1] == $v->id){
  322. $mine_use[] = $value->id;
  323. }
  324. }
  325. }
  326. $total_offline = DB::table('camera_list')->select('id','camera_name','cover_picture','camera_status')->whereIn('mine_id',$mine_use)->where('is_show',1)->where('camera_status','!=',1)->where('deleted_at',null)->get();
  327. }
  328. return self::successResponse($total_offline);
  329. }
  330. //宁煤高风险摄像头
  331. public function getRiskNingmei(){
  332. $mine_code = Input::get('mine_code', '');
  333. if (!$mine_code) {
  334. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  335. }
  336. $result['status'] = true;
  337. $result['msg'] = ApiEnum::RETURN_SUCCESS;
  338. //宁煤集团
  339. $ningmei = DB::table('mine_list')->where('title',config('mine_hls'))->get();
  340. //宁煤集团下级单位
  341. $mine = DB::table('mine_list')
  342. ->where('parent_id',$ningmei[0]->id)
  343. ->where('slug','like','%'.$mine_code.'%')
  344. ->where('deleted_at',null)
  345. ->get();
  346. //子区域树形列表
  347. $child_list = DB::table('mine_list')->where('parent_id',$mine[0]->id)->where('deleted_at',null)->orderBy('sort','desc')->get();
  348. $risk_id = null;
  349. if(count($child_list)>0){
  350. $risk_id = $this->mineTree($child_list);
  351. }
  352. $mine_list = [];
  353. if($risk_id != null){
  354. $risk = DB::table('mine_list')->where('parent_id',$risk_id)->where('deleted_at',null)->get();
  355. if(count($risk) > 0){
  356. //有子区域
  357. $mine_list = $this->riskTree($risk,[]);
  358. }else{
  359. //没有子区域
  360. $mine_list[] = $risk_id;
  361. }
  362. }
  363. $camera_list = DB::table('camera_list')
  364. ->select('camera_list.*','mine_list.title')
  365. ->leftJoin('mine_list','camera_list.mine_id','=','mine_list.id')
  366. ->where('camera_list.deleted_at',null)
  367. ->whereIn('camera_list.mine_id',$mine_list)
  368. ->orderBy('sort', 'desc')->get();
  369. $result = [];
  370. foreach($camera_list as $k=>$v){
  371. $result[$k]['parent_id'] = $ningmei[0]->id;
  372. $result[$k]['camera_id'] = $v->id;
  373. $result[$k]['mine_name'] = $v->title;
  374. $result[$k]['camera_name'] = $v->camera_name;
  375. $result[$k]['cover_picture'] = $v->cover_picture;
  376. $result[$k]['camera_status'] = $v->camera_status;
  377. $result[$k]['base64'] = $v->base64;
  378. }
  379. return self::successResponse($result);
  380. }
  381. public function mineTree($regions)
  382. {
  383. $arr = null;
  384. foreach ($regions as $key => $value) {
  385. $risk = explode('高风险作业',$value->title);
  386. if (count($risk)>1){
  387. return $value->id;
  388. }
  389. $mine_child = DB::table('mine_list')->where('parent_id', $value->id)->where('deleted_at',null)->get();
  390. if (count($mine_child) > 0) {
  391. $arr = self::mineTree($mine_child, $value->id);
  392. if($arr != null){
  393. return $arr;
  394. }
  395. }
  396. }
  397. return $arr;
  398. }
  399. public function riskTree($regions,$risk_list)
  400. {
  401. foreach ($regions as $key => $value) {
  402. $risk_child = DB::table('mine_list')->where('parent_id', $value->id)->where('deleted_at',null)->get();
  403. if (count($risk_child) > 0) {
  404. $risk_list = array_merge($risk_list,self::riskTree($risk_child,[]));
  405. }else{
  406. $risk_list[] = $value->id;
  407. }
  408. }
  409. return $risk_list;
  410. }
  411. //高风险区域摄像头
  412. public function getCameraByMinecode(){
  413. $mine_code = Input::get('mine_code', '');
  414. if (!$mine_code) {
  415. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  416. }
  417. $result['status'] = true;
  418. $result['msg'] = ApiEnum::RETURN_SUCCESS;
  419. $mine = DB::table('mine_list')->where('slug','like','%'.$mine_code.'%')->where('parent_id',0)->where('deleted_at',null)->first();
  420. if (!$mine) {
  421. $result['status'] = false;
  422. $result['msg'] = '矿区名称不存在';
  423. return $result;
  424. }
  425. $mine_list = DB::table('mine_list')->where('degree', 'like', $mine->id . '|' . '%')->where('title','like','%高风险%')->where('deleted_at',null)->get();
  426. $mine_array = [];
  427. foreach($mine_list as $k=>$v){
  428. $mine_child = DB::table('mine_list')->where('degree', 'like','%' . $v->id . '%')->where('deleted_at',null)->get();
  429. if(count($mine_child)>0){
  430. for($i=0;$i<count($mine_child);$i++){
  431. $mine_array[] = $mine_child[$i]->id;
  432. }
  433. }
  434. }
  435. $query = DB::table('camera_list')
  436. ->select('camera_list.*','mine_list.title')
  437. ->leftJoin('mine_list','camera_list.mine_id','=','mine_list.id')
  438. ->where('camera_list.deleted_at',null)
  439. ->whereIn('camera_list.mine_id',$mine_array)
  440. ->orderBy('sort', 'desc')->get();
  441. if (!$query) {
  442. $result['status'] = false;
  443. $result['msg'] = '矿区下没有摄像头';
  444. return $result;
  445. }
  446. $result = [];
  447. foreach($query as $k=>$v){
  448. $result[$k]['parent_id'] = $mine->id;
  449. $result[$k]['camera_id'] = $v->id;
  450. $result[$k]['mine_name'] = $v->title;
  451. $result[$k]['camera_name'] = $v->camera_name;
  452. $result[$k]['cover_picture'] = $v->cover_picture;
  453. $result[$k]['camera_status'] = $v->camera_status;
  454. }
  455. return self::successResponse($result);
  456. }
  457. /**
  458. * 作者: qiuzijian
  459. * 注释: 获取摄像头列表
  460. * @return \App\Http\Controllers\Api\JsonResponse
  461. */
  462. public function getCamerasList()
  463. {
  464. $parent_id = Input::get('parent_id', '');
  465. $mine_id = Input::get('mine_id', '');
  466. $camera_type = Input::get('camera_type', CameraEnum::CAMERA_TYPE_ALL);
  467. $surface_id = Input::get('surface_id', '');
  468. if (!$parent_id) {
  469. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  470. }
  471. if (!in_array($camera_type, [CameraEnum::CAMERA_TYPE_NORMAL, CameraEnum::CAMERA_TYPE_ALL]) && !$surface_id) {
  472. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  473. }
  474. //判断是否使用海康视频服务器
  475. // $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak');
  476. // if ($is_hak) {
  477. // $result = CameraServices::getHaiKangCamera($parent_id, $mine_id, $camera_type);
  478. // } else {
  479. $result = CameraServices::getCameraListByMineId($mine_id, $camera_type, $parent_id, $surface_id);
  480. // }
  481. return self::successResponse($result);
  482. }
  483. /**
  484. * 作者: qiuzijian
  485. * 注释: 获取摄像头播放地址
  486. * @return \App\Http\Controllers\Api\JsonResponse
  487. */
  488. public function getCamerasUrl()
  489. {
  490. $parent_id = Input::get('parent_id', '');
  491. $camera_id = Input::get('camera_id', '');
  492. if (!$parent_id || !$camera_id) {
  493. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  494. }
  495. //判断摄像头来源是否为内网服务器
  496. $camera_source = CameraList::where('id', $camera_id)->value('camera_source');
  497. if ($camera_source == CameraEnum::CAMERA_SOURCE_3) {
  498. $result = CameraServices::getIntranetCameraUrl($camera_id);
  499. return self::successResponse($result);
  500. }
  501. //判断是否使用海康视频服务器
  502. $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak');
  503. //判断是否生成摄像头请求链接
  504. $camera_url = CameraList::where('id', $camera_id)->value('camera_url');
  505. if ($is_hak && !$camera_url) {
  506. //判断是否是mine配置文件的矿区
  507. $mine_res = DB::table('mine_list')->where('id',$parent_id)->get();
  508. //天地伟业
  509. if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine'))){
  510. $result = CameraServices::getRtspTianDi($camera_id,$parent_id);
  511. //宁煤集团
  512. }elseif(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine_hls'))){
  513. $result = CameraServices::getHkHls($camera_id,$parent_id);
  514. }
  515. //信息技术中心测试ws协议
  516. // elseif($mine_res[0]-> slug == 'XinXiJiShuZhongXin'){
  517. // $result = CameraServices::getHkWs($camera_id,$parent_id);
  518. //
  519. // }
  520. //海康切片逻辑
  521. else{
  522. $result = CameraServices::downloadCameraFiles($parent_id, $camera_id);
  523. }
  524. } else {
  525. //判断硬盘录像机的有没有封面图,有的走easydrawin,没有的走ffmpeg
  526. $cover_picture = CameraList::where('id', $camera_id)->value('cover_picture');
  527. // if(!$cover_picture){
  528. //ffmpeg拉流获取首帧图片
  529. // $result = CameraServices::getCameraUrlByFfmpeg($camera_id);
  530. // }else{
  531. // $result = CameraServices::getCameraUrlByCameraId($camera_id);
  532. $result = CameraServices::getRtspYingPan($camera_id);
  533. // }
  534. }
  535. return self::successResponse($result);
  536. }
  537. public function getCamerasLanUrl()
  538. {
  539. $parent_id = Input::get('parent_id', '');
  540. $camera_id = Input::get('camera_id', '');
  541. if (!$parent_id || !$camera_id) {
  542. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  543. }
  544. //判断摄像头来源是否为内网服务器
  545. $camera_source = CameraList::where('id', $camera_id)->value('camera_source');
  546. if ($camera_source == CameraEnum::CAMERA_SOURCE_3) {
  547. $result = CameraServices::getIntranetCameraUrl($camera_id);
  548. return self::successResponse($result);
  549. }
  550. //判断是否使用海康视频服务器
  551. $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak');
  552. //判断是否生成摄像头请求链接
  553. $camera_url = CameraList::where('id', $camera_id)->value('camera_url');
  554. if ($is_hak && !$camera_url) {
  555. //判断是否是mine配置文件的矿区
  556. $mine_res = DB::table('mine_list')->where('id',$parent_id)->get();
  557. //天地伟业
  558. if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine'))){
  559. $result = CameraServices::getRtspTianDi($camera_id,$parent_id);
  560. //宁煤集团
  561. }elseif(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine_hls'))){
  562. $result = CameraServices::getHkHls($camera_id,$parent_id);
  563. }else{
  564. $result = CameraServices::getLanCameraUrl($parent_id, $camera_id);
  565. }
  566. } else {
  567. //判断硬盘录像机的有没有封面图,有的走easydrawin,没有的走ffmpeg
  568. $cover_picture = CameraList::where('id', $camera_id)->value('cover_picture');
  569. // if(!$cover_picture){
  570. //ffmpeg拉流获取首帧图片
  571. // $result = CameraServices::getCameraUrlByFfmpeg($camera_id);
  572. // }else{
  573. $result = CameraServices::getCameraUrlByCameraId($camera_id);
  574. // }
  575. }
  576. return self::successResponse($result);
  577. }
  578. //获取海康rtsp流
  579. public function getHikRtsp(){
  580. $parent_id = Input::get('parent_id', '');
  581. $camera_id = Input::get('camera_id', '');
  582. if (!$parent_id || !$camera_id) {
  583. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  584. }
  585. //判断是否使用海康视频服务器
  586. $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak');
  587. //判断是否生成摄像头请求链接
  588. $camera_url = CameraList::where('id', $camera_id)->value('camera_url');
  589. if ($is_hak == 1 && !$camera_url) {
  590. $result = CameraServices::getHkRtsp($camera_id,$parent_id);
  591. return self::successResponse($result);
  592. }else{
  593. return self::errorResponse(ApiEnum::HK_REQUEST_FAIL);
  594. }
  595. }
  596. //获取海康rtmp流
  597. public function getHikRtmp(){
  598. $parent_id = Input::get('parent_id', '');
  599. $camera_id = Input::get('camera_id', '');
  600. if (!$parent_id || !$camera_id) {
  601. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  602. }
  603. //判断是否使用海康视频服务器
  604. $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak');
  605. //判断是否生成摄像头请求链接
  606. $camera_url = CameraList::where('id', $camera_id)->value('camera_url');
  607. if ($is_hak == 1 && !$camera_url) {
  608. $result = CameraServices::getHkRtmp($camera_id,$parent_id);
  609. return self::successResponse($result);
  610. }else{
  611. return self::errorResponse(ApiEnum::HK_REQUEST_FAIL);
  612. }
  613. }
  614. //海康摄像头easy_drawin方式获取url
  615. public function getCamerasRtsp()
  616. {
  617. $parent_id = Input::get('parent_id', '');
  618. $camera_id = Input::get('camera_id', '');
  619. if (!$parent_id || !$camera_id) {
  620. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  621. }
  622. //判断摄像头来源是否为内网服务器
  623. $camera_source = CameraList::where('id', $camera_id)->value('camera_source');
  624. if ($camera_source == CameraEnum::CAMERA_SOURCE_3) {
  625. $result = CameraServices::getIntranetCameraUrl($camera_id);
  626. return self::successResponse($result);
  627. }
  628. //判断是否使用海康视频服务器
  629. $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak');
  630. //判断是否生成摄像头请求链接
  631. $camera_url = CameraList::where('id', $camera_id)->value('camera_url');
  632. if ($is_hak && !$camera_url) {
  633. //判断是否是mine配置文件的矿区
  634. $mine_res = DB::table('mine_list')->where('id',$parent_id)->get();
  635. if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine'))){
  636. //天地伟业使用easy_drawin获取rtsp
  637. $result = CameraServices::getRtspTianDi($camera_id,$parent_id);
  638. }else{
  639. //海康使用easy_drawin获取rtsp
  640. $result = CameraServices::getRtspHaiKang($camera_id, $parent_id);
  641. }
  642. } else {
  643. //硬盘录像机使用easy_drawin获取rtsp
  644. $result = CameraServices::getRtspYingPan($camera_id);
  645. }
  646. return self::successResponse($result);
  647. }
  648. /**
  649. * 作者: qiuzijian
  650. * 注释: 停止摄像头推流
  651. * @return \App\Http\Controllers\Api\JsonResponse
  652. */
  653. public function stopCamerasStream()
  654. {
  655. $camera_id = Input::get('camera_id', '');
  656. $result = CameraServices::stopCameraStream();
  657. return self::successResponse($result);
  658. }
  659. //回放列表
  660. public function getPlaybackList(){
  661. $camera_id = Input::get('camera_id', '');
  662. $result['status'] = true;
  663. $result['msg'] = ApiEnum::RETURN_SUCCESS;
  664. if (!$camera_id) {
  665. $result['status'] = false;
  666. $result['msg'] = ApiEnum::STATUS_CODE_EMPTY;
  667. return $result;
  668. }
  669. $query = CameraList::where('id', $camera_id)->first();
  670. if (!$query) {
  671. $result['status'] = false;
  672. $result['msg'] = ApiEnum::NO_CAMERA_URL;
  673. return $result;
  674. }
  675. if($query->playback == 0){
  676. $result['status'] = false;
  677. $result['msg'] = ApiEnum::NO_SUPORT_PLAYBACK;
  678. return $result;
  679. }
  680. $playback = DB::table('playback')->where('camera_id',$query->id)->where('deleted_at',null)->get();
  681. if(count($playback)>0){
  682. for($i=0;$i<count($playback);$i++){
  683. $result['data'][$i]['title'] = $playback[$i]->title;
  684. $result['data'][$i]['start_time'] = $playback[$i]->start_time;
  685. $result['data'][$i]['end_time'] = $playback[$i]->end_time;
  686. $result['data'][$i]['camera_id'] = $playback[$i]->camera_id;
  687. }
  688. }else{
  689. $result['data'] = null;
  690. }
  691. return $result;
  692. }
  693. //回放URL
  694. public function getPlaybackUrl(){
  695. $time['start_time'] = explode(' ',Input::get('start_time', ''))[1];
  696. $time['end_time'] = explode(' ',Input::get('end_time', ''))[1];
  697. $camera_id = Input::get('camera_id', '');
  698. $start_time = Input::get('start_time', '');
  699. $end_time = Input::get('end_time', '');
  700. $result['status'] = true;
  701. $result['msg'] = ApiEnum::RETURN_SUCCESS;
  702. if (!$camera_id || !$start_time || !$end_time) {
  703. $result['status'] = false;
  704. $result['msg'] = ApiEnum::STATUS_CODE_EMPTY;
  705. return $result;
  706. }
  707. $query = CameraList::where('id', $camera_id)->first();
  708. if (!$query) {
  709. $result['status'] = false;
  710. $result['msg'] = ApiEnum::NO_CAMERA_URL;
  711. return $result;
  712. }
  713. if($query->playback == 0){
  714. $result['status'] = false;
  715. $result['msg'] = ApiEnum::NO_SUPORT_PLAYBACK;
  716. return $result;
  717. }
  718. $degree = MineList::where('id', $query->mine_id)->value('degree');
  719. $degree = explode('|', $degree)[0];
  720. $mine_res = DB::table('mine_list')->where('id',$degree)->get();
  721. //判断摄像头是否是洗选中心的时间+34分钟
  722. if($mine_res[0]->slug == 'XiXuanZhongXin'){
  723. $start_time = date('Y-m-d H:i:s',strtotime($start_time.'+34 minutes'));
  724. $end_time = date('Y-m-d H:i:s',strtotime($end_time.'+34 minutes'));
  725. }
  726. $str = '.000+';
  727. $start_time = date('c', strtotime($start_time));//2022-07-14T08:00:00.000+08:00
  728. $start_time = explode('+',$start_time);
  729. $start_time = $start_time[0].$str.$start_time[1];
  730. $end_time = date('c', strtotime($end_time));
  731. $end_time = explode('+',$end_time);
  732. $end_time = $end_time[0].$str.$end_time[1];
  733. //判断是否在配置文件里,在的不用走ffmpeg
  734. if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('playback'))){
  735. $result = CameraServices::getPlaybackRtsp($camera_id,$start_time,$end_time);
  736. return self::successResponse($result);
  737. }else{
  738. $result = CameraServices::getPlaybackRtmp($camera_id,$start_time,$end_time,$time);
  739. return self::successResponse($result);
  740. }
  741. }
  742. //easydrawin回放URL
  743. public function getPlaybackUrlByEasy(){
  744. $time['start_time'] = explode(' ',Input::get('start_time', ''))[1];
  745. $time['end_time'] = explode(' ',Input::get('end_time', ''))[1];
  746. $camera_id = Input::get('camera_id', '');
  747. $start_time = Input::get('start_time', '');
  748. $end_time = Input::get('end_time', '');
  749. $result['status'] = true;
  750. $result['msg'] = ApiEnum::RETURN_SUCCESS;
  751. if (!$camera_id || !$start_time || !$end_time) {
  752. $result['status'] = false;
  753. $result['msg'] = ApiEnum::STATUS_CODE_EMPTY;
  754. return $result;
  755. }
  756. $query = CameraList::where('id', $camera_id)->first();
  757. if (!$query) {
  758. $result['status'] = false;
  759. $result['msg'] = ApiEnum::NO_CAMERA_URL;
  760. return $result;
  761. }
  762. if($query->playback == 0){
  763. $result['status'] = false;
  764. $result['msg'] = ApiEnum::NO_SUPORT_PLAYBACK;
  765. return $result;
  766. }
  767. $degree = MineList::where('id', $query->mine_id)->value('degree');
  768. $degree = explode('|', $degree)[0];
  769. $mine_res = DB::table('mine_list')->where('id',$degree)->get();
  770. //判断摄像头是否是洗选中心的时间+34分钟
  771. if($mine_res[0]->slug == 'XiXuanZhongXin'){
  772. $start_time = date('Y-m-d H:i:s',strtotime($start_time.'+34 minutes'));
  773. $end_time = date('Y-m-d H:i:s',strtotime($end_time.'+34 minutes'));
  774. }
  775. $str = '.000+';
  776. $start_time = date('c', strtotime($start_time));//2022-07-14T08:00:00.000+08:00
  777. $start_time = explode('+',$start_time);
  778. $start_time = $start_time[0].$str.$start_time[1];
  779. $end_time = date('c', strtotime($end_time));
  780. $end_time = explode('+',$end_time);
  781. $end_time = $end_time[0].$str.$end_time[1];
  782. //判断是否在配置文件里,在的不用走ffmpeg
  783. if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('playback'))){
  784. $result = CameraServices::getPlaybackRtsp($camera_id,$start_time,$end_time);
  785. return self::successResponse($result);
  786. }else{
  787. $result = CameraServices::getPlaybackByEasy($camera_id,$start_time,$end_time,$time);
  788. return self::successResponse($result);
  789. }
  790. }
  791. /**
  792. * 作者: qiuzijian
  793. * 注释: 获取编码设备信息
  794. * @return \App\Http\Controllers\Api\JsonResponse
  795. */
  796. public function getTranscodeInfo()
  797. {
  798. $parent_id = Input::get('parent_id', '');
  799. if (!$parent_id) {
  800. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  801. }
  802. $result = CameraServices::getHaiKangTransCode($parent_id);
  803. return self::successResponse($result);
  804. }
  805. /**
  806. * 作者: qiuzijian
  807. * 注释: 获取大南湖摄像头列表
  808. * @return \App\Http\Controllers\Api\JsonResponse
  809. */
  810. public function getSouthLakeCamera()
  811. {
  812. $result = CameraServices::getLeChangeCamera();
  813. return self::successResponse($result);
  814. }
  815. public function pictureBase64(){
  816. $base64 = Input::get('base64', '');
  817. $camera_id = Input::get('camera_id', '');
  818. if (!$base64 || !$camera_id) {
  819. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  820. }
  821. $data['base64'] = $base64;
  822. DB::table('camera_list')->where('id',$camera_id)->update($data);
  823. return self::successResponse();
  824. }
  825. public function test(){
  826. // header("Access-Control-Allow-Origin: *");
  827. $data = DB::table('goods')->get();
  828. return $data;
  829. }
  830. public function testadd(){
  831. // header("Access-Control-Allow-Origin: *");
  832. $res['good_name'] = Input::get('good_name', '');
  833. $res['good_url'] = 'images/1.jpg';
  834. $res['good_count'] = Input::get('good_count', '');
  835. $res['good_price'] = Input::get('good_price', '');
  836. $res['good_state'] = Input::get('good_state', '');
  837. DB::table('goods')->insert($res);
  838. return true;
  839. }
  840. public function testdel(){
  841. // header("Access-Control-Allow-Origin: *");
  842. DB::table('goods')->where('id',Input::get('id',''))->delete();
  843. return true;
  844. }
  845. public function testupdate(){
  846. // header("Access-Control-Allow-Origin: *");
  847. $res['good_name'] = Input::get('good_name', '');
  848. $res['good_url'] = 'images/1.jpg';
  849. $res['good_count'] = Input::get('good_count', '');
  850. $res['good_price'] = Input::get('good_price', '');
  851. $res['good_state'] = Input::get('good_state', '');
  852. DB::table('goods')->where('id',Input::get('id',''))->update($res);
  853. return true;
  854. }
  855. //值班信息
  856. public function dutyInformation(){
  857. $today = date('Y-m-d');
  858. $tomorrow = date("Y-m-d",strtotime("+1 day"));
  859. $result['today_zzb'] = DB::connection('etl_zaoquan')->select("select * from news_duty_list where date ='".$today."' and type = 'zzb'");
  860. $result['today_fzzb'] = DB::connection('etl_zaoquan')->select("select * from news_duty_list where date ='".$today."' and type = 'fz'");
  861. $result['tomorrow_zzb'] = DB::connection('etl_zaoquan')->select("select * from news_duty_list where date ='".$tomorrow."' and type = 'zzb'");
  862. $result['tomorrow_fzzb'] = DB::connection('etl_zaoquan')->select("select * from news_duty_list where date ='".$tomorrow."' and type = 'fz'");
  863. return self::successResponse($result);
  864. }
  865. //分类列表
  866. public function typeList(){
  867. $result = $result = DB::connection('etl_zaoquan')->select("select type from news_column_list group by type");
  868. if(count($result) > 0){
  869. for($i=0;$i<count($result);$i++){
  870. if($result[$i]->type=="mkxw"){
  871. unset($result[$i]);
  872. $newObject = ['type' => 'mkxw','name'=>'煤矿新闻'];
  873. array_unshift($result, $newObject);
  874. }
  875. if($result[$i]->type == 'aqsc'){
  876. $result[$i]->name = '安全生产';
  877. }
  878. if($result[$i]->type == 'mkxw'){
  879. $result[$i]->name = '煤矿新闻';
  880. }
  881. if($result[$i]->type == 'zwbg'){
  882. $result[$i]->name = '政务办公';
  883. }
  884. if($result[$i]->type == 'djgz'){
  885. $result[$i]->name = '党建工作';
  886. }
  887. if($result[$i]->type == 'qygl'){
  888. $result[$i]->name = '企业管理';
  889. }
  890. if($result[$i]->type == 'jdgl'){
  891. $result[$i]->name = '机电管理';
  892. }
  893. if($result[$i]->type == 'scjsgl'){
  894. $result[$i]->name = '生产技术管理';
  895. }
  896. if($result[$i]->type == 'jjjc'){
  897. $result[$i]->name = '纪检监察';
  898. }
  899. if($result[$i]->type == 'zhzl'){
  900. $result[$i]->name = '综合治理';
  901. }
  902. if($result[$i]->type == 'jypx'){
  903. $result[$i]->name = '教育培训';
  904. }
  905. if($result[$i]->type == 'kwgk'){
  906. $result[$i]->name = '矿务公开';
  907. }
  908. }
  909. }
  910. return self::successResponse($result);
  911. }
  912. //文章列表
  913. public function articleList(Request $request){
  914. $params = $request->all();
  915. if (!isset($params['page_size'])) {
  916. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  917. }
  918. if (!isset($params['page_num'])) {
  919. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  920. }
  921. if (!isset($params['type'])) {
  922. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  923. }
  924. $offset = $params['page_size'] * ($params['page_num'] - 1);
  925. $result = DB::connection('etl_zaoquan')->select("select * from news_column_list where type = '".$params['type']."' order by create_time desc limit ".$params['page_size']." offset ".$offset);
  926. $pattern = '/<img(.*?)src=["\'](.*?)["\'](.*?)>/i';//图片
  927. $pattern2 = '/href="([^"]+)"/';//文件
  928. if(count($result) > 0){
  929. for($i=0;$i<count($result);$i++){
  930. //替换title_image
  931. $old_title_image = $result[$i]->title_image;
  932. $old_title_image_array = explode('/',$old_title_image);
  933. $old_img_path = $old_title_image_array[count($old_title_image_array)-1];
  934. $new_img_path_list = DB::connection('etl_zaoquan')->select("select * from news_img_list where img_name ='".$old_img_path."'");
  935. if(count($new_img_path_list) > 0){
  936. $result[$i]->main_img = $new_img_path_list[0]->new_name;
  937. }
  938. unset($result[$i]->title_image);
  939. $result[$i]->created_at = $result[$i]->create_time;
  940. unset($result[$i]->create_time);
  941. //替换text的图片
  942. preg_match_all($pattern, $result[$i]->text, $matches);
  943. foreach ($matches[2] as $index => $oldSrc) {
  944. $news_img_list = DB::connection('etl_zaoquan')->select("select * from news_img_list where img_name ='".basename($oldSrc)."'");
  945. if(count($news_img_list) > 0){
  946. $newSrc = $news_img_list[0]->new_name;
  947. $result[$i]->text = str_replace($oldSrc, $newSrc, $result[$i]->text);
  948. }
  949. }
  950. //替换text的文件
  951. preg_match_all($pattern2, $result[$i]->text, $matches2);
  952. foreach ($matches2[1] as $index => $oldSrc) {
  953. $news_file_list = DB::connection('etl_zaoquan')->select("select * from news_img_list where img_name ='".basename($oldSrc)."'");
  954. if(count($news_file_list) > 0){
  955. $newSrc = $news_file_list[0]->new_name;
  956. $result[$i]->text = str_replace($oldSrc, $newSrc, $result[$i]->text);
  957. }
  958. }
  959. }
  960. }
  961. return self::successResponse($result);
  962. }
  963. //文章图片上传至阿里云
  964. public function ossUrl(Request $request){
  965. $params = $request->all();
  966. if (!isset($params['url'])) {
  967. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  968. }
  969. $result = $this->downloadFile($params['url']);
  970. return self::successResponse($result);
  971. }
  972. //下载文件
  973. public function downloadFile($file_path)
  974. {
  975. $rename = mt_rand(1111111,9999999);
  976. if (!$file_path) {
  977. return false;
  978. }
  979. set_time_limit(0);
  980. $ch = curl_init($file_path);
  981. curl_setopt($ch, CURLOPT_HEADER, 0);
  982. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  983. curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
  984. $rawdata = curl_exec ($ch);
  985. curl_close ($ch);
  986. $houzhui = explode('.',$file_path);
  987. $houzhui = '.'.$houzhui[count($houzhui)-1];
  988. // 使用中文文件名需要转码
  989. $fp = fopen(public_path() . '/filedownload/' . $rename.$houzhui, 'w');
  990. fwrite($fp, $rawdata);
  991. fclose($fp);
  992. $file_name = $rename;
  993. //上传文件
  994. $file_oss_path = $this->uploadFile($file_name,$houzhui);
  995. return $file_oss_path;
  996. }
  997. //上传文件
  998. public function uploadFile($file_name,$houzhui)
  999. {
  1000. try{
  1001. $oss = new OssClient(
  1002. Config::get('filesystems.disks.oss_view.access_key'),
  1003. Config::get('filesystems.disks.oss_view.secret_key'),
  1004. Config::get('filesystems.disks.oss_view.endpoint')
  1005. );
  1006. $file_path = public_path() . '/filedownload/' . $file_name.$houzhui;
  1007. $res = $oss->uploadFile(Config::get('filesystems.disks.oss_view.bucket'), $file_name.$houzhui, $file_path);
  1008. } catch(\OssException $e) {
  1009. printf(__FUNCTION__ . ": FAILED\n");
  1010. printf($e->getMessage() . "\n");
  1011. return;
  1012. }
  1013. if (isset($res['info']['url']) && $res['info']['url']) {
  1014. unlink($file_path);
  1015. return urldecode($res['info']['url']);
  1016. } else {
  1017. return false;
  1018. }
  1019. }
  1020. //摄像头访问记录入库
  1021. public function cameraRecordInsert(Request $request){
  1022. $params = $request->all();
  1023. if(isset($params['staff_num']) && isset($params['name']) && isset($params['camera_id']) && isset($params['start_time']) && isset($params['end_time'])){
  1024. $camera = DB::table('camera_list')->where('id',$params['camera_id'])->get();
  1025. $mine = DB::table('mine_list')->where('id',$camera[0]->mine_id)->get();
  1026. $degree = explode('|',$mine[0]->degree);
  1027. $unit = DB::table('mine_list')->where('id',$degree[0])->get();
  1028. $data['staff_num'] = $params['staff_num'];
  1029. $data['name'] = $params['name'];
  1030. $data['mine_id'] = $camera[0]->mine_id;
  1031. $data['camera_id'] = $params['camera_id'];
  1032. $data['camera_name'] = $camera[0]->camera_name;
  1033. $data['unit_name'] = $unit[0]->title;
  1034. if(isset($params['base64'])){
  1035. $data['base64'] = $params['base64'];
  1036. }
  1037. $data['start_time'] = date('Y-m-d').' '.$params['start_time'];
  1038. $data['start_time'] = date('Y-m-d').' '.$params['end_time'];
  1039. $data['created_at'] = date('Y-m-d H:i:s');
  1040. $data['updated_at'] = date('Y-m-d H:i:s');
  1041. DB::table('camera_record')->insert($data);
  1042. }
  1043. }
  1044. //摄像头访问记录入库
  1045. public function cameraRecordList(Request $request){
  1046. $params = $request->all();
  1047. if (!isset($params['camera_id'])) {
  1048. return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
  1049. }
  1050. $camera_record = DB::table('camera_record')->where('camera_id',$params['camera_id'])->where('deleted_at',null)->orderBy('created_at','desc')->limit(20)->get();
  1051. return self::successResponse($camera_record);
  1052. }
  1053. }