lesson.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. var express = require('express');
  2. var mac = require('getmac');//获取mac地址
  3. var os = require('os');
  4. var fs = require('fs');
  5. var url = require('url');
  6. var router = express.Router();
  7. var ljConst = require("../common/LjConst");
  8. var ljRetState = require("../common/LjRetState");
  9. var logHelper = require("../helper/LjLogHelper.js");
  10. var httpHelper = require("../helper/LjHttpHelper");
  11. var fileHelper = require("../helper/LjFileHelper");
  12. var apiHelper = require("../helper/LjApiHelper");
  13. var ljStringHelper = require("../helper/LjStringHelper");
  14. /**
  15. * 获取MAC地址
  16. */
  17. router.get("/getMac", function (req, res)
  18. {
  19. var mac = apiHelper.getApiForGetMac();
  20. ljRetState.code = 200;
  21. ljRetState.data = mac;
  22. ljRetState.success = true;
  23. logHelper.info(mac);
  24. res.setHeader("Access-Control-Allow-Origin", "*");
  25. res.json(ljRetState);
  26. return;
  27. });
  28. /**
  29. * 下载文件
  30. */
  31. router.get("/downloadFile", function (req, res, next)
  32. {
  33. var arg = url.parse(req.url, true).query;
  34. var courseId = arg.courseId;
  35. var eid = arg.eid;
  36. var uid = arg.uid;
  37. var token = arg.token;
  38. var lessonId = arg.lessonId;
  39. //获取参数
  40. logHelper.debug(arg);
  41. //校验参数
  42. if (ljStringHelper.isNull(courseId))
  43. {
  44. logHelper.info("null object of courseId");
  45. ljRetState.code = 2;
  46. ljRetState.msg = "null object of courseId"
  47. res.json(ljRetState);
  48. return;
  49. }
  50. if (ljStringHelper.isNull(lessonId))
  51. {
  52. logHelper.info("null object of lessonId");
  53. ljRetState.code = 2;
  54. ljRetState.msg = "null object of lessonId"
  55. res.json(ljRetState);
  56. return;
  57. }
  58. if (ljStringHelper.isNull(eid))
  59. {
  60. logHelper.info("null object of eid");
  61. ljRetState.code = 2;
  62. ljRetState.msg = "null object of eid"
  63. res.json(ljRetState);
  64. return;
  65. }
  66. if (ljStringHelper.isNull(uid))
  67. {
  68. logHelper.info("null object of uid");
  69. ljRetState.code = 2;
  70. ljRetState.msg = "null object of uid"
  71. res.json(ljRetState);
  72. return;
  73. }
  74. if (ljStringHelper.isNull(token))
  75. {
  76. logHelper.info("null object of token");
  77. ljRetState.code = 2;
  78. ljRetState.msg = "null object of token"
  79. res.json(ljRetState);
  80. return;
  81. }
  82. var opt = {};
  83. opt.eid = eid;
  84. opt.uid = uid;
  85. opt.token = token;
  86. opt.lessonId = lessonId;
  87. opt.courseId = courseId;
  88. opt.path = "/lesson/" + opt.lessonId;
  89. opt.url = apiHelper.getApiForQueryCourse(opt.lessonId, opt.courseId, opt.eid);
  90. opt.method = "get";
  91. httpHelper.request(opt, function (error, res, body)
  92. {
  93. let obj = JSON.parse(body);
  94. console.info(body)
  95. var lessonJsonObj = JSON.parse(body);
  96. if (lessonJsonObj.code == 200)
  97. {
  98. /*课件-Begin*/
  99. //课程集合
  100. var courseList = lessonJsonObj.data.list;
  101. //课程数
  102. var courseListSize = courseList.length;
  103. //获取总共资源数
  104. var res_total = 0;
  105. for (var i = 0; i < courseListSize; i++)
  106. {
  107. //资源集合
  108. var resourceList = courseList[i].list;
  109. //资源数
  110. var resourceSize = resourceList.length;
  111. res_total += resourceSize
  112. }
  113. logHelper.info("res_total:" + res_total);
  114. /*课件-End*/
  115. //添加下载记录
  116. opt.resTotal = res_total;
  117. opt.resSize = 0;
  118. addDownload(opt);
  119. logHelper.info("Begin to download file with lessonId【" + opt.lessonId + "】");
  120. //添加下载记录
  121. //遍历课件
  122. for (var i = 0; i < courseListSize; i++)
  123. {
  124. var courseObj = courseList[i];
  125. if (courseObj.type == ljConst.RES_TYPE_IMAGE || courseObj.type == ljConst.RES_TYPE_VIDEO)
  126. {
  127. //资源集合
  128. var resourceList = courseList[i].list;
  129. //资源数
  130. var resourceSize = resourceList.length;
  131. for (var j = 0; j < resourceSize; j++)
  132. {
  133. logHelper.debug(resourceList[j].url);
  134. var url = resourceList[j].url;
  135. fileHelper.downloadFile(url, opt);
  136. }
  137. }//处理语音
  138. else if (courseObj.type == ljConst.RES_TYPE_AUDIO)
  139. {
  140. if (courseObj.list.length > 0)
  141. {
  142. var audioObj = courseObj.list[0];
  143. var image = audioObj.img;
  144. var audio = audioObj.audio;
  145. //下载图片
  146. if (image != null && image.url != "")
  147. {
  148. fileHelper.downloadFile(image.url, opt);
  149. }
  150. //下载语音
  151. if (audio != null && audio.url != "")
  152. {
  153. fileHelper.downloadFile(audio.url, opt);
  154. }
  155. }
  156. }
  157. }
  158. /*课件-End*/
  159. return "ok";
  160. }
  161. else
  162. {
  163. logHelper.error("failed to query lesson with lessonId[" + opt.lessonId + "],caused by error:" + lessonJsonObj);
  164. return "error";
  165. }
  166. })
  167. ljRetState.code = 200;
  168. ljRetState.msg = "null object of uid"
  169. ljRetState.success = true;
  170. res.setHeader("Access-Control-Allow-Origin", "*");
  171. res.json(ljRetState);
  172. return;
  173. });
  174. /**
  175. * 读取文件
  176. */
  177. router.get("/readFile", function (req, res)
  178. {
  179. var arg = url.parse(req.url, true).query;
  180. var fileDirStr = arg.n;
  181. var platform = os.platform();
  182. var fileDirNew = "";
  183. if (platform == "win32")
  184. {
  185. fileDirNew = fileDirStr.replace(/\*/g, '\\');
  186. }
  187. else
  188. {
  189. fileDirNew = fileDirStr.replace(/\*/g, '/');
  190. }
  191. //判断文件是否存在
  192. if (!fs.existsSync(fileDirNew))
  193. {
  194. ljRetState.code = 1;
  195. ljRetState.msg = "文件没有找到"
  196. ljRetState.success = false;
  197. res.setHeader("Access-Control-Allow-Origin", "*");
  198. res.json(ljRetState);
  199. return false;
  200. }
  201. var fileDir = fileHelper.getFileDir(fileDirNew)
  202. var fileProp = fileHelper.getFileProperty(fileDir);
  203. logHelper.info(fileProp.fileType);
  204. if (fileProp.fileType == ljConst.VIDEO_TYPE_MP4)
  205. {
  206. logHelper.info(fileDir);
  207. fileHelper.readDecryptedStream(res, fileDir, "video/mp4")
  208. }
  209. else
  210. {
  211. fileHelper.readDecryptedStream(res, fileDir, "image/jpeg")
  212. }
  213. });
  214. /**
  215. * 删除下载文件
  216. */
  217. router.get("/delFile", function (req, res)
  218. {
  219. var arg = url.parse(req.url, true).query;
  220. var courseId = arg.courseId;
  221. var eid = arg.eid;
  222. var uid = arg.uid;
  223. var token = arg.token;
  224. var lessonId = arg.lessonId;
  225. console.info(arg);
  226. //获取参数
  227. logHelper.debug(arg);
  228. //校验参数
  229. if (ljStringHelper.isNull(courseId))
  230. {
  231. logHelper.info("null object of courseId");
  232. ljRetState.code = 2;
  233. ljRetState.msg = "null object of courseId"
  234. res.json(ljRetState);
  235. return;
  236. }
  237. if (ljStringHelper.isNull(lessonId))
  238. {
  239. logHelper.info("null object of lessonId");
  240. ljRetState.code = 2;
  241. ljRetState.msg = "null object of lessonId"
  242. res.json(ljRetState);
  243. return;
  244. }
  245. if (ljStringHelper.isNull(eid))
  246. {
  247. logHelper.info("null object of eid");
  248. ljRetState.code = 2;
  249. ljRetState.msg = "null object of eid"
  250. res.json(ljRetState);
  251. return;
  252. }
  253. if (ljStringHelper.isNull(uid))
  254. {
  255. logHelper.info("null object of uid");
  256. ljRetState.code = 2;
  257. ljRetState.msg = "null object of uid"
  258. res.json(ljRetState);
  259. return;
  260. }
  261. if (ljStringHelper.isNull(token))
  262. {
  263. logHelper.info("null object of token");
  264. ljRetState.code = 2;
  265. ljRetState.msg = "null object of token"
  266. res.json(ljRetState);
  267. return;
  268. }
  269. var opt = {};
  270. opt.eid = eid;
  271. opt.uid = uid;
  272. opt.token = token;
  273. opt.lessonId = lessonId;
  274. opt.courseId = courseId;
  275. opt.path = "/lesson/" + opt.lessonId;
  276. opt.url = apiHelper.getApiForQueryCourse(opt.lessonId, opt.courseId, opt.eid);
  277. opt.method = "get";
  278. httpHelper.request(opt, function (error, res, body)
  279. {
  280. let obj = JSON.parse(body);
  281. console.info(obj);
  282. var lessonJsonObj = JSON.parse(body);
  283. if (lessonJsonObj.code == 200)
  284. {
  285. /*课件-Begin*/
  286. //课程集合
  287. var courseList = lessonJsonObj.data.list;
  288. //课程数
  289. var courseListSize = courseList.length;
  290. //遍历课件
  291. for (var i = 0; i < courseListSize; i++)
  292. {
  293. var courseObj = courseList[i];
  294. //处理图片删除
  295. if (courseObj.type == ljConst.RES_TYPE_IMAGE)
  296. {
  297. //资源集合
  298. var resourceList = courseObj.list;
  299. //资源数
  300. var resourceSize = resourceList.length;
  301. for (var j = 0; j < resourceSize; j++)
  302. {
  303. var url = resourceList[j].url;
  304. var delFileProp = fileHelper.getFilePropertyNoMkdir(url);
  305. var delFileDir = delFileProp.folderDir + delFileProp.fileName + "_new." + delFileProp.fileType;
  306. //判断文件是否存在
  307. if (fs.existsSync(delFileDir))
  308. {
  309. //删除路径
  310. fs.unlinkSync(delFileDir);
  311. }
  312. }
  313. }//处理视频删除
  314. else if (courseObj.type == ljConst.RES_TYPE_VIDEO)
  315. {
  316. //资源集合
  317. var resourceList = courseObj.list;
  318. //资源数
  319. var resourceSize = resourceList.length;
  320. for (var j = 0; j < resourceSize; j++)
  321. {
  322. var url = resourceList[j].url;
  323. var delFileProp = fileHelper.getFilePropertyNoMkdir(url);
  324. var delFileDir = delFileProp.folderDir + delFileProp.fileName + "_new.mp4";
  325. //判断文件是否存在
  326. if (fs.existsSync(delFileDir))
  327. {
  328. //删除路径
  329. fs.unlinkSync(delFileDir);
  330. }
  331. }
  332. }
  333. //处理语音删除
  334. else if (courseObj.type == ljConst.RES_TYPE_AUDIO)
  335. {
  336. if (courseObj.list.length > 0)
  337. {
  338. var audioObj = courseObj.list[0];
  339. var image = audioObj.img;
  340. var audio = audioObj.audio;
  341. //删除图片
  342. if (image != null && image.url == "")
  343. {
  344. var delFileProp = fileHelper.getFilePropertyNoMkdir(url);
  345. var delFileDir = delFileProp.folderDir + delFileProp.fileName + "_new." + delFileProp.fileType;
  346. //判断文件是否存在
  347. if (fs.existsSync(delFileDir))
  348. {
  349. //删除路径
  350. fs.unlinkSync(delFileDir);
  351. }
  352. }
  353. //删除语音
  354. if (audio != null && audio.url == "")
  355. {
  356. var delFileProp = fileHelper.getFilePropertyNoMkdir(url);
  357. var delFileDir = delFileProp.folderDir + delFileProp.fileName + "_new.mp3";
  358. //判断文件是否存在
  359. if (fs.existsSync(delFileDir))
  360. {
  361. //删除路径
  362. fs.unlinkSync(delFileDir);
  363. }
  364. }
  365. }
  366. }
  367. }
  368. /*课件-End*/
  369. //删除记录
  370. delDownload(opt);
  371. return "ok";
  372. }
  373. else
  374. {
  375. logHelper.error("failed to query lesson with lessonId[" + opt.lessonId + "],caused by error:" + lessonJsonObj);
  376. return "error";
  377. }
  378. });
  379. ljRetState.code = 2;
  380. ljRetState.msg = "null object of uid"
  381. ljRetState.success = true;
  382. res.setHeader("Access-Control-Allow-Origin", "*");
  383. res.json(ljRetState);
  384. return "";
  385. });
  386. var addDownload = function (opt)
  387. {
  388. var macAddressStr = "";
  389. mac.getMac(function (err, macAddress)
  390. {
  391. if (err) throw err;
  392. macAddressStr = macAddress; //获取mac地址
  393. });
  394. console.info("macAddressStr:" + macAddressStr);
  395. opt.url = apiHelper.getApiForAddDownload(opt.lessonId, opt.courseId, opt.resTotal, opt.resSize);
  396. opt.method = "post";
  397. opt.path = "/callback/download/add";
  398. httpHelper.request(opt, function (error, res, body)
  399. {
  400. var retObj = JSON.parse(body);
  401. logHelper.debug(retObj);
  402. if (retObj.code == 200)
  403. {
  404. logHelper.info("Succeed to call api[" + opt.path + "]");
  405. return true;
  406. }
  407. else
  408. {
  409. logHelper.error("Failed to call api[" + opt.path + "],caused by error[" + retObj + "]");
  410. return false;
  411. }
  412. });
  413. }
  414. var delDownload = function (opt)
  415. {
  416. opt.url = apiHelper.getApiForDelDownload(opt.lessonId, null);
  417. opt.method = "delete";
  418. opt.path = "/callback/download/delete";
  419. httpHelper.request(opt, function (error, res, body)
  420. {
  421. var retObj = JSON.parse(body);
  422. logHelper.debug(retObj);
  423. if (retObj.code == 200)
  424. {
  425. logHelper.info("Succeed to call api[" + opt.path + "]");
  426. return true;
  427. }
  428. else
  429. {
  430. logHelper.error("Failed to call api[" + opt.path + "],caused by error[" + retObj + "]");
  431. return false;
  432. }
  433. });
  434. }
  435. module.exports = router;