1
0

mode_knowtraimAction.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. <?php
  2. /**
  3. * 此文件是流程模块【knowtraim.考试培训】对应接口文件。
  4. * 可在页面上创建更多方法如:public funciton testactAjax(),用js.getajaxurl('testact','mode_knowtraim|input','flow')调用到对应方法
  5. */
  6. class mode_knowtraimClassAction extends inputAction{
  7. protected function savebefore($table, $arr, $id, $addbo){
  8. $dsshu = abs((int)$arr['dsshu']);
  9. $dxshu = abs((int)$arr['dxshu']);
  10. $pdshu = abs((int)$arr['pdshu']);
  11. $state = 0;
  12. if($arr['startdt']>=$arr['enddt'])return '开始时间不能大于截止时间';
  13. $where = $this->flow->gettikuwhere($arr['tikuid']);
  14. $darr = $this->db->getall('SELECT `type`,count(1)stotal FROM `[Q]knowtiku` where `status`=1 '.$where.' group by `type`');
  15. $darrs = array(0,0,0);
  16. foreach($darr as $k=>$rs)$darrs[$rs['type']] = (int)$rs['stotal'];
  17. if($dsshu>$darrs[0])return '单选数量太多,题库里只有'.$darrs[0].'题';
  18. if($dxshu>$darrs[1])return '多选数量太多,题库里只有'.$darrs[1].'题';
  19. if($pdshu>$darrs[2])return '判断数量太多,题库里只有'.$darrs[2].'题';
  20. if($dsshu+$dxshu+$pdshu==0)return '至少要一个题目数';
  21. $now = $this->rock->now;
  22. if($arr['enddt']<$now){
  23. $state = 2;
  24. }else if($arr['startdt']<$now){
  25. $state = 1;
  26. }
  27. $rows['dsshu'] = $dsshu;
  28. $rows['dxshu'] = $dxshu;
  29. $rows['pdshu'] = $pdshu;
  30. $rows['state'] = $state;
  31. return array(
  32. 'rows' => $rows
  33. );
  34. }
  35. protected function saveafter($table, $arr, $id, $addbo){
  36. $receid = $arr['receid'];
  37. $ustrs = m('admin')->gjoin($arr['receid'],'ud');
  38. $ustrsa = explode(',', repempt($ustrs));
  39. $dbs = m('knowtrais');
  40. $mrs = m('knowtraim')->getone($id);
  41. $ids = '0';
  42. $reshu = 0;
  43. foreach($ustrsa as $uid){
  44. $where = '`mid`='.$id.' and `uid`='.$uid.'';
  45. $sid = (int)$dbs->getmou('id', $where);
  46. if($sid==0){
  47. $where = '';
  48. }
  49. $uarr = array(
  50. 'mid' => $id,
  51. 'uid' => $uid,
  52. 'comid' => $mrs['comid']
  53. );
  54. $sids = $dbs->record($uarr, $where);
  55. if($sid==0)$sid = $this->db->insert_id();
  56. $ids .= ','.$sid.'';
  57. $reshu++;
  58. }
  59. $dbs->delete('`mid`='.$id.' and `id` not in('.$ids.')');
  60. m($table)->update('`reshu`='.$reshu.'', $id);
  61. }
  62. public function kstimelist()
  63. {
  64. $arrs = explode(',','10,20,30,45,60,70,80,90,100,110,120,130,140,150,160,170,180');
  65. $rows = array();
  66. foreach($arrs as $sj){
  67. $rows[] = array(
  68. 'value' => $sj,
  69. 'name' => $sj.'分钟',
  70. );
  71. }
  72. return $rows;
  73. }
  74. public function knowtraimuserbefore($table)
  75. {
  76. $atype = $this->post('atype');
  77. $key = $this->post('key');
  78. $mid = (int)$this->post('mid','0');
  79. $where = '';
  80. if($atype=='my'){
  81. $where=' and a.`uid`='.$this->adminid.' ';
  82. }else{
  83. if($mid==0 && ISMORECOM){
  84. $where=" and a.`comid`=".m('admin')->getcompanyid()."";
  85. }
  86. }
  87. if($mid!=0)$where.=' and a.`mid`='.$mid.'';
  88. if($key!='')$where.=m('admin')->getkeywhere($key,'c.',"or b.`title` like '%$key%'");
  89. m('flow:knowtraim')->reloadstate();
  90. return array(
  91. 'table' => '`[Q]'.$table.'` a left join `[Q]knowtraim` b on a.mid=b.id left join `[Q]admin` c on c.id=a.`uid`',
  92. 'where' => $where,
  93. 'order' => 'a.id desc',
  94. 'fields'=> 'a.*,b.title,b.state,b.startdt,b.enddt,c.`name`,c.deptname'
  95. );
  96. }
  97. public function knowtraimuserafter($table, $rows)
  98. {
  99. $mdos = m('flow:knowtraim');
  100. foreach($rows as $k=>$rs){
  101. $zt = $mdos->getstatestr($rs['state']);
  102. //$rows[$k]['startdt'] = ''.substr($rs['startdt'],5,11).'至'.substr($rs['enddt'],5,11).'('.$zt.')';
  103. $rows[$k]['startdt'] = ''.$rs['startdt'].'至'.$rs['enddt'].'('.$zt.')';
  104. if($rs['fenshu']=='0' && $rs['isks']==0)$rows[$k]['fenshu']='';
  105. if(!isempt($rs['ksedt']))$rows[$k]['ksedt'] = ''.substr($rs['kssdt'],5,11).'至'.substr($rs['ksedt'],5,11).'';
  106. $strs = ($rs['isks']=='1') ? '<font color=green>已考试</font>' : '<font color=red>未考试</font>';
  107. if($rs['state']=='0')$strs='<font color="#888888">未开始</font>';
  108. $rows[$k]['isks'] = $strs;
  109. $rows[$k]['iskszt'] = $rs['isks'];
  110. }
  111. return array(
  112. 'rows' => $rows
  113. );
  114. }
  115. //初始化考试
  116. public function initkaoshiAjax()
  117. {
  118. $sid = (int)$this->get('sid');
  119. $uid = $this->adminid;
  120. $dbs = m('knowtrais');
  121. $ors = $dbs->getone("`id`='$sid' and `uid`='$uid'");
  122. if(!$ors)return '记录不存在';
  123. if($ors['isks']=='1')return '你已经考试过了';
  124. $dbss = m('flow')->initflow('knowtraim');
  125. $dbss->reloadstate($ors['mid']);//更新状态
  126. $mrs = m('knowtraim')->getone($ors['mid']);
  127. if(!$mrs)return '记录不存在';
  128. if($mrs['state']!='1')return '培训考试题目可能还未开始或已结束了';
  129. $dxshu = (int)$mrs['dxshu'];//多选
  130. $dsshu = (int)$mrs['dsshu']; //单选
  131. $pdshu = (int)$mrs['pdshu']; //单选
  132. $ids = '';
  133. $wheress= $dbss->gettikuwhere($mrs['tikuid'], arrvalue($mrs,'comid','0'));
  134. $itros = m('knowtiku')->getall('`status`=1 '.$wheress.'','id,`type`','`type`,`id`');
  135. $dxarr = $dsarr = $pdarr = array();
  136. foreach($itros as $k=>$rs){
  137. if($rs['type']=='0')$dsarr[] = $rs;
  138. if($rs['type']=='1')$dxarr[] = $rs;
  139. if($rs['type']=='2')$pdarr[] = $rs;
  140. }
  141. for($i=1;$i<=$dsshu; $i++){
  142. $idarr = $this->getrandts($dsarr);
  143. $dsarr = $idarr['rows'];
  144. $idss = $idarr['id'];
  145. if($idss=='0')return '单选的题库不够';
  146. $ids .= ','.$idss.'';
  147. }
  148. for($i=1;$i<=$dxshu; $i++){
  149. $idarr = $this->getrandts($dxarr);
  150. $dxarr = $idarr['rows'];
  151. $idss = $idarr['id'];
  152. if($idss=='0')return '多选的题库不够';
  153. $ids .= ','.$idss.'';
  154. }
  155. for($i=1;$i<=$pdshu; $i++){
  156. $idarr = $this->getrandts($pdarr);
  157. $pdarr = $idarr['rows'];
  158. $idss = $idarr['id'];
  159. if($idss=='0')return '判断的题库不够';
  160. $ids .= ','.$idss.'';
  161. }
  162. if($ids!='')$ids = substr($ids,1);
  163. $uarr['tkids'] = $ids;
  164. $uarr['kssdt'] = $this->rock->now;
  165. $dbs->update($uarr, $sid);
  166. return 'ok';
  167. }
  168. //随机获取题目
  169. private function getrandts($arr)
  170. {
  171. $id = '0';
  172. $nearr = array();
  173. if($arr){
  174. $len= count($arr);
  175. $rnd= rand(0, $len-1);
  176. $id = arrvalue($arr[$rnd],'id');
  177. for($i=0;$i<$len;$i++)if($i!=$rnd)$nearr[]=$arr[$i];
  178. }
  179. return array(
  180. 'rows' => $nearr,
  181. 'id' => $id
  182. );
  183. }
  184. //提交答案
  185. public function datitijAjax()
  186. {
  187. $oi = (int)$this->get('oi');
  188. $sid = (int)$this->get('sid');
  189. $tid = (int)$this->get('tid');
  190. $dy = strtoupper($this->get('dy'));
  191. $uid = $this->adminid;
  192. $dbs = m('knowtrais');
  193. $ors = $dbs->getone("`id`='$sid' and `uid`='$uid'");
  194. if(!$ors)return '记录不存在';
  195. $trs = m('knowtiku')->getone($tid);
  196. $answer = strtoupper($trs['answer']);
  197. $mid = $ors['mid'];
  198. $mrs = m('knowtraim')->getone($mid);
  199. $tkids = $ors['tkids'];
  200. $dyids = $ors['dyids'];
  201. $dyidsa= explode(',', repempt($dyids));
  202. $tkidsa= explode(',', repempt($tkids));
  203. $dyjgsa= explode(',', repempt($ors['dyjgs']));
  204. $danva = $jgarr = array();
  205. $zfenshu = floatval($mrs['zfenshu']); //总分
  206. $hgfen = floatval($mrs['hgfen']); //合格的分数
  207. $tmshu = count($tkidsa);//题目数
  208. $dfen = 0;
  209. $meifen = $zfenshu/$tmshu;
  210. $jg = '0';
  211. foreach($tkidsa as $k=>$xu){
  212. if($k!=$oi){
  213. $danva[$k] = arrvalue($dyidsa, $k);
  214. $jgarr[$k] = arrvalue($dyjgsa, $k,'0');
  215. }else{
  216. $danva[$k] = $dy;
  217. $jg = '2';
  218. if($answer == $dy)$jg='1';
  219. $jgarr[$k] = $jg;
  220. }
  221. }
  222. $days = $jgs = '';
  223. foreach($danva as $k=>$v)$days.=','.$v.'';
  224. $days = substr($days, 1);
  225. foreach($jgarr as $k=>$v){
  226. $jgs.=','.$v.'';
  227. if($v=='1')$dfen+=$meifen;
  228. }
  229. $jgs = substr($jgs, 1);
  230. $barr= array(
  231. 'dyids' => $days,
  232. 'dyjgs' => $jgs,
  233. 'ksedt' => $this->rock->now,
  234. 'kstime'=> $this->get('sj'),
  235. 'isks' => 1,
  236. 'fenshu'=> $dfen
  237. );
  238. $dbs->update($barr, $sid);
  239. if($oi==0)m('flow:knowtraim')->reloadstate($mid);
  240. if($jg=='2')return '错了,正确是:'.$answer.'';
  241. return 'ok';
  242. }
  243. public function finfishAjax()
  244. {
  245. $sid = (int)$this->get('sid');
  246. $dbs = m('knowtrais');
  247. $barr= array(
  248. 'ksedt' => $this->rock->now,
  249. 'kstime'=> $this->get('sj'),
  250. 'isks' => 1
  251. );
  252. $dbs->update($barr, $sid); //更新
  253. m('flow:knowtraim')->reloadstate();
  254. return $dbs->getmou('fenshu', $sid);
  255. }
  256. //标识可重新考试
  257. public function biaoshiAjax()
  258. {
  259. $fid = c('check')->onlynumber($this->post('fid','0'));
  260. m('knowtrais')->update(array(
  261. 'kssdt' => '',
  262. 'ksedt' => '',
  263. 'fenshu' => '0',
  264. 'kstime' => '0',
  265. 'isks' => '0',
  266. 'tkids' => '',
  267. 'dyids' => '',
  268. 'dyjgs' => '',
  269. ),"`id` in($fid) and `mid` in(select `id` from `[Q]knowtraim` where `state`<>2)");
  270. }
  271. public function tongjiAjax()
  272. {
  273. $mid = (int)$this->post('mid');
  274. $arows = m('knowtrais')->getall('`mid`='.$mid.'');
  275. $mrs = m('knowtraim')->getone($mid);
  276. $hgfen = floatval($mrs['hgfen']); //合格的分数
  277. $hgshu = $wks = $bhg =0;
  278. $zshu = 0;
  279. foreach($arows as $k=>$rs){
  280. if($rs['isks']=='0'){
  281. $wks++;
  282. }else{
  283. $fs = floatval($rs['fenshu']);
  284. if($fs>=$hgfen){
  285. $hgshu++;
  286. }else{
  287. $bhg++;
  288. }
  289. }
  290. $zshu++;
  291. }
  292. $rows[] = array(
  293. 'name' => '合格',
  294. 'value'=> $hgshu
  295. );
  296. $rows[] = array(
  297. 'name' => '不合格',
  298. 'value'=> $bhg
  299. );
  300. $rows[] = array(
  301. 'name' => '未考试',
  302. 'value'=> $wks
  303. );
  304. foreach($rows as $k=>$rs){
  305. $bili = $this->rock->number($rs['value']/$zshu*100);
  306. $rows[$k]['bili'] = ''.$bili.'%';
  307. }
  308. $rows[] = array(
  309. 'name' => '合计',
  310. 'value'=> $zshu
  311. );
  312. return array(
  313. 'rows' => $rows
  314. );
  315. }
  316. //读取对应题库
  317. public function tikunamedata()
  318. {
  319. return $this->option->getcnumdata('knowtikutype');
  320. }
  321. }
粤ICP备19079148号