=$arr['enddt'])return '开始时间不能大于截止时间';
$where = $this->flow->gettikuwhere($arr['tikuid']);
$darr = $this->db->getall('SELECT `type`,count(1)stotal FROM `[Q]knowtiku` where `status`=1 '.$where.' group by `type`');
$darrs = array(0,0,0);
foreach($darr as $k=>$rs)$darrs[$rs['type']] = (int)$rs['stotal'];
if($dsshu>$darrs[0])return '单选数量太多,题库里只有'.$darrs[0].'题';
if($dxshu>$darrs[1])return '多选数量太多,题库里只有'.$darrs[1].'题';
if($pdshu>$darrs[2])return '判断数量太多,题库里只有'.$darrs[2].'题';
if($dsshu+$dxshu+$pdshu==0)return '至少要一个题目数';
$now = $this->rock->now;
if($arr['enddt']<$now){
$state = 2;
}else if($arr['startdt']<$now){
$state = 1;
}
$rows['dsshu'] = $dsshu;
$rows['dxshu'] = $dxshu;
$rows['pdshu'] = $pdshu;
$rows['state'] = $state;
return array(
'rows' => $rows
);
}
protected function saveafter($table, $arr, $id, $addbo){
$receid = $arr['receid'];
$ustrs = m('admin')->gjoin($arr['receid'],'ud');
$ustrsa = explode(',', repempt($ustrs));
$dbs = m('knowtrais');
$mrs = m('knowtraim')->getone($id);
$ids = '0';
$reshu = 0;
foreach($ustrsa as $uid){
$where = '`mid`='.$id.' and `uid`='.$uid.'';
$sid = (int)$dbs->getmou('id', $where);
if($sid==0){
$where = '';
}
$uarr = array(
'mid' => $id,
'uid' => $uid,
'comid' => $mrs['comid']
);
$sids = $dbs->record($uarr, $where);
if($sid==0)$sid = $this->db->insert_id();
$ids .= ','.$sid.'';
$reshu++;
}
$dbs->delete('`mid`='.$id.' and `id` not in('.$ids.')');
m($table)->update('`reshu`='.$reshu.'', $id);
}
public function kstimelist()
{
$arrs = explode(',','10,20,30,45,60,70,80,90,100,110,120,130,140,150,160,170,180');
$rows = array();
foreach($arrs as $sj){
$rows[] = array(
'value' => $sj,
'name' => $sj.'分钟',
);
}
return $rows;
}
public function knowtraimuserbefore($table)
{
$atype = $this->post('atype');
$key = $this->post('key');
$mid = (int)$this->post('mid','0');
$where = '';
if($atype=='my'){
$where=' and a.`uid`='.$this->adminid.' ';
}else{
if($mid==0 && ISMORECOM){
$where=" and a.`comid`=".m('admin')->getcompanyid()."";
}
}
if($mid!=0)$where.=' and a.`mid`='.$mid.'';
if($key!='')$where.=m('admin')->getkeywhere($key,'c.',"or b.`title` like '%$key%'");
m('flow:knowtraim')->reloadstate();
return array(
'table' => '`[Q]'.$table.'` a left join `[Q]knowtraim` b on a.mid=b.id left join `[Q]admin` c on c.id=a.`uid`',
'where' => $where,
'order' => 'a.id desc',
'fields'=> 'a.*,b.title,b.state,b.startdt,b.enddt,c.`name`,c.deptname'
);
}
public function knowtraimuserafter($table, $rows)
{
$mdos = m('flow:knowtraim');
foreach($rows as $k=>$rs){
$zt = $mdos->getstatestr($rs['state']);
//$rows[$k]['startdt'] = ''.substr($rs['startdt'],5,11).'至'.substr($rs['enddt'],5,11).'('.$zt.')';
$rows[$k]['startdt'] = ''.$rs['startdt'].'至'.$rs['enddt'].'('.$zt.')';
if($rs['fenshu']=='0' && $rs['isks']==0)$rows[$k]['fenshu']='';
if(!isempt($rs['ksedt']))$rows[$k]['ksedt'] = ''.substr($rs['kssdt'],5,11).'至'.substr($rs['ksedt'],5,11).'';
$strs = ($rs['isks']=='1') ? '已考试' : '未考试';
if($rs['state']=='0')$strs='未开始';
$rows[$k]['isks'] = $strs;
$rows[$k]['iskszt'] = $rs['isks'];
}
return array(
'rows' => $rows
);
}
//初始化考试
public function initkaoshiAjax()
{
$sid = (int)$this->get('sid');
$uid = $this->adminid;
$dbs = m('knowtrais');
$ors = $dbs->getone("`id`='$sid' and `uid`='$uid'");
if(!$ors)return '记录不存在';
if($ors['isks']=='1')return '你已经考试过了';
$dbss = m('flow')->initflow('knowtraim');
$dbss->reloadstate($ors['mid']);//更新状态
$mrs = m('knowtraim')->getone($ors['mid']);
if(!$mrs)return '记录不存在';
if($mrs['state']!='1')return '培训考试题目可能还未开始或已结束了';
$dxshu = (int)$mrs['dxshu'];//多选
$dsshu = (int)$mrs['dsshu']; //单选
$pdshu = (int)$mrs['pdshu']; //单选
$ids = '';
$wheress= $dbss->gettikuwhere($mrs['tikuid'], arrvalue($mrs,'comid','0'));
$itros = m('knowtiku')->getall('`status`=1 '.$wheress.'','id,`type`','`type`,`id`');
$dxarr = $dsarr = $pdarr = array();
foreach($itros as $k=>$rs){
if($rs['type']=='0')$dsarr[] = $rs;
if($rs['type']=='1')$dxarr[] = $rs;
if($rs['type']=='2')$pdarr[] = $rs;
}
for($i=1;$i<=$dsshu; $i++){
$idarr = $this->getrandts($dsarr);
$dsarr = $idarr['rows'];
$idss = $idarr['id'];
if($idss=='0')return '单选的题库不够';
$ids .= ','.$idss.'';
}
for($i=1;$i<=$dxshu; $i++){
$idarr = $this->getrandts($dxarr);
$dxarr = $idarr['rows'];
$idss = $idarr['id'];
if($idss=='0')return '多选的题库不够';
$ids .= ','.$idss.'';
}
for($i=1;$i<=$pdshu; $i++){
$idarr = $this->getrandts($pdarr);
$pdarr = $idarr['rows'];
$idss = $idarr['id'];
if($idss=='0')return '判断的题库不够';
$ids .= ','.$idss.'';
}
if($ids!='')$ids = substr($ids,1);
$uarr['tkids'] = $ids;
$uarr['kssdt'] = $this->rock->now;
$dbs->update($uarr, $sid);
return 'ok';
}
//随机获取题目
private function getrandts($arr)
{
$id = '0';
$nearr = array();
if($arr){
$len= count($arr);
$rnd= rand(0, $len-1);
$id = arrvalue($arr[$rnd],'id');
for($i=0;$i<$len;$i++)if($i!=$rnd)$nearr[]=$arr[$i];
}
return array(
'rows' => $nearr,
'id' => $id
);
}
//提交答案
public function datitijAjax()
{
$oi = (int)$this->get('oi');
$sid = (int)$this->get('sid');
$tid = (int)$this->get('tid');
$dy = strtoupper($this->get('dy'));
$uid = $this->adminid;
$dbs = m('knowtrais');
$ors = $dbs->getone("`id`='$sid' and `uid`='$uid'");
if(!$ors)return '记录不存在';
$trs = m('knowtiku')->getone($tid);
$answer = strtoupper($trs['answer']);
$mid = $ors['mid'];
$mrs = m('knowtraim')->getone($mid);
$tkids = $ors['tkids'];
$dyids = $ors['dyids'];
$dyidsa= explode(',', repempt($dyids));
$tkidsa= explode(',', repempt($tkids));
$dyjgsa= explode(',', repempt($ors['dyjgs']));
$danva = $jgarr = array();
$zfenshu = floatval($mrs['zfenshu']); //总分
$hgfen = floatval($mrs['hgfen']); //合格的分数
$tmshu = count($tkidsa);//题目数
$dfen = 0;
$meifen = $zfenshu/$tmshu;
$jg = '0';
foreach($tkidsa as $k=>$xu){
if($k!=$oi){
$danva[$k] = arrvalue($dyidsa, $k);
$jgarr[$k] = arrvalue($dyjgsa, $k,'0');
}else{
$danva[$k] = $dy;
$jg = '2';
if($answer == $dy)$jg='1';
$jgarr[$k] = $jg;
}
}
$days = $jgs = '';
foreach($danva as $k=>$v)$days.=','.$v.'';
$days = substr($days, 1);
foreach($jgarr as $k=>$v){
$jgs.=','.$v.'';
if($v=='1')$dfen+=$meifen;
}
$jgs = substr($jgs, 1);
$barr= array(
'dyids' => $days,
'dyjgs' => $jgs,
'ksedt' => $this->rock->now,
'kstime'=> $this->get('sj'),
'isks' => 1,
'fenshu'=> $dfen
);
$dbs->update($barr, $sid);
if($oi==0)m('flow:knowtraim')->reloadstate($mid);
if($jg=='2')return '错了,正确是:'.$answer.'';
return 'ok';
}
public function finfishAjax()
{
$sid = (int)$this->get('sid');
$dbs = m('knowtrais');
$barr= array(
'ksedt' => $this->rock->now,
'kstime'=> $this->get('sj'),
'isks' => 1
);
$dbs->update($barr, $sid); //更新
m('flow:knowtraim')->reloadstate();
return $dbs->getmou('fenshu', $sid);
}
//标识可重新考试
public function biaoshiAjax()
{
$fid = c('check')->onlynumber($this->post('fid','0'));
m('knowtrais')->update(array(
'kssdt' => '',
'ksedt' => '',
'fenshu' => '0',
'kstime' => '0',
'isks' => '0',
'tkids' => '',
'dyids' => '',
'dyjgs' => '',
),"`id` in($fid) and `mid` in(select `id` from `[Q]knowtraim` where `state`<>2)");
}
public function tongjiAjax()
{
$mid = (int)$this->post('mid');
$arows = m('knowtrais')->getall('`mid`='.$mid.'');
$mrs = m('knowtraim')->getone($mid);
$hgfen = floatval($mrs['hgfen']); //合格的分数
$hgshu = $wks = $bhg =0;
$zshu = 0;
foreach($arows as $k=>$rs){
if($rs['isks']=='0'){
$wks++;
}else{
$fs = floatval($rs['fenshu']);
if($fs>=$hgfen){
$hgshu++;
}else{
$bhg++;
}
}
$zshu++;
}
$rows[] = array(
'name' => '合格',
'value'=> $hgshu
);
$rows[] = array(
'name' => '不合格',
'value'=> $bhg
);
$rows[] = array(
'name' => '未考试',
'value'=> $wks
);
foreach($rows as $k=>$rs){
$bili = $this->rock->number($rs['value']/$zshu*100);
$rows[$k]['bili'] = ''.$bili.'%';
}
$rows[] = array(
'name' => '合计',
'value'=> $zshu
);
return array(
'rows' => $rows
);
}
//读取对应题库
public function tikunamedata()
{
return $this->option->getcnumdata('knowtikutype');
}
}