Trainactive.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. /**
  6. * 培训活动
  7. */
  8. class Trainactive extends Api
  9. {
  10. protected $noNeedLogin = ['info'];
  11. // 无需鉴权的接口,*表示全部
  12. protected $noNeedRight = ['test2'];
  13. //我的培训
  14. public function my_list(){
  15. $now = time();
  16. $papers = Db::name('train_active')->field('id,name as title,logo_image,starttime,endtime,pingjia_time,pingjia_uid')
  17. // ->where('status', 1)
  18. ->where('deletetime', NULL)
  19. ->where("(userauth_status = 1) or (find_in_set('".$this->auth->id."',user_ids) )")
  20. ->autopage()
  21. ->order('starttime desc')
  22. ->select();
  23. foreach($papers as $key => &$val){
  24. $val['logo_image'] = localpath_to_netpath($val['logo_image']);
  25. if($val['pingjia_time'] != 0){ //时间或评价,都行
  26. $val['show_status'] = 3;
  27. $val['show_status_text'] = '已结束';
  28. }elseif($now < $val['starttime']){
  29. $val['show_status'] = 1;
  30. $val['show_status_text'] = '待开始';
  31. }else{
  32. $val['show_status'] = 2;
  33. $val['show_status_text'] = '进行中';
  34. }
  35. }
  36. $this->success('', $papers);
  37. }
  38. //培训详情
  39. public function info(){
  40. $id = input('id',0);
  41. $info = Db::name('train_active')->field('id,name as title,logo_image,starttime,endtime,pingjia,pingjia_time,pingjia_uid,userauth_status,user_ids')
  42. ->where('id', $id)
  43. ->find();
  44. if(!empty($info)){
  45. $info['logo_image'] = localpath_to_netpath($info['logo_image']);
  46. $info['pingjia_nickname'] = '';
  47. if($info['pingjia_uid']){
  48. $info['pingjia_nickname'] = Db::name('user')->where('id',$info['pingjia_uid'])->value('nickname');
  49. }
  50. $now = time();
  51. if($info['pingjia_time'] != 0){ //时间或评价,都行
  52. $info['show_status'] = 3;
  53. $info['show_status_text'] = '已结束';
  54. }elseif($now < $info['starttime']){
  55. $info['show_status'] = 1;
  56. $info['show_status_text'] = '待开始';
  57. }else{
  58. $info['show_status'] = 2;
  59. $info['show_status_text'] = '进行中';
  60. }
  61. //总分
  62. $info['score_sum'] = Db::name('user_train_evaluate')->where('train_id',$id)->sum('score');
  63. //已评分人数
  64. $info['score_count'] = Db::name('user_train_evaluate')->where('train_id',$id)->count();
  65. //应该评分人数
  66. if($info['userauth_status'] == 0){ //是否允许非实名人员:0=否,1=是
  67. $info['score_times'] = count(explode(',',$info['user_ids']));
  68. }else{
  69. $info['score_times'] = Db::name('user_train')->where('train_id',$id)->count();
  70. }
  71. //我的评分
  72. $info['score_my'] = 0;
  73. if($this->auth->isLogin()){
  74. $score_my = Db::name('user_train_evaluate')->where('train_id',$id)->where('user_id',$this->auth->id)->value('score');
  75. $info['score_my'] = empty($score_my) ? 0 : $score_my;
  76. }
  77. //我是否能评价
  78. $info['score_button'] = 0;
  79. if($this->auth->isLogin()){
  80. if(empty($score_my)){
  81. if($info['userauth_status'] == 1){ //是否允许非实名人员:0=否,1=是
  82. $info['score_button'] = 1;
  83. }else{
  84. if(in_array($this->auth->id,explode(',',$info['user_ids']))){
  85. $info['score_button'] = 1;
  86. }
  87. }
  88. }
  89. }
  90. //
  91. unset($info['userauth_status']);
  92. unset($info['user_ids']);
  93. }
  94. $this->success(1,$info);
  95. }
  96. //签到成功
  97. public function signin(){
  98. $sign_image = input('sign_image','');
  99. if(empty($sign_image)){
  100. $this->error();
  101. }
  102. //
  103. $id = input('id');
  104. $info = Db::name('train_active')->where('id',$id)->find();
  105. if(empty($info)){
  106. $this->error('不存在的培训活动');
  107. }
  108. //判断
  109. if($info['status'] != 1){
  110. $this->error('该培训已下架');
  111. }
  112. if($info['userauth_status'] == 0){
  113. if(!in_array($this->auth->id,explode(',',$info['user_ids']))){
  114. $this->error('您不在该培训活动名单');
  115. }
  116. }
  117. //判断
  118. $map = [
  119. 'train_id' => $id,
  120. 'user_id' => $this->auth->id,
  121. ];
  122. $check = Db::name('user_train')->where($map)->find();
  123. if($check){
  124. $this->error('您已经签过到了');
  125. }
  126. //判断
  127. if(time() < $info['sign_starttime']){
  128. $this->error('还没到签到开始时间');
  129. }
  130. if(time() > $info['endtime']){
  131. $this->error('培训已经结束了');
  132. // $this->error('已错过签到截止时间');
  133. }
  134. //签到
  135. $status = 1;
  136. if(time() > $info['sign_endtime']){
  137. $status = 2;//迟到
  138. }
  139. $data = [
  140. 'train_id' => $id,
  141. 'user_id' => $this->auth->id,
  142. 'sign_time' => time(),
  143. 'status' => $status,
  144. 'sign_image' => $sign_image,
  145. ];
  146. Db::name('user_train')->insertGetId($data);
  147. $this->success('签到成功');
  148. }
  149. //参与者评价提交
  150. public function evaluate(){
  151. $score = input('score',6);
  152. if(!in_array($score,[6,7,8,9,10])){
  153. $this->error('最低6分,最高10分');
  154. }
  155. //
  156. $id = input('id');
  157. $info = Db::name('train_active')->where('id',$id)->find();
  158. if(empty($info)){
  159. $this->error('不存在的培训活动');
  160. }
  161. //判断
  162. if($info['status'] != 1){
  163. $this->error('该培训已下架');
  164. }
  165. if($info['userauth_status'] == 0){
  166. if(!in_array($this->auth->id,explode(',',$info['user_ids']))){
  167. $this->error('您不在该培训活动名单');
  168. }
  169. }
  170. //判断
  171. $map = [
  172. 'train_id' => $id,
  173. 'user_id' => $this->auth->id,
  174. ];
  175. $check = Db::name('user_train')->where($map)->find();
  176. if(empty($check)){
  177. $this->error('您还没签到呢');
  178. }
  179. //判断
  180. $map = [
  181. 'train_id' => $id,
  182. 'user_id' => $this->auth->id,
  183. ];
  184. $check = Db::name('user_train_evaluate')->where($map)->find();
  185. if($check){
  186. $this->error('您已经评分了');
  187. }
  188. //判断
  189. if(time() < $info['starttime']){
  190. $this->error('还没到培训开始时间');
  191. }
  192. if(time() > $info['endtime'] + 3600){
  193. $this->error('培训已经结束一小时了');
  194. }
  195. Db::startTrans();
  196. //入库
  197. $data = [
  198. 'train_id' => $id,
  199. 'user_id' => $this->auth->id,
  200. 'evaluate_time' => time(),
  201. 'score' => $score,
  202. ];
  203. $log_id = Db::name('user_train_evaluate')->insertGetId($data);
  204. if(!$log_id){
  205. Db::rollback();
  206. $this->error('评分失败');
  207. }
  208. //冗余:打分人数,应该打分人数,总分数
  209. //总分
  210. $update['score_sum'] = Db::name('user_train_evaluate')->where('train_id',$id)->sum('score');
  211. //已评分人数
  212. $update['score_count'] = Db::name('user_train_evaluate')->where('train_id',$id)->count();
  213. //应该评分人数
  214. if($info['userauth_status'] == 0){ //是否允许非实名人员:0=否,1=是
  215. $update['score_times'] = count(explode(',',$info['user_ids']));
  216. }else{
  217. $update['score_times'] = Db::name('user_train')->where('train_id',$id)->count();
  218. }
  219. $rs = Db::name('train_active')->where('id',$id)->update($update);
  220. if($rs === false){
  221. Db::rollback();
  222. $this->error('评分失败');
  223. }
  224. Db::commit();
  225. $this->success('评分成功');
  226. }
  227. //评价检测权限
  228. public function check(){
  229. $type = input('type','pingjia');
  230. $id = input('id',0);
  231. if($type == 'pingjia'){
  232. $info = Db::name('train_active')->where('id',$id)->find();
  233. if($info['pingjia_uid'] != $this->auth->id){
  234. $this->error('您不能评价当前培训');
  235. }
  236. $this->success('验证成功');
  237. }
  238. if($type == 'sign'){
  239. $this->success('验证成功');
  240. }
  241. $this->error('验证失败');
  242. }
  243. //评价成功
  244. public function pingjia(){
  245. $pingjia = input('pingjia','');
  246. $pingjia_image = input('sign_image','');
  247. if(empty($pingjia) || empty($pingjia_image)){
  248. $this->error();
  249. }
  250. //
  251. $id = input('id');
  252. $info = Db::name('train_active')->where('id',$id)->find();
  253. if(empty($info)){
  254. $this->error('不存在的培训活动');
  255. }
  256. //判断
  257. if($info['status'] != 1){
  258. $this->error('该培训已下架');
  259. }
  260. if($this->auth->id != $info['pingjia_uid']){
  261. $this->error('您不能评价该培训活动');
  262. }
  263. //评价
  264. $data = [
  265. 'pingjia' => $pingjia,
  266. 'pingjia_image' => $pingjia_image,
  267. 'pingjia_time' => time(),
  268. 'status' => 0, //评价结束,自动下架
  269. ];
  270. Db::name('train_active')->where('id',$id)->update($data);
  271. $this->success('评价成功');
  272. }
  273. }