getstatusarr(); $zts = $barrs[$rs['status']]; $rs['status'] = ''.$zts[0].''; } return $rs; } public function getstatusarr() { $barr[1] = array('启用','green'); $barr[0] = array('停用','#888888'); return $barr; } //多个连表查询 public function flowbillwhere($uid, $lx) { return array( 'table' => '`[Q]'.$this->mtable.'` a left join `[Q]flow_set` b on a.modenum=b.`num`', 'fields' => 'a.id,a.ratecont,a.startdt,a.enddt,a.status,a.explain,a.recename,a.optname,a.optdt,b.name as modename', 'orlikefields' => 'b.name,a.ratecont', 'asqom' => 'a.' ); } //获取进入需要提醒内容 public function getreminddt($dt='',$modenum='') { if($dt=='')$dt = $this->rock->date; $dt = substr($dt, 0, 10); $now = $this->rock->now; $rows = $this->getall("`status`=1 and `startdt`<='$now' and (`enddt` is null or `enddt`>='$now')"); $dtobj = c('date'); $w = date('w', strtotime($dt)); if($w==0)$w = 7; $nw = 'w'.$w.''; $nrows = array(); $timestr= ''; foreach($rows as $k=>$rs){ $ratea = explode(',', $rs['rate']); $rateb = explode(',', $rs['rateval']); $len = count($ratea); for($i=0; $i<$len; $i++){ $timea = $this->getssdt($dt, $nw, $ratea[$i], arrvalue($rateb, $i), $rs['uid'], $rs['startdt']); if($timea)foreach($timea as $time){ if(!contain($timestr, '['.$time.']')){ $rs['runtime'] = $time; $rs['runtimes'] = date('Y-m-d H:i:s',$time); $rs['rates'] = $ratea[$i]; //频率类型 $nrows[] = $rs; $timestr.='['.$time.']'; } } } } return $nrows; } //判断时间是否可使用 private function getssdt($dt, $nw, $rate, $valstr, $uid, $startdts) { $timea = array(); $vala = explode('|', $valstr); $val = $vala[0]; $val2 = arrvalue($vala, 1); //仅一次 if($rate=='o' && contain($val, $dt)){ $timea[] = strtotime($val); } //星期和天 if($nw==$rate || $rate=='d'){ $time = ''.$dt.' '.$val.''; $timea[] = strtotime($time); } //每小时 if($rate=='h'){ $ksis = substr($startdts, 11); if(isempt($val2))$val2 = '23:59:59'; $stime = strtotime(''.$dt.' '.$ksis.''); $etime = strtotime(''.$dt.' '.$val2.''); for($i=0;$i<=23;$i++){ $time = strtotime(''.$dt.' '.$i.':'.$val.''); if($stime<=$time && $etime>=$time)$timea[] = $time; } } //每月 if($rate=='m'){ $time = ''.substr($dt,0, 8).''.$val.''; if(contain($time, $dt))$timea[] = strtotime($time); } //每年 if($rate=='y'){ $time = ''.substr($dt,0, 5).''.$val.''; if(contain($time, $dt))$timea[] = strtotime($time); } //工作日,休息日 if($rate=='g' || $rate=='x'){ $time = ''.$dt.' '.$val.''; $timea[] = strtotime($time); } return $timea; } //时间段读取 public function getremindtodo($startdt='', $enddt='') { if($startdt=='')$startdt = $this->rock->now; $stime= strtotime($startdt)-10; if($enddt=='')$enddt = date('Y-m-d H:i:s', $stime + 310); //默认是5分钟内提醒 $dt = substr($startdt, 0, 10); $rows = $this->getreminddt($startdt); $etime= strtotime($enddt); $sarr = $modearr = array(); $modenums = ''; $kqd = m('kaoqin'); foreach($rows as $k=>$rs){ $rate = $rs['rates']; //频率类型 $bo = true; if($rs['runtime']>=$stime && $rs['runtime']<=$etime){ //工作日休息日判断 if($rate=='g' || $rate=='x'){ $isw = $kqd->isworkdt($rs['uid'], $dt); if($isw==1 && $rate=='x')$bo = false; if($isw==0 && $rate=='g')$bo = false; } if($bo){ $modenums.=",'".$rs['modenum']."'"; $sarr[] = $rs; } } } //$this->flowtodosettx(8); if($modenums=='')return false; $modenums = substr($modenums, 1); $modrs = m('flow_set')->getall("`num` in ($modenums) and `status`=1"); foreach($modrs as $k=>$rs)$modearr[$rs['num']] = $rs; $flowtodoid = ''; //单据通知设置ID $subscribid = array(); //订阅的 foreach($sarr as $k=>$rs){ $mid = $rs['mid']; if($rs['modenum']=='flowtodo'){ $flowtodoid.=','.$mid.''; continue; } $mrs = arrvalue($modearr, $rs['modenum']); if(!$mrs)continue; $cont = $rs['explain']; $GLOBALS['adminid'] = $rs['uid']; $receid = $rs['uid']; $recename = $rs['optname']; if(!isempt($rs['receid'])){ $receid = 'u'.$receid.','.$rs['receid'].''; $recename .= ','.$rs['recename'].''; } //订阅的 if($rs['modenum']=='subscribe'){ $subscribid[] = array( 'id' => $mid, 'uid' => $rs['uid'], 'receid'=> $receid, 'recename'=> $recename, ); continue; } $this->pushs($receid, $cont, $mrs['name'], array( 'id' => $mid, 'modenum' => $rs['modenum'], 'modename' => $mrs['name'], 'moders' => $mrs )); } //单据通知提醒需要另外提醒 if($flowtodoid !='')$this->flowtodosettx(substr($flowtodoid, 1)); //订阅的处理(建议用异步的) if($subscribid){ if(getconfig('asynsend')){ $reim = m('reim'); foreach($subscribid as $subo){ $GLOBALS['adminid'] = $subo['uid']; $reim->asynurl('asynrun','subscribe', array( 'recename' => $this->rock->jm->base64encode($subo['recename']), 'receid' => $subo['receid'], 'id' => $subo['id'], 'uid' => $subo['uid'] )); } }else{ //没有异步直接调用 $subflow = m('flow')->initflow('subscribeinfo'); foreach($subscribid as $subo){ $GLOBALS['adminid'] = $subo['uid']; $subflow->subscribe($subo['id'],$subo['uid'],$subo['receid'],$subo['recename']); } } } return $sarr; } //单据通知设置的,必须有触发条件和选择计划任务 private function flowtodosettx($tids) { $rows = $this->db->getall('select a.*,b.num as modenum from `[Q]flow_todo` a left join `[Q]flow_set` b on a.`setid`=b.`id` where a.`id` in('.$tids.') and b.`status`=1 and a.`status`=1 and a.`botask`=1 and a.whereid>0'); //print_r($rows); //有设置了提醒 foreach($rows as $rk=>$rs){ $modenum = $rs['modenum']; $flow = m('flow')->initflow($modenum); $flowrows = $flow->gettodorows($rs['whereid']); $zongcount = count($flowrows); $tostr = '';//提醒的内容 $todofields = array(); if(!isempt($rs['todofields']))$todofields = explode(',', $rs['todofields']); $title = $rs['name']; $sanda = array(); foreach($flowrows as $k1=>$rs1){ if($k1>0)$tostr .= "\n"; $tostrs = $this->rock->reparr($rs['summary'], $rs1); $tostr .= $tostrs; $receid = $rs['receid']; //接收人 //提交人 if($rs['toturn']=='1' && isset($rs1['optid']))$receid = $this->strappend($receid,$rs1['optid']); //参与人 if($rs['tocourse']=='1'){ $cyrenId = $this->billmodel->getmou('allcheckid', "`table`='".$flow->mtable."' and `mid`='".$rs1['id']."'"); $receid = $this->strappend($receid, $cyrenId); } foreach($todofields as $tfid){ $tfss = arrvalue($rs1, $tfid); if(!isempt($tfss))$receid = $this->strappend($receid, $tfss); } if(!isempt($receid)){ $receid = $this->adminmodel->gjoins($receid); if($zongcount<20){ $flow->id = $rs1['id']; $flow->push($receid, '', $tostrs, $title); }else{ $receida= explode(',', $receid); foreach($receida as $ruid){ if(!isset($sanda[$ruid]))$sanda[$ruid] = array(); if(!in_array($tostrs,$sanda[$ruid]))$sanda[$ruid][] = $tostrs; } } } } //相同内容转化 if($sanda){ $sendarr = array(); foreach($sanda as $uid=>$narr){ $enstr = ''; foreach($narr as $k=>$v){ if($k>0)$enstr.='
'; $enstr.=''.$v.''; } if($enstr!=''){ $sendarr[md5($enstr)][] = array( 'uid' => $uid, 'cont'=> $enstr ); } } //发送 foreach($sendarr as $key=>$rowss){ $uids = ''; $cont = $rowss[0]['cont']; foreach($rowss as $k=>$rsc){ $uids.=','.$rsc['uid'].''; } //发送 if($uids!=''){ $uids = substr($uids, 1); $flow->flowweixinarr = array( 'url' => $flow->getweurl() ); $flow->push($uids, '', $cont, $title); } } } } } }