AudioController.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. package cn.efunbox.audio.controller;
  2. import cn.efunbox.audio.vo.SearchVO;
  3. import cn.efunbox.audio.clients.AudioHttp;
  4. import cn.efunbox.audio.consts.Status;
  5. import cn.efunbox.audio.entity.Audio;
  6. import cn.efunbox.audio.entity.Device;
  7. import cn.efunbox.audio.entity.Record;
  8. import cn.efunbox.audio.entity.Rights;
  9. import cn.efunbox.audio.page.OnePage;
  10. import cn.efunbox.audio.plugin.AliStsOssAuth;
  11. import cn.efunbox.audio.service.*;
  12. import cn.efunbox.audio.utils.ApiCode;
  13. import cn.efunbox.audio.utils.Common;
  14. import cn.efunbox.audio.utils.HttpUtil;
  15. import com.alibaba.fastjson.JSONArray;
  16. import com.alibaba.fastjson.JSONObject;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.data.domain.Page;
  20. import org.springframework.web.bind.annotation.*;
  21. import javax.servlet.http.HttpServletRequest;
  22. import javax.servlet.http.HttpServletResponse;
  23. import java.sql.Timestamp;
  24. import java.util.*;
  25. /**
  26. * Created by yao on 17-9-26.
  27. */
  28. @RestController
  29. @Slf4j
  30. @RequestMapping(value = "/audio")
  31. public class AudioController {
  32. @Autowired
  33. AudioService audioService;
  34. @Autowired
  35. DeviceService deviceService;
  36. @Autowired
  37. RecordService recordService;
  38. @Autowired
  39. GroupingService groupingService;
  40. @Autowired
  41. RightsService rightsService;
  42. @Autowired
  43. AudioHttp audioHttp;
  44. @Autowired
  45. AdminService adminService;
  46. @Autowired
  47. TrailService trailService;
  48. @Autowired
  49. private AliStsOssAuth aliStsOssAuth;
  50. /**
  51. * 管理员搜索接口
  52. * @param request
  53. * @param response
  54. */
  55. @RequestMapping(value = "/admsearch", method = RequestMethod.POST)
  56. public void AdminSearch(HttpServletRequest request, HttpServletResponse response){
  57. String idAudio = request.getParameter("idAudio");
  58. String mediaType = request.getParameter("mediaType");
  59. String name = request.getParameter("name");
  60. String album = request.getParameter("album");
  61. String idGroup = request.getParameter("idGroup");
  62. String page = request.getParameter("page");
  63. String size = request.getParameter("size");
  64. if(mediaType==null || mediaType.length()<1)
  65. mediaType = "0";
  66. if(page==null || page.length()<1)
  67. page = "0";
  68. if(size==null || size.length()<1)
  69. size = "0";
  70. Map<String,Object> map = new HashMap<>();
  71. List<Audio> list = null;
  72. if(idAudio!=null && idAudio.length()>0){
  73. Audio audio = audioService.GetOne(Long.valueOf(idAudio));
  74. list = new ArrayList<Audio>();
  75. list.add(audio);
  76. }else if(idGroup!=null && idGroup.length()>0){
  77. Page<Audio> pageRes = audioService.SearchByIdGroup(Integer.valueOf(mediaType), Long.valueOf(idGroup), Integer.valueOf(page), Integer.valueOf(size));
  78. map.put("data", pageRes.getContent());
  79. map.put("size", pageRes.getNumberOfElements());
  80. map.put("total", pageRes.getTotalElements());
  81. }else if(name!=null && name.length()>0 && album!=null && album.length()>0){
  82. list = audioService.SearchByNameAlbum(Integer.valueOf(mediaType), name, album);
  83. }else if(name!=null && name.length()>0){
  84. list = audioService.SearchByName(Integer.valueOf(mediaType), name);
  85. }else if(album!=null && album.length()>0){
  86. list = audioService.SearchByAlbum(Integer.valueOf(mediaType), album);
  87. }else{
  88. Page<Audio> pageRes = audioService.SearchAll(Integer.valueOf(mediaType), Integer.valueOf(page), Integer.valueOf(size));
  89. map.put("data", pageRes.getContent());
  90. map.put("size", pageRes.getNumberOfElements());
  91. map.put("total", pageRes.getTotalElements());
  92. }
  93. if(list!=null){
  94. map.put("data", list);
  95. map.put("size", list.size());
  96. map.put("total", list.size());
  97. }
  98. HttpUtil.responseOkData(request, response, map);
  99. return;
  100. }
  101. /**
  102. * 管理员搜索接口
  103. * @param request
  104. * @param response
  105. */
  106. @RequestMapping(value = "/adminSearch", method = RequestMethod.GET)
  107. public void AdminSearchV2(HttpServletRequest request, HttpServletResponse response,Audio audio,Integer pageNo,Integer pageSize){
  108. OnePage<Audio> onePage = audioService.pageList(audio,pageNo,pageSize);
  109. HttpUtil.responseOkData(request, response, onePage);
  110. return;
  111. }
  112. /**
  113. * 管理员搜索资源平台的接口
  114. * @param request
  115. * @param response
  116. */
  117. @RequestMapping(value = "/resource", method = RequestMethod.POST)
  118. public void AdminLoadResource(HttpServletRequest request, HttpServletResponse response){
  119. String name = request.getParameter("name");
  120. String idResource = request.getParameter("idResource");
  121. String idNo = request.getParameter("idNo");
  122. String type = request.getParameter("type"); //资源类型, 音频,视频, 直播 取值{0,1,2}, 分别表示{视频,音频,直播}
  123. String page = request.getParameter("page");
  124. String size = request.getParameter("size");
  125. JSONArray list = new JSONArray();
  126. String res = null;
  127. if((idResource!=null && idResource.length()>0)
  128. || (idNo!=null && idNo.length()>0)){
  129. if(idResource!=null && idResource.length()>0)
  130. res = audioHttp.SearchByIdResource(idResource);
  131. else
  132. res = audioHttp.SearchByIdNo(idNo);
  133. // System.out.println(res);
  134. Map map = JSONObject.parseObject(res);
  135. try{
  136. if(map.get("code").toString().equalsIgnoreCase("200")){
  137. map = JSONObject.parseObject(map.get("data").toString());
  138. list.add(map);
  139. }
  140. }catch(Exception e){
  141. System.out.println(e.getMessage());
  142. }
  143. }else if(name!=null && name.length()>0){
  144. if(type==null || type.length()<1)
  145. type = "0";
  146. if(page==null || page.length()<1)
  147. page = "1";
  148. if(size==null || size.length()<1)
  149. size = "10";
  150. res = audioHttp.SearchByName(name, Integer.valueOf(type), Integer.valueOf(page)+1, Integer.valueOf(size));
  151. // System.out.println(res);
  152. Map map = JSONObject.parseObject(res);
  153. try{
  154. if(map.get("code").toString().equalsIgnoreCase("200")){
  155. map = JSONObject.parseObject(map.get("data").toString());
  156. list = JSONArray.parseArray(map.get("list").toString());
  157. }
  158. }catch(Exception e){
  159. System.out.println(e.getMessage());
  160. }
  161. }
  162. HttpUtil.responseOkData(request, response, list);
  163. return;
  164. }
  165. /**
  166. * 用户搜索接口
  167. * @param request
  168. * @param response
  169. */
  170. @RequestMapping(value = "/search", method = RequestMethod.POST)
  171. public void Search(HttpServletRequest request, HttpServletResponse response){
  172. String mediaType = request.getParameter("mediaType");
  173. String id = request.getParameter("id");
  174. String name = request.getParameter("name");
  175. String album = request.getParameter("album");
  176. if(mediaType==null || mediaType.length()<1)
  177. mediaType = "0";
  178. if(name==null && album==null){
  179. HttpUtil.responseApiCode(request, response, ApiCode.PARAMETER_ERROR);
  180. return;
  181. }
  182. if(id==null || id.length()==0)
  183. id = request.getHeader("id");
  184. List<Audio> list = null;
  185. // System.out.println("album:"+album+",name:"+name);
  186. if(name!=null && name.length()>0 && album!=null && album.length()>0)
  187. list = audioService.SearchByNameAlbum(Integer.valueOf(mediaType), name, album);
  188. else if(name!=null && name.length()>0)
  189. list = audioService.SearchByName(Integer.valueOf(mediaType), name);
  190. else
  191. list = audioService.SearchByAlbum(Integer.valueOf(mediaType), album);
  192. if(list==null || list.size()<1){
  193. HttpUtil.responseApiCode(request, response, ApiCode.NOT_FOUND);
  194. return;
  195. }
  196. Device device = deviceService.GetOne(Long.valueOf(id));
  197. if(device==null){
  198. HttpUtil.responseApiCode(request, response, ApiCode.PARAMETER_ERROR);
  199. return;
  200. }
  201. //搜素设备所属渠道具有哪些资源组的权限
  202. Long idChannel = device.getIdChannel();
  203. List<Rights> rightsList = rightsService.SearchByIdChannel(idChannel, 0, 0).getContent();
  204. if(rightsList==null || rightsList.size()<1){
  205. HttpUtil.responseApiCode(request, response, ApiCode.ACCESS_DENIED);
  206. return;
  207. }
  208. //过滤出有访问权限的音频列表
  209. List<Audio> audioList = FilterRights(list, rightsList);
  210. if(audioList==null || audioList.size()<1){
  211. HttpUtil.responseApiCode(request, response, ApiCode.ACCESS_DENIED);
  212. return;
  213. }
  214. //随机选择一个音频
  215. Random random = new Random();
  216. int r = Math.abs(random.nextInt())%audioList.size();
  217. Audio audio = audioList.get(r);
  218. /* if(audio.getIdResource()!=null && audio.getIdResource().length()>0){
  219. String res = audioHttp.SearchByIdResource(audio.getIdResource());
  220. // System.out.println(res);
  221. Map map = JSONObject.parseObject(res);
  222. try{
  223. if(map.get("code").toString().equalsIgnoreCase("200")){
  224. map = JSONObject.parseObject(map.get("data").toString());
  225. if(map.get("type").toString().equalsIgnoreCase("1")){ //音频
  226. JSONArray array = JSONArray.parseArray(map.get("audios").toString());
  227. map = JSONObject.parseObject(array.get(0).toString());
  228. String path = map.get("fullPath").toString();
  229. path = path.replaceAll("\n","");
  230. audio.setUrl(path);
  231. }else if(map.get("type").toString().equalsIgnoreCase("0")){ //视频
  232. JSONArray array = JSONArray.parseArray(map.get("videos").toString());
  233. map = JSONObject.parseObject(array.get(0).toString());
  234. String path = map.get("fullPath").toString();
  235. String format = map.get("format").toString();
  236. path = path.replaceAll("\n","");
  237. if(array.size()>1 && false==format.equalsIgnoreCase("mp4")){
  238. map = JSONObject.parseObject(array.get(1).toString());
  239. String quality = map.get("quality").toString();
  240. format = map.get("format").toString();
  241. if(quality.equalsIgnoreCase("standard") || format.equalsIgnoreCase("mp4")){
  242. path = map.get("fullPath").toString();
  243. path = path.replaceAll("\n","");
  244. }
  245. }
  246. audio.setUrl(path);
  247. }
  248. // System.out.println(path);
  249. }
  250. }catch(Exception e){
  251. System.out.println(e.getMessage());
  252. // audio.setUrl("fail to get resource uri");
  253. }
  254. }*/
  255. insertRecord(audio.getId(),device);
  256. //阿里oss临时授权
  257. audio.setUrl(aliStsOssAuth.AuthUrl(audio.getUrl()));
  258. HttpUtil.responseOkData(request, response, audio);
  259. return;
  260. }
  261. private void insertRecord(Long id, Device device) {
  262. Record record = new Record();
  263. record.setIdDevice(device.getId());
  264. record.setIdChannel(device.getIdChannel());
  265. record.setIdAudio(id);
  266. recordService.Insert(record);
  267. }
  268. /**
  269. * 用户搜索接口
  270. * @param request
  271. * @param response
  272. */
  273. @RequestMapping(value = "/searchList", method = RequestMethod.GET)
  274. public void SearchList(HttpServletRequest request, HttpServletResponse response, SearchVO searchVO){
  275. if (Objects.nonNull(searchVO.getPageSize()) && searchVO.getPageSize() > 100) {
  276. HttpUtil.responseApiCode(request, response, ApiCode.PARAMETER_ERROR);
  277. return;
  278. }
  279. Device device = deviceService.GetOne(searchVO.getId());
  280. if(device==null){
  281. HttpUtil.responseApiCode(request, response, ApiCode.PARAMETER_ERROR);
  282. return;
  283. }
  284. //搜素设备所属渠道具有哪些资源组的权限
  285. Long idChannel = device.getIdChannel();
  286. List<Rights> rightsList = rightsService.SearchByIdChannel(idChannel, 0, 0).getContent();
  287. if(rightsList==null || rightsList.size()<1){
  288. HttpUtil.responseApiCode(request, response, ApiCode.ACCESS_DENIED);
  289. return;
  290. }
  291. List<Long> idGroups = new ArrayList<>();
  292. rightsList.stream().forEach(rights -> idGroups.add(rights.getIdGroup()));
  293. //过滤出有访问权限的音频列表
  294. searchVO.setIdGroups(idGroups);
  295. OnePage<Audio> onePage = audioService.searchList(searchVO);
  296. // audioService.searchList(mediaType,name,album);
  297. //
  298. HttpUtil.responseOkData(request, response, onePage);
  299. return;
  300. }
  301. // @RequestMapping(value = "/insert", method = RequestMethod.POST)
  302. // public void Insert(HttpServletRequest request, HttpServletResponse response){
  303. // String gid = request.getParameter("gid");
  304. // String rid = request.getParameter("rid");
  305. // String album = request.getParameter("album");
  306. // String lesson = request.getParameter("lesson");
  307. // String name = request.getParameter("name");
  308. // String url = request.getParameter("url");
  309. // if(gid==null || rid==null || album==null || name==null){
  310. // HttpUtil.responseApiCode(request, response, ApiCode.PARAMETER_ERROR);
  311. // return;
  312. // }
  313. //
  314. // Audio audio = new Audio();
  315. // audio.setIdGroup(Long.valueOf(gid));
  316. // audio.setIdResource(rid);
  317. // audio.setAlbum(album);
  318. // if(lesson!=null && lesson.length()>0)
  319. // audio.setLesson(Integer.valueOf(lesson));
  320. // audio.setName(name);
  321. // audio.setUrl(url);
  322. // audio.setCreated(new Date());
  323. // audio = audioService.Insert(audio);
  324. //
  325. // HttpUtil.responseOutWithJson(request, response, audio);
  326. // return;
  327. // }
  328. @RequestMapping(value = "/insert", method = RequestMethod.POST)
  329. public void Insert(HttpServletRequest request, HttpServletResponse response, @RequestBody Audio audio){
  330. if(audio.getIdGroup()==null || audio.getIdResource()==null || audio.getName()==null){
  331. HttpUtil.responseApiCode(request, response, ApiCode.PARAMETER_ERROR);
  332. return;
  333. }
  334. audio.setStatus(Status.ONLINE.getCode());
  335. audio.setCreated(new Timestamp(new Date().getTime()));
  336. audio = audioService.Insert(audio);
  337. TrailController.Insert(adminService, trailService, request, "audio", audio.getId(), " 新建资源:" + audio.getName());
  338. HttpUtil.responseOkData(request, response, audio);
  339. return;
  340. }
  341. @RequestMapping(value = "/update", method = RequestMethod.POST)
  342. public void Update(HttpServletRequest request, HttpServletResponse response, @RequestBody Audio audio){
  343. if(audio.getId()==null){
  344. HttpUtil.responseApiCode(request, response, ApiCode.PARAMETER_ERROR);
  345. return;
  346. }
  347. System.out.println(audio.toString());
  348. Audio audioOld = audioService.GetOne(audio.getId());
  349. if(audioOld==null){
  350. HttpUtil.responseApiCode(request, response, ApiCode.NOT_FOUND);
  351. return;
  352. }
  353. audio = (Audio)Common.CopyValue(audio, audioOld);
  354. audio = audioService.Insert(audio);
  355. TrailController.Insert(adminService, trailService, request, "audio", audio.getId(), " 修改资源:" + audio.getName());
  356. HttpUtil.responseOkData(request, response, audio);
  357. return;
  358. }
  359. @RequestMapping(value = "/delete", method = RequestMethod.POST)
  360. public void Delete(HttpServletRequest request, HttpServletResponse response){
  361. String idAudio = request.getParameter("idAudio");
  362. audioService.Delete(Long.valueOf(idAudio));
  363. HttpUtil.responseOk(request, response);
  364. TrailController.Insert(adminService, trailService, request, "audio", Long.valueOf(idAudio), " 删除资源:" + idAudio);
  365. return;
  366. }
  367. @RequestMapping(value = "/info/{audioId}", method = RequestMethod.GET)
  368. public void detail(HttpServletRequest request, HttpServletResponse response,@PathVariable(name = "audioId") Long audioId, Long id){
  369. Device device = deviceService.GetOne(id);
  370. if(device==null){
  371. HttpUtil.responseApiCode(request, response, ApiCode.PARAMETER_ERROR);
  372. return;
  373. }
  374. //搜素设备所属渠道具有哪些资源组的权限
  375. Long idChannel = device.getIdChannel();
  376. List<Rights> rightsList = rightsService.SearchByIdChannel(idChannel, 0, 0).getContent();
  377. if(rightsList==null || rightsList.size()<1){
  378. HttpUtil.responseApiCode(request, response, ApiCode.ACCESS_DENIED);
  379. return;
  380. }
  381. List<Long> idGroups = new ArrayList<>();
  382. rightsList.stream().forEach(rights -> idGroups.add(rights.getIdGroup()));
  383. Audio audio = audioService.getAudioInfo(audioId);
  384. if (Objects.isNull(audio) || !idGroups.contains(audio.getIdGroup())) {
  385. HttpUtil.responseApiCode(request, response, ApiCode.ACCESS_DENIED);
  386. return;
  387. }
  388. insertRecord(audio.getId(),device);
  389. HttpUtil.responseOkData(request, response, audio);
  390. return;
  391. }
  392. /**
  393. * 过滤出渠道有访问权限的音频列表
  394. * @param audioList
  395. * @param rightsList
  396. * @return audioList
  397. */
  398. private List<Audio> FilterRights(List<Audio> audioList, List<Rights> rightsList){
  399. List<Audio> aList = new ArrayList<>();
  400. for(int i=0; i<audioList.size(); i++){
  401. for(int j=0; j<rightsList.size(); j++){
  402. if(audioList.get(i).getIdGroup() == rightsList.get(j).getIdGroup()){
  403. aList.add(audioList.get(i));
  404. break;
  405. }
  406. }
  407. }
  408. return aList;
  409. }
  410. }