lesson.js 10 KB

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