Train.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <?php
  2. namespace app\client\controller;
  3. use app\model\TrainClass;
  4. use app\model\TrainCourse;
  5. use app\model\TrainDoneLog;
  6. use think\facade\Db;
  7. use think\facade\Console;
  8. use app\model\TrainCourseView;
  9. use app\model\TrainClassCate;
  10. use app\model\Company;
  11. use app\event\FootPrints;
  12. class Train extends Base
  13. {
  14. public function __construct()
  15. {
  16. $this->request = request();
  17. $token = $this->request->token;
  18. $root_id = $token['root_org'];
  19. if(!in_array($root_id,[23])) return json(['code' => 0, 'data' => '']);
  20. }
  21. /**
  22. * 课程分类列表接口
  23. */
  24. public function get_train_class_cate()
  25. {
  26. $token = $this->request->token;
  27. $w[] = ['root_id','=',$token['root_org']];
  28. $w[] = ['pid','=',0];
  29. $list = TrainClassCate::where($w)->field('id,name')->order(['order'=>'asc','id'=>'desc'])->select();
  30. $footdata = ['id'=>(int)$token['root_org']];
  31. event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $footdata, 'TrainClassList'));
  32. return json(['code' => 0, 'data' => $list]);
  33. }
  34. /**
  35. * 获取课程培训标签
  36. */
  37. public function get_train_class_label()
  38. {
  39. $token = $this->request->token;
  40. $pid = input('pid',0);
  41. $w[] = ['root_id','=',$token['root_org']];
  42. $w[] = ['pid','=',$pid];
  43. $list = TrainClassCate::where($w)->field('id,name')->order('id asc')->select();
  44. return json(['code' => 0, 'data' => $list]);
  45. }
  46. /**
  47. * 课程列表接口
  48. */
  49. public function trainClassList()
  50. {
  51. $token = $this->request->token;
  52. $param = $this->request->only(['page'=>1,'limit'=>10]);
  53. $condition = [
  54. ['root_id','=',$token['root_org']],
  55. ['del','=',0],
  56. ['publish','=',1],
  57. ['from_type','=',0]
  58. ];
  59. $cate = input('cate','');
  60. if ($cate) $condition[] = ['cate','=',$cate];
  61. $label = input('label','');
  62. if ($label) $condition[] = ['label','=',$label];
  63. $keyword = input('keyword','');
  64. if ($keyword) $condition[] = ['title','like','%'.trim($keyword).'%'];
  65. $sql = TrainClass::field('id,title,cover,course_id,category,view,train_employee,addtime,type');
  66. $data = $sql->where($condition)->page($param['page'],$param['limit'])->order('addtime desc')->select()->toArray();
  67. // 查询课程多少人参与,课程章节数
  68. foreach($data as &$item){
  69. $item['course_num'] = empty($item['course_id']) ? 0 : count(explode(',',$item['course_id']));
  70. }
  71. return json(['code' => 0, 'data' => $data]);
  72. }
  73. /**
  74. * 课程课件列表
  75. */
  76. public function trainCourseList($page , $class_id)
  77. {
  78. $from = input('from',0) ? 1 : 0;
  79. $class = TrainClass::where(['id'=>$class_id , 'root_id'=>$this->request->token['root_org'] , 'publish'=>1 , 'del'=>0])->field('course_id,type')->find();
  80. if(empty($class)) return json(['code' => 0, 'data' => []]);
  81. $data = TrainCourse::field('id,title,type')->where([['id', 'in', $class['course_id']],['root_id','=',$this->request->token['root_org']]])->page($page , 20)->order('addtime desc')->select()->toArray();
  82. return json(['code' => 0, 'data' => $data]);
  83. }
  84. /**
  85. * 课程内容详情
  86. */
  87. public function classDetail($class_id)
  88. {
  89. $token = $this->request->token;
  90. $from = input('from',0) ? 1 : 0;
  91. $data = TrainClass::where([['id','=',$class_id],['root_id','=',$token['root_org']],['del','=',0],['publish','=',1]])->field('id,title,cover,des,course_id,type,category,train_employee,addtime,from_type,from_root_id')->find();
  92. if(empty($data)) return json(['code' => 0, 'data' => []]);
  93. $data['course_num'] = empty($data['course_id']) ? 0 : count(explode(',',$data['course_id']));
  94. $data['done_log_num'] = TrainDoneLog::where([['from','=',$from],['class_id','=',$data['id']] , ['root_id','=',$token['root_org']] , ['done_percent','>',0]])->count();
  95. //课程来源
  96. if ($data['from_type'] == 0)
  97. {
  98. $data['from'] = '店面发布';
  99. } elseif ($data['from_type'] == 1) {
  100. $data['from'] = '集团指派';
  101. } else {
  102. $company = Company::where('root_id',$data['from_root_id'])->value('company_name');
  103. $data['from'] = '集团从'.$company.'共享';
  104. }
  105. event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $data, 'TrainClass'));
  106. return json(['code' => 0, 'data' => $data]);
  107. }
  108. /**
  109. * 课件内容详情
  110. */
  111. public function courseDetail($course_id,$class_id)
  112. {
  113. $token = $this->request->token;
  114. $data = TrainCourse::where(['id'=> $course_id , 'root_id'=>$token['root_org']])->find()->toArray();
  115. $data['page_num'] = 0;
  116. //pdf 页数
  117. if ($data['type']=='pdf') {
  118. $data['page_num'] = $data['file'] ? $this->getPageTotal($data['file']) : 0;
  119. }
  120. $data['class_title'] = TrainClass::where([['id','=',$class_id],['root_id','=',$token['root_org']]])->value('title');
  121. $data['class_id'] = $class_id;
  122. event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $data, 'TrainCourse'));
  123. return json(['code' => 0, 'data' => $data]);
  124. }
  125. /**
  126. * 获取PDF的页数
  127. */
  128. public function getPageTotal($path){
  129. // 打开文件
  130. if (!$fp = @fopen($path,"r")) {
  131. $error = "打开文件{$path}失败";
  132. return 0;
  133. } else {
  134. $max=0;
  135. while(!feof($fp)) {
  136. $line = fgets($fp,255);
  137. if (preg_match('/\/Count [0-9]+/', $line, $matches)){
  138. preg_match('/[0-9]+/',$matches[0], $matches2);
  139. if ($max<$matches2[0]) $max=$matches2[0];
  140. }
  141. }
  142. fclose($fp);
  143. // 返回页数
  144. return $max;
  145. }
  146. }
  147. }
  148. ?>