settable('flow_bill'); $this->statustext = explode(',','待处理,已审核,处理不通过,,,已作废'); $this->statuscolor = explode(',','blue,green,red,,,gray'); } /** * 获取状态 */ public function getstatus($zt, $lx=0) { $a1 = $this->statustext; $a2 = $this->statuscolor; $str = ''.$a1[$zt].''; if($lx==0){ return $str; }else{ return array($a1[$zt], $a2[$zt]); } } /** * 读取单据数据 * $glx 0是应用上读取,1后台读取 */ public function getrecord($uid, $lx, $page, $limit, $glx=0) { $srows = array(); $modeid = (int)$this->rock->get('modeid','0'); $where = '(`uid`='.$uid.' or `optid`='.$uid.')'; $isdb = 0; //未通过 if($lx=='flow_wtg'){ $where .= ' and `status`=2'; } if($lx=='flow_dcl'){ $where .= ' and `status` not in(1,5)'; } //已完成 if($lx=='flow_ywc'){ $where .= ' and `status`=1'; } //异常 if($lx=='flow_error'){ $where .= ' and '.$this->errorwhere().''; } //待办 if($lx=='daiban_daib' || $lx=='daiban_def'){ $where = '`status` not in(1,2) and `isturn`=1 and '.$this->rock->dbinstr('nowcheckid', $uid); $isdb = 1; } //经我处理 if($lx=='daiban_jwcl'){ $where = '`isturn`=1 and '.$this->rock->dbinstr('allcheckid', $uid); }else if(contain($lx,'_jwcl')){//经我处理跟进模块编号搜索,$lx= 模块编号_jcwl $where = '`isturn`=1 and '; $wnum = str_replace('_jwcl','', $lx); $mrs = m('mode')->getone("`num`='$wnum'"); if($mrs){ $where .= '`modeid`='.$mrs['id'].' and '; } $where .= $this->rock->dbinstr('allcheckid', $uid); } //我全部下级申请 if($lx=='daiban_myxia'){ $where = '`isturn`=1 and '.m('admin')->getdownwheres('uid', $uid, 0); } //我直属下级申请 if($lx=='daiban_mydown'){ $where = '`isturn`=1 and '.m('admin')->getdownwheres('uid', $uid, 1); } //抄送 if($lx=='flow_chaos'){ $where ='1=2'; $where1= $this->rock->dbinstr('csnameid', $uid); if($modeid>0)$where1.=' and `modeid`='.$modeid.''; $crows = $this->db->getall("select * from `[Q]flow_chao` where $where1"); if($crows){ $modeids = ''; $modeidsa= array(); foreach($crows as $k1=>$rs1){ $modeids.=','.$rs1['modeid'].''; $modeidsa[$rs1['modeid']][] = $rs1['mid']; } foreach($modeidsa as $mkid=>$mids)$wherea[]='(`modeid` = '.$mkid.' and `mid` in('.join(',', $mids).'))'; $where = '`isturn`=1 and ( '.join(' or ', $wherea).' )'; } } //监控 if($lx=='jiankong'){ $where ='1=2'; if($modeid>0){ $wwhere = m('view')->jiankongwhere($modeid, $this->adminid);//返回主表的条件 $wwhere = str_replace('{asqom}','', $wwhere); $moders = $this->db->getone('[Q]flow_set', $modeid); $where ='`isturn`=1 and `mid` in(select `id` from `[Q]'.$moders['table'].'` where 1=1 '.$wwhere.')'; } } //我关注单据(未开发) if($lx=='follow'){ $where ='1=2'; } $this->nowwhere = $where; $key = $this->rock->post('key'); if(!isempt($key))$where.=" and (`optname` like '%$key%' or `modename` like '%$key%' or `sericnum` like '$key%')"; if($modeid>0)$where.=' and `modeid`='.$modeid.''; $arr = $this->getlimit('`isdel`=0 and '.$where, $page,'*','`optdt` desc', $limit); $rows = $arr['rows']; $modeids= '0'; foreach($rows as $k=>$rs)$modeids.=','.$rs['modeid'].''; $modearr= array(); if($modeids!='0'){ $moders = m('flow_set')->getall("`id` in($modeids)"); foreach($moders as $k=>$rs)$modearr[$rs['id']] = $rs; } $flowarrmo = array(); foreach($rows as $k=>$rs){ $modename = $rs['modename']; $summary = ''; $summarx = ''; $comidname = ''; $modenum = ''; $statustext = '记录不存在'; $statusstr = '不存在'; $statuscolor= '#888888'; $ishui = 0; $optdt = $rs['optdt']; if(isset($modearr[$rs['modeid']])){ $mors = $modearr[$rs['modeid']]; $modenum = $mors['num']; if(!isset($flowarrmo[$modenum])){ $flow = m('flow:'.$modenum.'')->initdata($mors); $flowarrmo[$modenum] = $flow; }else{ $flow = $flowarrmo[$modenum]; } $modename = $mors['name']; $rers = $this->db->getone('[Q]'.$rs['table'].'', $rs['mid']); if($rers){ $tihsrs = $flow->rsreplace($rers, 2, null, 1); $comidname = arrvalue($tihsrs,'comidname'); $summary = $this->rock->reparr($mors['summary'], $tihsrs); $summarx = $this->rock->reparr($mors['summarx'], $tihsrs); $ztarr = $flow->getstatus($rers, $mors['statusstr'], $rs['nowcheckname']); $statustext = $ztarr[0]; $statuscolor = $ztarr[1]; $statusstr = $ztarr[3]; if($rers['status']==5)$ishui = 1; }else{ $this->update('isdel=1', $rs['id']); } } $title = '['.$rs['optname'].']'.$modename.''; $cont = '申请人:'.$rs['optname'].'
单号:'.$rs['sericnum'].''; $cont.='
申请日期:'.$rs['applydt'].''; if(!isempt($summary))$cont.='
摘要:'.$summary.''; //if(!isempt($rs['nstatustext']))$cont.='
状态:'.$rs['nstatustext'].''; if(!isempt($rs['checksm']))$cont.='
处理说明:'.$rs['checksm'].''; //应用摘要 if(!isempt($summarx)){ $suarr = $this->zhaiyaoar($summarx); foreach($suarr as $f=>$nr){ $str = $this->rock->reparr($nr, $rers); if($f=='cont')$str = $this->contreplaces($str); $$f = $str; } if(isset($suarr['cont'])){ if(isset($suarr['title'])) $cont = '模块:'.$modename.'
申请人:'.$rs['optname'].'
'.$cont; //if(!isempt($rs['nstatustext']))$cont.='
状态:'.$rs['nstatustext'].''; if(!isempt($rs['checksm']))$cont.='
处理说明:'.$rs['checksm'].''; } } if(ISMORECOM)$cont.='
所属单位※:'.$comidname.''; $srows[]= array( 'title' => $title, 'cont' => $cont, 'ishui' => $ishui, 'id' => $rs['mid'], 'uid' => $rs['uid'], 'optdt' => $optdt, 'sericnum' => $rs['sericnum'], 'applydt' => $rs['applydt'], 'statustext' => $statustext, 'statuscolor' => $statuscolor, 'statusstr' => $statusstr, 'modenum' => $modenum, 'modename' => $modename ); } $arr['rows'] = $srows; return $arr; } private function zhaiyaoar($str) { $stra = explode("\n", $str); $arr = array(); foreach($stra as $nr){ if(strpos($nr,'title:')===0)$arr['title'] = substr($nr, 6); if(strpos($nr,'optdt:')===0)$arr['optdt'] = substr($nr, 6); if(strpos($nr,'cont:')===0)$arr['cont'] = substr($nr, 5); } if(!$arr)$arr['cont'] = $str; return $arr; } private function contreplaces($str) { $stra = explode('[br]', $str); $s1 = ''; foreach($stra as $s){ $a1 = explode(':', $s); if(isset($a1[1]) && $a1[1]==''){ }else{ $s1.='$%#'.$s.''; } } if($s1!=''){ $s1 = str_replace('$%#', "\n", substr($s1, 3)); } return $s1; } //获取待办处理数字 public function daibanshu($uid) { $where = '`status` not in(1,2) and `isdel`=0 and `isturn`=1 and '.$this->rock->dbinstr('nowcheckid', $uid); $to = $this->rows($where); return $to; } //待提提交 public function daiturntotal($uid) { $where = '(`uid`='.$uid.' or `optid`='.$uid.') and `status` not in(5) and `isturn`=0 and isdel=0'; $to = $this->rows($where); return $to; } //未通过的 public function applymywgt($uid) { $where = '`status`=2 and isdel=0 and (`uid`='.$uid.' or `optid`='.$uid.')'; $to = $this->rows($where); return $to; } //异常单据条件,审核人中有停用的帐号 public function errorwhere($qz='') { $where = ''.$qz.'`status` not in(1,5) and '.$qz.'`isdel`=0 and '.$qz.'`nstatus`<>2 and '.$qz.'`isturn`=1 and (('.$qz.'`nowcheckid` is null) or ('.$qz.'`nowcheckid` not in(select `id` from `[Q]admin` where `status`=1)))'; return $where; } //异常数 public function errortotal() { $where = $this->errorwhere(); $to = $this->rows($where); return $to; } //单据数据 public function getbilldata($rows) { $srows = array(); $modeids= '0'; foreach($rows as $k=>$rs)$modeids.=','.$rs['modeid'].''; $modearr= array(); if($modeids!='0'){ $moders = m('flow_set')->getall("`id` in($modeids)"); foreach($moders as $k=>$rs)$modearr[$rs['id']] = $rs; } $flow = m('flow:user'); $flowarrmo = array(); foreach($rows as $k=>$rs){ $modename = $rs['modename']; $summary = ''; $modenum = ''; $comidname = ''; $statustext = '记录不存在'; $statuscolor= '#888888'; $ishui = 0; $statusstr = '不存在'; if(isset($modearr[$rs['modeid']])){ $mors = $modearr[$rs['modeid']]; $modename = $mors['name']; $summary = $mors['summary']; $modenum = $mors['num']; if(!isset($flowarrmo[$modenum])){ $flow = m('flow:'.$modenum.'')->initdata($mors); $flowarrmo[$modenum] = $flow; }else{ $flow = $flowarrmo[$modenum]; } $rers = $this->db->getone('[Q]'.$rs['table'].'', $rs['mid']); $summary = $this->rock->reparr($summary, $rers); if($rers){ $tihsrs = $flow->rsreplace($rers, 2, null, 1); $summary = $this->rock->reparr($mors['summary'], $tihsrs); $comidname = arrvalue($tihsrs,'comidname');//所属单位 $nowsets = $rs['nowcheckname']; //当前审核人 $ztarr = $flow->getstatus($rers, $mors['statusstr'], $nowsets); $statustext = $ztarr[0]; $statuscolor = $ztarr[1]; if($rers['status']==5)$ishui = 1; $statusstr = $ztarr[3]; }else{ $this->update('isdel=1', $rs['id']); //记录已经不存在了 } } $name = $rs['name']; if(isempt($name))$name = $rs['uname']; $deptname = $rs['deptname']; if(isempt($deptname))$deptname = $rs['udeptname']; $srows[]= array( 'id' => $rs['mid'], 'optdt' => $rs['optdt'], 'applydt' => $rs['applydt'], 'optname' => arrvalue($rs,'optname'), 'name' => $name, 'deptname' => $deptname, 'sericnum' => $rs['sericnum'], 'updt' => $rs['updt'], 'nowcheckid'=> $rs['nowcheckid'], 'nowcourseid'=> $rs['nowcourseid'], //当前步骤 'ishui' => $ishui, 'modename' => $modename, 'modenum' => $modenum, 'summary' => $summary, 'comidname' => $comidname, 'status' => $statusstr ); } return $srows; } /** * 首页上显示我的申请 */ public function homelistshow() { $arr = $this->getrecord($this->adminid, 'flow_dcl', 1, 5,1); $rows = $arr['rows']; $arows = array(); foreach($rows as $k=>$rs){ $cont = '【'.$rs['modename'].'】单号:'.$rs['sericnum'].',日期:'.$rs['applydt'].','.$rs['statusstr'].''; $arows[] = array( 'cont' => $cont, 'modename' => $rs['modename'], 'modenum' => $rs['modenum'], 'id' => $rs['id'], 'count' => $arr['count'] ); } return $arows; } /* * 更新记录 */ public function updatebill($whe='') { $rows = $this->db->getall('SELECT b.`id`,b.`uname`,b.`udeptname`,b.`status`,a.`name`,a.`deptname` FROM `[Q]flow_bill` b left join `[Q]admin` a on b.`uid`=a.id where b.`udeptname` is null and b.`status` not in(1,5) '.$whe.''); $ztara= array(1,5); foreach($rows as $k=>$rs){ if(isempt($rs['name']))continue; $zt = $rs['status']; if(isempt($rs['uname']) || isempt($rs['udeptname']) || !in_array($zt, $ztara)){ $this->update(array( 'uname' => $rs['name'], 'udeptname' => $rs['deptname'], ), $rs['id']); } } } /** * 超过几分钟自动作废 */ public function autocheck() { //要作废的流程模块 $rows = $this->db->getall('select `id`,`zfeitime`,`num` from `[Q]flow_set` where `status`=1 and `isflow`>0 and `zfeitime`>0'); $this->rock->adminid = 0; $this->rock->adminname = '系统'; foreach($rows as $k=>$rs){ $modeid = $rs['id']; $dtfei = date('Y-m-d H:i:s', time()-(int)$rs['zfeitime']*60); $data = $this->getall("`modeid`='$modeid' and `isturn`=1 and `status` not in(1,5) and `updt`<'$dtfei'"); if($data){ $flow = m('flow')->initflow($rs['num']); foreach($data as $k1=>$rs1){ $flow->loaddata($rs1['mid'], false); $flow->zuofeibill('超'.$rs['zfeitime'].'分钟未处理自动作废'); } } } //超过几分钟自动审核通过/不通过 $dats = $this->db->getarr('[Q]flow_course','`zshtime`>0 and `status`=1','zshtime,zshstate'); $custids = ''; if($dats)foreach($dats as $cid=>$rs)$custids.=','.$cid.''; if($custids=='')return; $custids = substr($custids, 1); $mxxus = 99999; $rows = $this->getall('`isturn`=1 and `status`=0 and `isdel`=0 and ((`nowcourseid` in('.$custids.')) or (`nowcourseid`>'.$mxxus.' and ((`nowcourseid`-`nowcheckid`)/'.$mxxus.') in('.$custids.')) )'); //echo $this->db->nowsql; if(!$rows)return; $modeids = ''; foreach($rows as $k=>$rs)$modeids.=','.$rs['modeid'].''; $modearr = $this->db->getarr('[Q]flow_set','id in('.substr($modeids, 1).')','`num`,`table`'); foreach($rows as $k=>$rs){ if(isempt($rs['nowcheckid']))continue; $nowcourseid = $rs['nowcourseid']; if($nowcourseid>$mxxus)$nowcourseid = ($nowcourseid-$rs['nowcheckid'])/$mxxus; $cusrs = arrvalue($dats,$nowcourseid, false); $modrs = arrvalue($modearr, $rs['modeid'], false); if(!$modrs || !$cusrs)continue; $dtfei = time()-(int)$cusrs['zshtime']*60; $updt = $rs['updt']; if(isempt($updt))$updt = $rs['optdt']; $nowcheckida1 = explode(',', $rs['nowcheckid']); $nowcheckida2 = explode(',', $rs['nowcheckname']); $table = $modrs['table']; $ors = $this->db->getone('[Q]'.$table.'','`id`='.$rs['mid'].''); if(!$ors){ $this->update('`isdel`=1', $rs['id']); continue; } $this->rock->adminid = arrvalue($nowcheckida1,0); $this->rock->adminname = arrvalue($nowcheckida2,0); //超时了 if(strtotime($updt)<$dtfei){ $sm = '超'.$cusrs['zshtime'].'分钟未处理自动'; $zt = (int)$cusrs['zshstate']; if($zt==1 || $zt==2){ m('flow')->opt('check', $modrs['num'], $rs['mid'], $zt, $sm.'审核');//审核 }else{ $this->rock->adminid = 0; $this->rock->adminname = '系统'; $flow = m('flow')->initflow($modrs['num'], $rs['mid'], false); if($zt==3)$flow->zuofeibill($sm.'作废'); if($zt==4)$flow->deletebill($sm.'删除', false); if($zt==5)$flow->chuiban($sm.'催办'); $this->update("`updt`='{$this->rock->now}'", $rs['id']); } } } } }