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']);
}
}
}
}
}