<?php

/**
 *    来自：信呼开发团队
 *    作者：磐石(rainrock)
 *    网址：http://www.rockoa.com/
 *    系统文件
 */
class flowModel extends Model
{
    public $modenum;
    public $editcont   = '';
    public $id         = 0;
    public $moders;
    public $modeid;
    public $modename;
    public $sericnum;
    public $billrs     = [];
    public $rs         = [];
    public $urs        = [];
    public $drs        = [];
    public $fieldsarr  = [];
    public $fieldsarra = [];
    public $mwhere;
    public $mtable;
    public $uname;
    public $uid        = 0;
    public $optid      = 0;
    public $isflow     = 0;
    public $ismobile   = 0;
    public $minwidth   = 100;
    public $inputwidth = 0;
    public $atype      = '';
    public $daochubo   = false;
    public $companyid  = 1;

    protected function flowinit()
    {
    }

    protected function flowchangedata()
    {
    }

    protected function flowchangetodo()
    {
    }

    protected function flowdeletebill($sm)
    {
    }

    protected function flowzuofeibill($sm)
    {
    }

    protected function flowsubmit($na, $sm)
    {
    }

    protected function flowaddlog($arr)
    {
    }

    protected function flowdatalog($arr)
    {
    }

    protected function flowcheckbefore()
    {
    }

    protected function flowcheckafter($zt, $sm)
    {
    }

    protected function flowcheckfinsh($zt)
    {
    }

    protected function flowgetfields($lx)
    {
    }

    protected function flowgetoptmenu($opt)
    {
    }

    protected function flowcheckname($num)
    {
    }

    protected function flowcoursejudge($num)
    {
    }

    protected function flowoptmenu($ors, $crs)
    {
    }

    protected function flowisreadqx()
    {
        return false;
    }

    protected function flowisdeleteqx()
    {
        return false;
    }

    protected function flowprintrows($r)
    {
        return $r;
    }

    protected function flowsubdata($r, $lx = 0)
    {
        return $r;
    }

    protected function flownexttodo($type)
    {
        return false;
    }

    protected function flowbillwhere($lx, $uid)
    {
        return '';
    }

    protected $flowweixinarr      = [];
    protected $flowviewufieds     = 'uid';
    protected $flowcompanyidfieds = 'comid';
    protected $flowfieldstype     = 0;

    public function flowrsreplace($rs)
    {
        return $rs;
    }

    public function flowrsreplace_we($row, $rs)
    {
        return $row;
    }

    public function flowwesearchdata($lx)
    {
        return [];
    }

    protected function flowrsreplaceedit($rs)
    {
        return $rs;
    }

    protected $flowstatusarr    = [1];
    protected $subsubdatastyle  = '';
    protected $wherejoin        = [];
    public    $defaultorder     = '';
    public    $floweditother    = false;
    public    $xiangbordercolor = '';

    public function echomsg($msg)
    {
        if (!isajax()) {
            exit($msg);
        }
        showreturn('', $msg, 201);
        exit();
    }

    public function flowfieldarr($farr, $lx)
    {
        return $farr;
    }

    public function flowinputtpl($cont, $lx)
    {
        return $cont;
    }

    public function flowviewtpl($cont, $lx)
    {
        return $cont;
    }

    public function floweditoffice($frs, $ofrs)
    {
    }

    public function initdata($num, $id = null)
    {
        if (is_array($num)) {
            $this->moders = $num;
        } else {
            $this->moders = m('flow_set')->getone(is_numeric($num) ? $num : "`num`='$num'");
            if (!$this->moders) {
                $this->echomsg('模块[' . $num . ']不存在，请到[流程模块列表]下添加');
            }
        }
        $this->daochubo = ($this->rock->post('execldown') == 'true') ? true : false;
        $table          = $this->moders['table'];
        $this->modeid   = $this->moders['id'];
        $this->modenum  = $this->moders['num'];
        $this->modename = $this->moders['name'];
        $this->isflow   = (int)$this->moders['isflow'];
        $this->settable($table);
        $this->mtable      = $table;
        $this->viewmodel   = m('view');
        $this->chaomodel   = m('flow_chao');
        $this->billmodel   = m('flow_bill');
        $this->todomodel   = m('flow_todo');
        $this->todosmodel  = m('flowtodo');
        $this->flogmodel   = m('flow_log');
        $this->checksmodel = m('flow_checks');
        $this->cnamemodel  = m('flowcname');
        $this->wheremodel  = m('where');
        $this->adminmodel  = m('admin');
        $this->remindmodel = m('remind');
        $this->option      = m('option');
        $this->companyid   = $this->adminmodel->getcompanyid();
        $this->tfieldsarra();
        $this->mwhere = "`table`='$this->mtable' and `mid`=-1";
        if (!$this->defaultorder) {
            $sortdir = arrvalue($this->moders, 'sortdir');
            if (!isempt($sortdir)) {
                $this->defaultorder = str_replace(' ', ',', $sortdir);
            }
        }
        $this->flowinit();
        if ($id == null) {
            return $this;
        }
        $this->loaddata($id, true);
        return $this;
    }

    private function tfieldsarra()
    {
        $rows            = m('flow_element')->getrows(
            "`mid`='$this->modeid' and `iszb`=0",
            '`name`,`fields`,`isbt`,`iszs`,`fieldstype`,`savewhere`,`data`,`isdr`,`iszb`,`issou`,`islu`,`islb`,`isonly`,`attr`',
            '`sort`'
        );
        $this->fieldsarr = [];
        if ($rows) {
            foreach ($rows as $k => $rs) {
                if ($rs['islu'] == 1) {
                    $this->fieldsarr[] = $rs;
                }
            }
        }
        $this->fieldsarra = $rows;
    }

    public function inputtitle()
    {
        return $this->moders['name'];
    }

    public function flowsearchfields()
    {
        $arr = [];
        if ($this->isflow > 0) {
            $arr[] = ['name' => '申请人...', 'fields' => 'uid'];
            $arr[] = ['name' => '提交人...', 'fields' => 'optid'];
        }
        return $arr;
    }

    public function loaddata($id, $ispd = true)
    {
        $this->id     = (int)$id;
        $this->mwhere = "`table`='$this->mtable' and `mid`='$id'";
        $swhere       = "`id`='$id'";
        $wherestr     = $this->moders['where'];
        if (!isempt($wherestr)) {
            $wherestr = $this->rock->covexec($wherestr);
            $swhere   .= ' and ' . $wherestr;
        }
        $this->rs    = $this->getone($swhere);
        $this->uname = '';
        if (!$this->rs) {
            $this->echomsg('数据记录不存在了');
        }
        $this->rs['base_name']     = '';
        $this->rs['base_deptname'] = '';
        if (isset($this->rs['uid'])) {
            $this->uid = $this->rs['uid'];
        }
        if (isset($this->rs['comid'])) {
            $this->companyid = $this->rs['comid'];
        }
        if (!isset($this->rs['applydt'])) {
            $this->rs['applydt'] = '';
        }
        if (!isset($this->rs['status'])) {
            $this->rs['status'] = 1;
        }
        $uisfield = property_exists($this, 'uidfields') ? $this->uidfields : 'optid';
        if ($this->uid == 0 && isset($this->rs[$uisfield])) {
            $this->uid = $this->rs[$uisfield];
        }
        $this->optid = isset($this->rs['optid']) ? $this->rs['optid'] : $this->uid;
        $this->urs   = $this->adminmodel->getone(
            $this->uid,
            'id,name,user,deptid,deptids,deptname,deptallname,face,ranking,superid,superpath,superman,deptpath'
        );
        if ($this->isempt($this->rs['applydt']) && isset($this->rs['optdt'])) {
            $this->rs['applydt'] = substr($this->rs['optdt'], 0, 10);
        }
        if ($this->urs) {
            $this->drs             = $this->db->getone('[Q]dept', "`id`='" . $this->urs['deptid'] . "'");
            $this->uname           = $this->urs['name'];
            $this->rs['base_name'] = $this->uname;
            if ($this->drs) {
                $this->rs['base_deptname'] = $this->drs['name'];
            }
        }
        $this->sericnum = '';
        $this->billrs   = $this->billmodel->getone($this->mwhere);
        if ($this->billrs) {
            $this->sericnum = $this->billrs['sericnum'];
            if (isempt(arrvalue($this->billrs, 'uname'))) {
                $this->savebill();
            }
            if ($this->billrs['status'] != $this->rs['status']) {
                $this->billmodel->update('`status`=' . $this->rs['status'] . '', $this->billrs['id']);
            }
            if ($this->billrs['isturn'] != $this->rs['isturn']) {
                $this->billmodel->update('`isturn`=' . $this->rs['isturn'] . '', $this->billrs['id']);
            }
            if (isempt($this->rs['base_name'])) {
                $this->rs['base_name'] = $this->billrs['uname'];
            }
            if (isempt($this->rs['base_deptname'])) {
                $this->rs['base_deptname'] = $this->billrs['udeptname'];
            }
        } else {
            if ($this->isflow > 0) {
                $this->savebill();
            }
        }
        if ($this->isflow > 0) {
            if ($this->rs['status'] == 1 && $this->rs['isturn'] == '0') {
                $this->update(['isturn' => 1], $this->id);
                $this->rs['isturn'] = 1;
                if ($this->billrs) {
                    $this->billmodel->update('`isturn`=1', $this->billrs['id']);
                }
            }
        }
        $this->getlogrows = [];
        if ($ispd) {
            $this->isreadqx();
        }
        $this->rssust = $this->rs;
        $this->flowchangedata();
        $this->rs['base_systitle'] = TITLE;
        $this->rs['base_modename'] = $this->modename;
        $this->rs['base_sericnum'] = $this->sericnum;
        $this->rs['base_summary']  = $this->getsummary();
    }

    public function getdaiban()
    {
        $s  = $this->rock->dbinstr('nowcheckid', $this->adminid);
        $to = $this->billmodel->rows(
            '`modeid`=' . $this->modeid . ' and `isdel`=0 and `status` not in(1,2) and ' . $s . ''
        );
        return $to;
    }

    public function isreadqx($glx = 0)
    {
        $bo = false;
        if ($this->adminid == 1) {
            $bo = true;
        }
        if ($this->uid == $this->adminid && $this->adminid > 0) {
            $bo = true;
        }
        if (!$bo && $this->isflow > 0) {
            if ($this->billrs) {
                $allcheckid = $this->billrs['allcheckid'];
                if (contain(',' . $allcheckid . ',', ',' . $this->adminid . ',')) {
                    $bo = true;
                }
            }
        }
        if (!$bo) {
            if ($this->urs && contain($this->urs['superpath'], '[' . $this->adminid . ']')) {
                $bo = true;
            }
        }
        if (!$bo) {
            $tos = $this->todosmodel->rows("" . $this->mwhere . " and `uid`='$this->adminid'");
            if ($tos > 0) {
                $bo = true;
            }
        }
        if (!$bo) {
            $tos = $this->chaomodel->rows(
                $this->mwhere . ' and ' . $this->rock->dbinstr('csnameid', $this->adminid) . ''
            );
            if ($tos > 0) {
                $bo = true;
            }
        }
        if (!$bo) {
            $tos = $this->db->rows('[Q]todo', "`uid`='$this->adminid' and " . $this->mwhere . "");
            if ($tos > 0) {
                $bo = true;
            }
        }
        if (!$bo) {
            $bo = $this->flowisreadqx();
        }
        if (!$bo) {
            $bo = $this->isreadqxs();
        }
        if (!$bo) {
            $tos = $this->isjiankongqx();
            if ($tos > 0) {
                $bo = true;
            }
        }
        if ($glx == 1) {
            return $bo;
        }
        if (!$bo) {
            $this->echomsg(
                '无权限查看模块[' . $this->modenum . '.' . $this->modename . ']' . $this->uname . '的数据，请联系管理员到[流程模块→流程模块权限]下设置'
            );
        }
    }

    public function isreadqxs()
    {
        $bo    = false;
        $where = $this->viewmodel->viewwhere($this->moders, $this->adminid, $this->flowviewufieds);
        $where = str_replace('{asqom}', '', $where);
        $tos   = $this->rows("`id`='$this->id' $where ");
        if ($tos > 0) {
            $bo = true;
        }
        return $bo;
    }

    public function iseditqx()
    {
        $bo = 0;
        if ($bo == 0 && $this->isflow > 0) {
            if ($this->billrs && ($this->uid == $this->adminid || $this->optid == $this->adminid)) {
                if ($this->billrs['nstatus'] == 0 || $this->billrs['nstatus'] == 2) {
                    $bo = 1;
                }
            }
            if ($this->rs['status'] == 1) {
                $bo = 0;
            }
        }
        if ($bo == 0) {
            $where = $this->viewmodel->editwhere($this->moders, $this->adminid, $this->flowviewufieds);
            $where = str_replace('{asqom}', '', $where);
            $tos   = $this->rows("`id`='$this->id'  $where ");
            if ($tos > 0) {
                $bo = 1;
            }
        }
        return $bo;
    }

    public function isdeleteqx()
    {
        $bo = 0;
        if ($bo == 0 && $this->isflow > 0) {
            if ($this->billrs && ($this->uid == $this->adminid || $this->optid == $this->adminid)) {
                if ($this->billrs['nstatus'] == 0 || $this->billrs['nstatus'] == 2) {
                    $bo = 1;
                }
            }
            if ($this->rs['status'] == 1) {
                $bo = 0;
            }
        }
        if ($bo == 0) {
            $where = $this->viewmodel->deletewhere($this->moders, $this->adminid, $this->flowviewufieds);
            $where = str_replace('{asqom}', '', $where);
            $tos   = $this->rows("`id`='$this->id'  $where ");
            if ($tos > 0) {
                $bo = 1;
            }
        }
        $isd = $this->flowisdeleteqx();
        if (is_numeric($isd) && $isd <= 1) {
            $bo = $isd;
        }
        return $bo;
    }

    public function isjiankongqx()
    {
        $bo = 0;
        if ($bo == 0) {
            $where = $this->viewmodel->jiankongwhere($this->moders, $this->adminid, $this->flowviewufieds);
            $where = str_replace('{asqom}', '', $where);
            $tos   = $this->rows("`id`='$this->id'  $where ");
            if ($tos > 0) {
                $bo = 1;
            }
        }
        return $bo;
    }

    public function getfields($lx = 0)
    {
        $fields = [];
        if (!$this->fieldsarra) {
            $this->tfieldsarra();
        }
        $farr = $this->fieldsarra;
        foreach ($farr as $k => $rs) {
            if ($rs['iszs'] == '1') {
                $fields[$rs['fields']] = $rs['name'];
            }
        }
        $fters = $this->flowgetfields($lx);
        if (is_array($fters)) {
            $fields = array_merge($fields, $fters);
        }
        return $fields;
    }

    public function getinputurl($num = '', $mid = 0, $can = [])
    {
        if ($num == '') {
            $num = $this->modenum;
        }
        $xa = 'lu';
        if ($this->ismobile == 1) {
            $xa = 'lum';
        }
        $url = 'index.php?a=' . $xa . '&m=input&d=flow&num=' . $num . '&mid=' . $mid . '';
        if (is_array($can)) {
            foreach ($can as $k => $v) {
                $url .= '&' . $k . '=' . $v . '';
            }
        } else {
            $url .= '&' . $can . '';
        }
        return $url;
    }

    public function replacepbr(&$arr, $k)
    {
        $val = arrvalue($arr, $k);
        if (!c('html')->ishtml($val)) {
            $arr[$k] = str_replace("\n", '<br>', $val);
        }
        return $arr;
    }

    public function getdatalog($lx = 0, $isdy = 0)
    {
        m('log')->addread($this->mtable, $this->id);
        $this->todosmodel->biaoyidu($this->adminid, $this->modenum, $this->id);
        $fobj            = m('file');
        $this->ismobile  = $lx;
        $arr['modename'] = $this->modename;
        $arr['title']    = $this->modename;
        $arr['modeid']   = $this->modeid;
        $arr['modenum']  = $this->modenum;
        $arr['mid']      = $this->id;
        $arr['status']   = arrvalue($this->rs, 'status');
        $arr['logarr']   = $this->getlog(1);
        $arr['isplview'] = arrvalue($this->moders, 'ispl', '0');
        $arr['isys']     = arrvalue($this->moders, 'isys', '0');
        $contview        = '';
        $lsds            = ($isdy == 2) ? $isdy : $lx;
        $path            = '' . P . '/flow/page/view_' . $this->modenum . '_' . $lsds . '.html';
        if (COMPANYNUM) {
            $path1 = '' . P . '/flow/page/view_' . $this->modenum . '_' . COMPANYNUM . '_' . $lsds . '.html';
            if (file_exists($path1)) {
                $path = $path1;
            }
        }
        $fstr      = $fobj->getstr($this->mtable, $this->id, 3);
        $issubtabs = 0;
        if ($fstr != '') {
            $this->rs['file_content'] = $fstr;
        }
        $data    = $this->flowrsreplace($this->rs, ($isdy == 2) ? 3 : 1);
        $dataa   = $this->viewjinfields([$data]);
        $data    = $dataa[0];
        $subdata = $this->getsuballdata(1);
        if ($subdata) {
            $zbzd = m('flow_element')->getrows(
                "`mid`='$this->modeid' and `iszb`>0 and `iszs`=1 and `fieldstype` in('uploadimg','uploadfile','textarea')",
                '`name`,`fields`,`fieldstype`,`iszb`', '`iszb`,`sort`'
            );
            foreach ($subdata as $zb => $da) {
                $sub                        = $da['fields'];
                $data[$sub]                 = $this->getsubdata(
                    $zb, $da['data'], arrvalue($data, 'subdatays' . $zb . '', $lx)
                );
                $data['' . $sub . '_style'] = 'padding:0';
            }
        }
        $farrobj = $chufarr = [];
        if (method_exists($this, 'flowxiangfields')) {
            $chufarr = $this->flowxiangfields($chufarr);
        }
        $farrobj['base_sericnum'] = ['name' => arrvalue($chufarr, 'base_sericnum', '单号')];
        $farrobj['base_name']     = ['name' => arrvalue($chufarr, 'base_name', '申请人')];
        $farrobj['base_deptname'] = ['name' => arrvalue($chufarr, 'base_deptname', '申请人部门')];
        $farrobj['base_status']   = ['name' => arrvalue($chufarr, 'base_status', '流程状态')];
        $farrobj['file_content']  = ['name' => arrvalue($chufarr, 'file_content', '相关文件')];
        foreach ($this->fieldsarra as $k => $rs) {
            $fid = $rs['fields'];
            $fty = $rs['fieldstype'];
            if ($fty == 'uploadfile') {
                $fval = arrvalue($data, $fid);
                if (isempt($fval)) {
                    $fval = '0';
                }
                $data[$fid] = '';
                if ($fval != '0') {
                    $data[$fid] = $fobj->getstr('', '', 3, "`id` in($fval)");
                }
            }
            if ($fty == 'uploadimg') {
                $fval = arrvalue($data, $fid);
                if (!isempt($fval) && substr($fval, 0, 4) != '<img') {
                    $fval       = $this->rock->gethttppath($fval);
                    $data[$fid] = '<img src="' . $fval . '" onclick="c.showviews(this)" height="100">';
                }
            }
            if ($fty == 'textarea') {
                $this->replacepbr($data, $fid);
            }
            if ($fty == 'ditumap' && !isempt($rs['data'])) {
                $wzhi = arrvalue($data, $rs['data']);
                if (!isempt($wzhi)) {
                    $data[$fid] .= '<a href="javascript:;" onclick="js.showmap(\'' . $wzhi . ',' . $data[$fid] . '\')">[查看地图]</a>';
                }
            }
            $farrobj[$fid] = $rs;
        }
        $_logarr = $qfields = [];
        foreach ($arr['logarr'] as $k1 => $rs1) {
            $_logarr[$rs1['id']] = $rs1;
        }
        $logrows = $this->flogmodel->getrows(
            $this->mwhere . ' and `modeid`=' . $this->modeid . ' and `courseid`>0 and `courseid`<88888 and `status`>0 and `valid`=1'
        );
        foreach ($logrows as $k2 => $rs2) {
            $rs3   = $_logarr[$rs2['id']];
            $_coid = $rs2['courseid'];
            if (!isempt($rs3['qmimg'])) {
                $rs3['name'] = '<img height="30" onclick="c.showviews(this)" width="70" src="' . $rs3['qmimg'] . '">';
            }
            $key1 = 'course' . $_coid . '';
            if (!isset($data['' . $key1 . '_name'])) {
                $data['' . $key1 . '_name'] = $rs3['name'];
                $data['' . $key1 . '_zt']   = '<font color="' . $rs3['color'] . '">' . $rs3['statusname'] . '</font>';
                $data['' . $key1 . '_sm']   = $rs3['sm'];
                $data['' . $key1 . '_dt']   = $rs3['checkdt'];
            } else {
                $data['' . $key1 . '_name'] .= ',' . $rs3['name'];
                $data['' . $key1 . '_sm']   .= ',' . $rs3['sm'];
                $data['' . $key1 . '_dt']   = $rs3['checkdt'];
            }
            $key2 = '' . $key1 . '_all';
            if (!isset($data[$key2])) {
                $qfields[$key2] = $rs2['name'];
                $data[$key2]    = '';
            }
            $str1 = $rs3['name'] . ' <font color="' . $rs3['color'] . '">' . $rs3['statusname'] . '</font> ' . $rs3['checkdt'] . '';
            if (!isempt($rs3['sm'])) {
                $str1 .= '，' . $rs3['sm'] . '';
            }
            if ($data[$key2] != '') {
                $data[$key2] .= '<hr size="1">';
            }
            $data[$key2] .= $str1;
        }
        $ztass               = $this->getnowstatus();
        $data['base_status'] = $ztass[3];
        if (file_exists($path)) {
            $contview = $this->flowviewtpl(file_get_contents($path), $lx);
            preg_match_all('/\^(.*?)\^/', $contview, $list);
            foreach ($list[1] as $k => $nrs) {
                $fzdrs = arrvalue($farrobj, $nrs);
                if ($fzdrs) {
                    $contview = str_replace('^' . $nrs . '^', $fzdrs['name'], $contview);
                }
            }
            $contview = $this->rock->reparr($contview, $data);
        }
        $arr['isdefaultview'] = 0;
        if ($this->isempt($contview) || contain($contview, '$contview$')) {
            $arr['isdefaultview'] = 1;
            $_fields              = [];
            if ($this->isflow > 0) {
                $_fields['base_sericnum'] = $farrobj['base_sericnum']['name'];
                $_fields['base_name']     = $farrobj['base_name']['name'];
                $_fields['base_deptname'] = $farrobj['base_deptname']['name'];
                $_fields['base_status']   = $farrobj['base_status']['name'];
            }
            $fields = array_merge($_fields, $this->getfields($lx));
            if ($fstr != '') {
                $fields['file_content'] = $farrobj['file_content']['name'];
            }
            foreach ($subdata as $zb => $da) {
                $fields[$da['fields']] = $da['name'];
            }
            if ($qfields) {
                $fields = array_merge($fields, $qfields);
            }
            if ($lx == 0) {
                foreach ($fields as $k => $rs) {
                    $data['' . $k . '_style'] = 'width:75%';
                    break;
                }
            }
            $_colsr = $this->xiangbordercolor;
            if ($_colsr == '') {
                $_colsr = getconfig('bcolorxiang');
            }
            $contvimr = c('html')->xiangtable($fields, $data, $_colsr);
            $contvimr = '<div align="center">' . $contvimr . '</div>';
            if ($lx == 1) {
                $contvimr = '';
                if ($this->isflow > 0) {
                    $contvimr .= '<div class="r-border-b">
					<div class="blank5"></div>
					<table><tr>
						<td width="50" align="left"><img style="height:40px;width:40px;border-radius:50%" src="' . $this->urs['face'] . '"></td>
						<td><div>' . $this->urs['name'] . '<font color="#888888">(' . $this->urs['ranking'] . ')</font></div><div style="padding-top:5px">' . $this->urs['deptallname'] . '</div></td>
					</tr></table>
					<div style="margin:5px 0px" class="blank10"></div>
					</div>';
                    unset($fields['base_name']);
                    unset($fields['base_deptname']);
                }
                $contvimr .= '<div><table width="100%">';
                foreach ($fields as $f => $n) {
                    $vs = arrvalue($data, $f);
                    if (!isempt($vs)) {
                        if (substr($f, 0, 7) == 'subdata') {
                            $contvimr .= '<tr><td colspan="3"><div style="padding:5px" align="left"><div><b>' . $n . '</b></div>' . $vs . '</div></td></tr>';
                        } else {
                            $contvimr .= '<tr><td nowrap><div align="right" style="color:#888888;padding:3px 0px">' . str_replace(
                                    ' ', '<br>', $n
                                ) . '</div></td><td style="color:#888888">：</td><td width="95%"><div style="padding:3px" align="left">' . $vs . '</div></td></tr>';
                        }
                    }
                }
                $contvimr .= '</table></div>';
            }
            if (isempt($contview)) {
                $contview = $contvimr;
            }
            $contview = str_replace('$contview$', $contvimr, $contview);
        }
        unset($farrobj);
        $arr['contview']    = $contview;
        $arr['readarr']     = m('log')->getreadarr($this->mtable, $this->id);
        $arr['isedit']      = $this->iseditqx();
        $arr['isdel']       = $this->isdeleteqx();
        $arr['isflow']      = $this->isflow;
        $arr['modename']    = $this->modename;
        $arr['ischehui']    = $this->ischehui();
        $arr['statustext']  = $ztass[4];
        $arr['statuscolor'] = $ztass[1];
        $arr['optmenu']     = $this->getoptmenu(1);
        $arr['isgbjl']      = (int)$this->rock->arrvalue($this->moders, 'isgbjl', '0');
        $arr['isgbcy']      = (int)$this->rock->arrvalue($this->moders, 'isgbcy', '0');
        $receiptrs          = false;
        $receiptrow         = m('receipt')->getall("`modenum`='$this->modenum' and `mid`='$this->id' and `status`=1");
        foreach ($receiptrow as $k => $hrs) {
            $uid1 = ',' . $this->adminid . ',';
            if (!contain(',' . $hrs['receid'] . ',', $uid1)) {
                continue;
            }
            if (!contain(',' . $hrs['receids'] . ',', $uid1)) {
                $receiptrs = ['id' => $hrs['id'], 'optname' => $hrs['optname'],];
                break;
            }
        }
        $arr['flowinfor'] = [];
        $arr['readunarr'] = [];
        $arr['receiptrs'] = $receiptrs;
        if ($this->isflow > 0) {
            $arr['flowinfor'] = $this->getflowinfor();
            if ($arr['flowinfor']['ischeck'] == 1) {
                $arr['isplview'] = '0';
            }
        }
        if (isset($data['title'])) {
            $arr['title'] = $data['title'];
        }
        $_oarr = $this->flowdatalog($arr);
        if (is_array($_oarr)) {
            foreach ($_oarr as $k => $v) {
                $arr[$k] = $v;
            }
        }
        $conta = $this->rock->matcharr($contview, 2);
        $edbof = false;
        foreach ($conta as $fids) {
            $thnr     = '';
            $contview = str_replace('`' . $fids . '`', $thnr, $contview);
        }
        $arr['contview'] = $contview;
        return $arr;
    }

    private function getsubdata($xu, $rows, $lx = 0)
    {
        $iscz    = 0;
        $iszb    = $xu + 1;
        $fields  = 'subdata' . $xu . '';
        $subrows = $this->db->getrows(
            '[Q]flow_element', '`mid`=' . $this->modeid . ' and `iszb`=' . $iszb . ' and `iszs`=1',
            '`fields`,`name`,`isalign`', '`sort`'
        );
        $cont    = '';
        if ($this->db->count > 0) {
            $iscz    = 1;
            $headstr = '@xuhaos,,center';
            $colorbb = getconfig('bcolorxiang', '#cccccc');
            foreach ($subrows as $k => $rs) {
                $headstr .= '@' . $rs['fields'] . ',' . $rs['name'] . '';
                if ($rs['isalign'] == '1') {
                    $headstr .= ',left';
                }
                if ($rs['isalign'] == '2') {
                    $headstr .= ',right';
                }
            }
            foreach ($rows as $k => $rs) {
                $rows[$k]['xuhaos'] = $k + 1;
            }
            $slex = ($lx == 0) ? 'noborder' : '';
            if ($this->subsubdatastyle != '') {
                $slex = $this->subsubdatastyle;
            }
            $cont = c('html')->createrows($rows, substr($headstr, 1), $colorbb, $slex);
        }
        return $cont;
    }

    public function ischehui()
    {
        $is = 0;
        if ($this->rs['status'] == 1 || $this->isflow == 3) {
            return $is;
        }
        $where = "" . $this->mwhere . " and `valid`=1 order by `id` desc";
        $rs    = $this->flogmodel->getone($where);
        $time  = time() - 2 * 3600;
        if ($rs && $rs['status'] == '1' && $rs['checkid'] == $this->adminid && strtotime(
                $rs['optdt']
            ) > $time && ($rs['courseid'] > 0 || $rs['iszb'] == '1')) {
            $is = $rs['id'];
        }
        return $is;
    }

    public function chehui($sm = '')
    {
        return $this->bd6('5peg5L!h5ZG8562!5o6I5peg5q2k5Yqf6IO9');
    }

    public function bd6($str)
    {
        return $this->rock->jm->base64dencode($str);
    }

    public function getdataedit()
    {
        $fobj          = m('file');
        $arr['data']   = $this->flowrsreplaceedit($this->rssust);
        $arr['table']  = $this->mtable;
        $arr['tables'] = $this->moders['tables'];
        $arr['modeid'] = $this->modeid;
        $arr['isedit'] = $this->iseditqx();
        $arr['isflow'] = $this->isflow;
        $arr['user']   = $this->urs;
        $arr['status'] = $this->rs['status'];
        $filers        = $fobj->getfile($this->mtable, $this->id);
        foreach ($filers as $fk => $frs1) {
            $filers[$fk]['thumbpath'] = $fobj->getthumbpath($frs1);
        }
        $arr['filers']  = $filers;
        $arr['subdata'] = $this->getsuballdata();
        $filearr        = [];
        $fileids        = '';
        foreach ($this->fieldsarr as $k => $rs) {
            $fid = $rs['fields'];
            $flx = $rs['fieldstype'];
            if ($flx == 'uploadfile') {
                $fval = arrvalue($this->rssust, $fid);
                if (!isempt($fval)) {
                    $fileids .= ',' . $fval . '';
                }
            }
            if ($flx == 'uploadimg') {
                $arr['data']['' . $fid . '_view'] = $this->rock->gethttppath($arr['data'][$fid]);
            }
        }
        if ($fileids != '') {
            $frows = $fobj->getall(
                '`id` in(' . substr($fileids, 1) . ')', 'filename,id,filesizecn,fileext,optname,thumbpath,thumbplat'
            );
            foreach ($frows as $k1 => $rs1) {
                $rs1['thumbpath']               = $fobj->getthumbpath($rs1);
                $filearr['f' . $rs1['id'] . ''] = $rs1;
            }
        }
        $arr['filearr']     = $filearr;
        $ztarr              = $this->getnowstatus();
        $arr['statustext']  = $ztarr[0];
        $arr['statuscolor'] = $ztarr[1];
        return $arr;
    }

    public function getflowinfor()
    {
        $ischeck  = 0;
        $ischange = 0;
        $str      = '';
        $arr      = $this->getflow();
        if ($arr['nowcheckid'] != $this->billrs['nowcheckid']) {
            $this->getflowsave($arr, true);
        }
        $nstatus    = $this->rs['status'];
        $isturn     = $this->rs['isturn'];
        $nowcheckid = ',' . $arr['nowcheckid'] . ',';
        if ($isturn == 1 && $nstatus != 1 && contain($nowcheckid, ',' . $this->adminid . ',') && !in_array(
                $nstatus, [2, 5]
            )) {
            $ischeck = 1;
        }
        $logarr = $this->getlog();
        $nowcur = $this->nowcourse;
        if (arrvalue($this->nextcourse, 'checktype') == 'change') {
            $ischange = 1;
        }
        $sarr['ischeck']     = $ischeck;
        $sarr['ischange']    = $ischange;
        $sarr['nowcourse']   = $nowcur;
        $sarr['iszhuanban']  = 0;
        $sarr['ischao']      = 0;
        $sarr['nextcourse']  = $this->nextcourse;
        $sarr['nstatustext'] = $arr['nstatustext'];
        if ($isturn == 0) {
            $sarr['nstatustext'] = '<font color="#ff6600">待提交</font>';
        }
        $_checkfields = arrvalue($nowcur, 'checkfields');
        $checkfields  = [];
        if ($ischeck == 1 && !isempt($_checkfields)) {
            $_checkfieldsa  = explode('|', $_checkfields);
            $_checkfields   = join(',', $_checkfieldsa);
            $_checkxuant    = arrvalue($_checkfieldsa, 1);
            $inputobj       = c('input');
            $inputobj->flow = $this;
            $inputobj->mid  = $this->id;
            $inputobj->urs  = $this->urs;
            $elwswhere      = "`mid`='$this->modeid' and `iszb`=0 and instr(',$_checkfields,', concat(',',`fields`,','))>0";
            $infeidss       = $inputobj->initFields($elwswhere);
            foreach ($infeidss as $_fs => $fsva) {
                $_sfes     = $fsva['fields'];
                $_type     = $fsva['fieldstype'];
                $showinpus = 1;
                $isbt      = 1;
                if ($_checkxuant && contain(',' . $_checkxuant . ',', ',' . $_sfes . ',')) {
                    $isbt = 0;
                }
                if ($_type == 'hidden' || $_type == 'fixed') {
                    $showinpus = 2;
                }
                $_val = arrvalue($this->rssust, $_sfes);
                $cheo = (substr($_type, 0, 6) == 'change' && !isempt($fsva['data']));
                if ($cheo) {
                    $_val .= '|' . arrvalue($this->rssust, $fsva['data']) . '';
                }
                $checkfields[$_sfes] = [
                    'inputstr'   => $inputobj->getfieldcontval($_sfes, $_val),
                    'name'       => $fsva['name'],
                    'isbt'       => $isbt,
                    'fieldstype' => $_type,
                    'fieldsarr'  => $fsva,
                    'showinpus'  => $showinpus
                ];
                if ($cheo) {
                    $_sfes               = $fsva['data'];
                    $checkfields[$_sfes] = [
                        'inputstr'   => '',
                        'isbt'       => $isbt,
                        'name'       => $fsva['name'] . 'id',
                        'fieldstype' => $_type,
                        'fieldsarr'  => false,
                        'showinpus'  => 2
                    ];
                }
            }
        }
        $sarr['checkfields'] = $checkfields;
        if ($nstatus == 2) {
            $sarr['nstatustext'] = '<font color="#AB47F7">待提交人处理(' . $this->urs['name'] . ')</font>';
        }
        $loglen = count($logarr);
        foreach ($logarr as $k => $rs) {
            if ($rs['courseid'] > 0) {
                $sty = '';
                $col = $rs['color'];
                if ($str != '') {
                    $str .= ' → ';
                }
                $str .= '<span style="' . $sty . '">' . $rs['actname'] . '(' . $rs['name'] . '<font color="' . $col . '">' . $rs['statusname'] . '</font>)</span>';
            }
        }
        if ($nstatus == '2') {
            if ($str != '') {
                $str .= ' → ';
            }
            $str .= $sarr['nstatustext'];
        } else {
            if ($nstatus == '5') {
                if ($str != '') {
                    $str .= ' → ';
                }
                $sarr['nstatustext'] = '<font color="#888888">已作废</font>';
                $str                 .= '<font color="#888888">已作废</font>';
            } else {
                foreach ($this->flowarr as $k => $rs) {
                    if ($rs['ischeck'] == 0) {
                        $sty = 'color:#888888';
                        if ($rs['isnow'] == 1) {
                            $sty = 'font-weight:bold;color:#800000';
                        }
                        if ($str != '') {
                            $str .= ' <font color=#888888>→</font> ';
                        }
                        $str .= '<span style="' . $sty . '">' . $rs['name'] . '';
                        if (!isempt($rs['nowcheckname'])) {
                            $str .= '(' . $rs['nowcheckname'] . ')';
                        }
                        $str .= '</span>';
                    }
                }
            }
        }
        $sarr['flowcoursestr'] = $str;
        if ($nstatus == 1) {
            $sarr['nstatustext'] = $this->getnowstatus(1);
        }
        $actstr = ',同意|green,不同意|red';
        if (isset($nowcur['courseact'])) {
            $actstrt = $nowcur['courseact'];
            if (!isempt($actstrt)) {
                $actstr = ',' . $actstrt;
            }
        }
        $act = c('array')->strtoarray($actstr);
        foreach ($act as $k => $as1) {
            if ($k > 0 && $as1[0] == $as1[1]) {
                $act[$k][1] = '';
            }
        }
        if (arrvalue($this->moders, 'isys') == '1' && (int)arrvalue($nowcur, 'mid', '0') >= 0) {
            $act[25] = ['前加签', '', ''];
            $act[26] = ['后加签', '', ''];
        }
        $sarr['courseact'] = $act;
        $nowstatus         = $this->rs['status'];
        if ($this->isflow > 0 && $this->rs['isturn'] == 0) {
            $nowstatus = 3;
        }
        $sarr['nowstatus'] = $nowstatus;
        $step              = $this->rock->arrvalue($nowcur, 'step', '0');
        $tuicourse         = $this->flogmodel->getall(
            $this->mwhere . ' and `courseid`>0 and `valid`=1 and `status`=1 and `step`<' . $step . '',
            '`id`,`checkname`,`name`', '`step` desc'
        );
        $sarr['tuicourse'] = $tuicourse;
        return $sarr;
    }

    public function updatestatus($zt)
    {
        $this->update('`status`=' . $zt . '', $this->id);
        $this->billmodel->update('`status`=' . $zt . '', $this->mwhere);
    }

    public function getstatusarr()
    {
        return $this->getstatus(null, '', '', 2);
    }

    public function getstatus($rs, $statusstr = '', $other = '', $glx = 0)
    {
        $statustext = $statuscolor = '';
        if ($statusstr == '') {
            $statusstr = $this->rock->arrvalue($this->moders, 'statusstr');
        }
        $statusara = [];
        $colorsa   = [
            'blue',
            'green',
            'red',
            '#ff6600',
            '#526D08',
            '#888888',
            '',
            '',
            '',
            '',
            '',
            '',
            '',
            '',
            '',
            '',
            '',
            '',
            ''
        ];
        if (isempt($statusstr)) {
            $statussst = '不同意';
            $statusstr = '待?处理|blue,已审核|green,' . $statussst . '|red';
        }
        $nowcheckname = arrvalue($rs, 'nowcheckname', arrvalue($this->billrs, 'nowcheckname'));
        if (isempt($other)) {
            $other = $nowcheckname;
        }
        $statusar = c('array')->strtoarray($statusstr);
        foreach ($statusar as $k => $v) {
            if ($v[0] == $v[1]) {
                $v[1] = arrvalue($colorsa, $k);
            }
            $statusara[$k] = $v;
        }
        $statusara[5]  = ['已作废', '#888888'];
        $statusara[23] = ['退回', '#17B2B7'];
        if ($glx == 2) {
            return $statusara;
        }
        $isturn = -1;
        if (isset($rs['isturn'])) {
            $isturn = (int)$rs['isturn'];
        }
        $zt = $this->rock->arrvalue($rs, 'status');
        if ($isturn == 0) {
            $statustext  = '待提交';
            $statuscolor = '#ff6600';
        } elseif (!isempt($zt)) {
            if (isset($statusara[$zt])) {
                $statustext  = $statusara[$zt][0];
                $statuscolor = $statusara[$zt][1];
            }
        }
        if (contain($statustext, '?')) {
            $statusstr = str_replace('?', '<font color="' . $statuscolor . '">' . $other . '</font>', $statustext);
        } else {
            $statusstr = '<font color="' . $statuscolor . '">' . $statustext . '</font>';
        }
        if ($glx == 1) {
            return $statusstr;
        }
        return [
            str_replace('?', $other, $statustext),
            $statuscolor,
            $zt,
            $statusstr,
            str_replace('?', '', $statustext)
        ];
    }

    public function getstatusstr($rs)
    {
        return $this->getstatus($rs, '', '', 1);
    }

    public function getnowstatus($glx = 0)
    {
        return $this->getstatus($this->rs, '', '', $glx);
    }

    private $getlogrows = [];

    public function getlog($lx = 0)
    {
        if (isset($this->getlogrows[$lx])) {
            return $this->getlogrows[$lx];
        }
        $rows     = $this->flogmodel->getrows(
            $this->mwhere,
            '`checkname` as `name`,`checkid`,`name` as actname,`optdt`,`status`,`explain`,`statusname`,`valid`,`courseid`,`color`,`id`,`qmimg`',
            '`id` asc'
        );
        $uids     = $idss = '';
        $dts      = c('date');
        $fo       = m('file');
        $editarrs = [];
        foreach ($rows as $k => $rs) {
            $uids .= ',' . $rs['checkid'] . '';
            $idss .= ',' . $rs['id'] . '';
            $col  = $rs['color'];
            if (isempt($col)) {
                $col = 'green';
            }
            if (contain($rs['statusname'], '不') || $rs['status'] == '2') {
                $col = 'red';
            }
            $rows[$k]['color']   = $col;
            $rows[$k]['checkdt'] = $rs['optdt'];
            $rows[$k]['sm']      = $rs['explain'];
            if (!isempt($rs['qmimg'])) {
                if (!contain($rs['qmimg'], '.')) {
                    $qmimg = '' . UPDIR . '/' . date('Y-m') . '/qmimg' . $rs['id'] . '.png';
                    $bo    = true;
                    if (!file_exists($qmimg)) {
                        $bar = explode(',', $rs['qmimg']);
                        $bo  = $this->rock->createtxt($qmimg, base64_decode($bar[1]));
                    }
                    if (!$bo) {
                        $qmimg = $rs['qmimg'];
                    } else {
                        $qmimg = '' . URL . '' . $qmimg . '';
                    }
                } else {
                    $qmimg = $rs['qmimg'];
                    if (!file_exists($qmimg)) {
                        $qmimg = '';
                    } else {
                        $qmimg = '' . URL . '' . $qmimg . '';
                    }
                }
                $rows[$k]['qmimg'] = $qmimg;
                if (!isempt($qmimg)) {
                    $rows[$k]['explain'] = '<img height="30" width="70" src="' . $qmimg . '">' . $rs['explain'] . '';
                }
            }
        }
        if ($idss != '') {
            $farr = $fo->getfile('flow_log', substr($idss, 1));
            if ($farr) {
                foreach ($rows as $k => $rs) {
                    $fstr                = $fo->getallstr($farr, $rs['id'], 2);
                    $rows[$k]['explain'] = $this->strappend($rs['explain'], $fstr, '<br>');
                }
            }
        }
        if ($uids != '') {
            $rows = m('admin')->getadmininfor($rows, substr($uids, 1), 'checkid');
        }
        $this->getlogrows[$lx] = $rows;
        return $rows;
    }

    public function addlog($arr = [])
    {
        $addarr = [
            'table'     => $this->mtable,
            'mid'       => $this->id,
            'checkname' => $this->adminname,
            'checkid'   => $this->adminid,
            'optdt'     => $this->rock->now,
            'courseid'  => '0',
            'status'    => '1',
            'ip'        => $this->rock->ip,
            'web'       => $this->rock->web,
            'modeid'    => $this->modeid
        ];
        foreach ($arr as $k => $v) {
            $addarr[$k] = $v;
        }
        if (isset($addarr['explain'])) {
            $addarr['explain'] = htmlspecialchars($addarr['explain']);
        }
        $this->flogmodel->insert($addarr);
        $ssid   = $this->db->insert_id();
        $fileid = $this->rock->post('fileid');
        if ($fileid != '') {
            m('file')->addfile($fileid, 'flow_log', $ssid, $this->modenum . '|' . $this->id);
        }
        $logfileid = $this->rock->post('logfileid');
        if ($logfileid != '') {
            m('file')->addfile($logfileid, 'flow_log', $ssid, $this->modenum . '|' . $this->id);
        }
        $addarr['id'] = $ssid;
        $this->flowaddlog($addarr);
        $this->getlogrows = [];
        return $ssid;
    }

    public function submit($na = '', $sm = '')
    {
        if ($na == '') {
            $na = '提交';
        }
        $isturn = 1;
        if ($na == '保存') {
            $isturn = 0;
        }
        $this->addlog(['name' => $na, 'explain' => $sm]);
        if ($this->isflow > 0) {
            $marr['isturn']     = $isturn;
            $marr['status']     = 0;
            $this->rs['status'] = 0;
            $this->update($marr, $this->id);
            if (arrvalue($this->moders, 'isflowlx') == '1' || $this->isflow >= 3) {
                $this->checksmodel->delete($this->mwhere);
                $this->flogmodel->update('`valid`=0', '' . $this->mwhere . ' and `courseid`>0 and `valid`=1');
            }
            $farr = $this->getflow();
            if ($farr['nowcourseid'] > 0) {
                $sysnextoptid    = $this->rock->post('sysnextoptid');
                $sysnextopt      = $this->rock->post('sysnextopt');
                $sysnextcustidid = (int)$this->rock->post('sysnextcustidid');
                if ($sysnextcustidid == $farr['nowcourseid'] && !isempt($sysnextoptid) && !isempt($sysnextopt)) {
                    $this->addcheckname($sysnextcustidid, $sysnextoptid, $sysnextopt, true, 1);
                    $farr = $this->getflow();
                }
            }
            $farr['status'] = 0;
            $this->savebill($farr);
            if ($isturn == 1) {
                $this->nexttodo($farr['nowcheckid'], 'submit');
            }
        }
        $this->flowsubmit($na, $sm);
        $this->savecsname(
            $this->rock->post('syschaosongid'), $this->rock->post('syschaosong'), $this->adminid, 0, $isturn, $na
        );
        if ($na == '编辑') {
            $this->gettodosend('boedit');
        } else {
            $this->gettodosend('boturn');
        }
    }

    private function savecsname($csnameid, $csname, $uid, $type, $isturn, $na)
    {
        if (!isempt($csnameid)) {
            $where = $this->mwhere . ' and `type`=' . $type . '';
            if ($type > 0) {
                $where .= ' and `uid`=' . $uid . '';
            }
            $csid = (int)$this->chaomodel->getmou('id', $where);
            if ($csid == 0) {
                $where = '';
            }
            $this->chaomodel->record(
                [
                    'modeid'   => $this->modeid,
                    'table'    => $this->mtable,
                    'mid'      => $this->id,
                    'uid'      => $uid,
                    'type'     => $type,
                    'csname'   => $csname,
                    'csnameid' => $csnameid,
                ], $where
            );
            if ($isturn == 1) {
                $this->nexttodo($csnameid, 'chao', $na);
            }
        }
    }

    public function getcsname($id = 0)
    {
        if ($id > 0) {
            $where = "`table`='$this->mtable' and `mid`='$id' and `type`=0";
        } else {
            $where = "`modeid`={$this->modeid} and `uid`={$this->adminid} and `type`=0";
            $iscs  = (int)$this->moders['iscs'];
        }
        $ors    = $this->chaomodel->getone($where, '*', '`id` desc');
        $csname = $csnameid = '';
        if ($ors) {
            $csname   = $ors['csname'];
            $csnameid = $ors['csnameid'];
        }
        return ['csname' => $csname, 'csnameid' => $csnameid, 'id' => $id,];
    }

    public function zhuijiaexplain($sm = '')
    {
        $this->addlog(['explain' => $sm, 'name' => '追加说明', 'status' => 1,]);
        $zt = $this->rs['status'];
        if ($zt == 2 && $this->isflow > 0 && $this->adminid == $this->uid) {
            $marr['status']     = 0;
            $this->rs['status'] = 0;
            $this->update($marr, $this->id);
            $farr           = $this->getflow();
            $farr['status'] = 0;
            $this->savebill($farr);
            $this->nexttodo($farr['nowcheckid'], 'zhui', $sm);
        }
        $this->gettodosend('bozhui', '', $sm);
    }

    public function chuiban($sm = '')
    {
        $this->addlog(['explain' => $sm, 'name' => '催办', 'status' => 1,]);
        $farr = $this->getflow(true);
        $this->nexttodo($farr['nowcheckid'], 'cuiban', $sm);
        $this->gettodosend('cuiban', '', $sm);
    }

    public function getyushen($rows)
    {
        return $rows;
    }

    private function getyushenss($id, $rows, $xu, $isq)
    {
        if ($xu == 0) {
            $this->_tempauoe = [];
        }
        if (isset($rows[$id])) {
            $_tars = $rows[$id];
            if ($isq == 1) {
                $this->getyushenss($_tars['id'], $rows, $xu + 1, $isq);
            }
            $this->_tempauoe[] = $_tars;
            if ($isq == 0) {
                $this->getyushenss($_tars['id'], $rows, $xu + 1, $isq);
            }
        }
        return $this->_tempauoe;
    }

    public function getflowpipei($uid = 0)
    {
        $urs = $this->urs;
        if (!$urs) {
            $urs = $uid;
        }
        if (!is_array($urs)) {
            $urs = $this->db->getone('[Q]admin', "`id`='$urs'", '`deptid`,`deptpath`,`id`');
        }
        $coursedb              = m('flowcourse');
        $barr                  = $coursedb->pipeiCourse($this->modeid);
        $rows                  = $barr['rows'];
        $this->pipeiCoursearrc = $barr['rowd'];
        $this->pipeiCoursearrs = [];
        $this->pipeiCoursearr  = [];
        $kqobj                 = m('kaoqin');
        $this->getflowpipeis($rows, $urs, $kqobj);
        unset($this->pipeiCoursearrs);
        unset($this->pipeiCoursearrc);
        return $this->getyushen($this->pipeiCoursearr);
    }

    private function getflowpipeis($rows, $urs, $kqobj)
    {
        $shiyong = [];
        $defix   = $xuhao = 0;
        $uid     = arrvalue($urs, 'id', 0);
        $zshu    = count($rows);
        foreach ($rows as $k => $rs) {
            $whereid  = (int)$rs['whereid'];
            $receid   = $rs['receid'];
            $wherestr = arrvalue($rs, 'where');
            if ($rs['status'] == '0') {
                continue;
            }
            if (!isempt($wherestr)) {
                $wherestr = m('base')->strreplace($this->rock->jm->base64decode($wherestr), $uid);
                $to       = $this->rows("`id`='$this->id' and $wherestr ");
                if ($to == 0) {
                    continue;
                }
            }
            if ($whereid > 0) {
                $bo = $this->wheremanzhu($whereid);
                if (!$bo) {
                    continue;
                }
            }
            if (!isempt($rs['num'])) {
                $bo = $this->flowcoursejudge($rs['num'], $rs);
                if (is_bool($bo) && !$bo) {
                    continue;
                }
            }
            $xuhao++;
            if ($defix == 0 && (isempt($receid) || contain($receid, 'all'))) {
                $defix = $xuhao;
            }
            if (isempt($receid) && (!isempt($wherestr) || $whereid > 0)) {
                $defix = $xuhao;
            }
            $rs['xuhao'] = $xuhao;
            $shiyong[]   = $rs;
        }
        $pboss = false;
        if ($shiyong) {
            $gxuha = $kqobj->getpipeimid($urs, $shiyong, 'xuhao', $defix);
            if ($gxuha > 0) {
                $pboss = true;
                $gxuha = $gxuha - 1;
                $prs   = $shiyong[$gxuha];
                $this->getflowpipeisss($prs, $urs, $kqobj);
            }
        }
        if (!$pboss && $zshu == 1 && $rows[0]['childshu'] > 0) {
            $this->getflowpipeis($rows[0]['children'], $urs, $kqobj);
        }
    }

    private function getflowpipeisss($prsnrs, $urs, $kqobj)
    {
        $prs = $prsnrs;
        unset($prs['children']);
        $this->pipeiCoursearrs[] = $prs['id'];
        $this->pipeiCoursearr[]  = $prs;
        if ($prs['childshu'] > 0) {
            $this->getflowpipeis($prsnrs['children'], $urs, $kqobj);
        } else {
            $nid = arrvalue($prs, 'nid', '0');
            if ($nid > 0 && !in_array($nid, $this->pipeiCoursearrs) && isset($this->pipeiCoursearrc, $nid)) {
                $this->getflowpipeis([$this->pipeiCoursearrc[$nid]], $urs, $kqobj);
            }
        }
    }

    public function getflow($sbo = false)
    {
        $this->flowarr    = [];
        $allcheckid       = $nowcheckid = $nowcheckname = $nstatustext = '';
        $allcheckids      = [];
        $nowcourseid      = 0;
        $nstatus          = $this->rs['status'];
        $this->nowcourse  = [];
        $this->nextcourse = [];
        $this->flowisend  = 0;
        $curs             = $this->flogmodel->getrows(
            $this->mwhere, 'checkid,checkname,courseid,`valid`,`status`,`statusname`,`name`,`iszb`', 'id desc'
        );
        $cufss            = $ztnas = $chesarr = [];
        foreach ($curs as $k => $rs) {
            if ($rs['iszb'] == '1' && !in_array($rs['checkid'], $allcheckids)) {
                $allcheckids[] = $rs['checkid'];
            }
            if ($rs['courseid'] == '0') {
                continue;
            }
            $_su  = '' . $rs['courseid'] . '';
            $_su1 = '' . $rs['courseid'] . '_' . $rs['checkid'] . '';
            if ($rs['valid'] == 1 && in_array($rs['status'], $this->flowstatusarr)) {
                if (!isset($cufss[$_su])) {
                    $cufss[$_su] = 0;
                }
                $cufss[$_su]++;
                $chesarr[$_su1] = 1;
            }
            if (!in_array($rs['checkid'], $allcheckids)) {
                $allcheckids[] = $rs['checkid'];
            }
            if ($nstatustext == '' && $rs['courseid'] > 0) {
                $nstatustext = '' . $rs['checkname'] . '处理' . $rs['statusname'] . '';
                $nstatus     = $rs['status'];
            }
            $ztnas[$rs['courseid']] = '' . $rs['checkname'] . '' . $rs['statusname'] . '';
        }
        $nowstep = $zongsetp = -1;
        $isend   = 0;
        $czt     = $this->rs['status'];
        $coutye  = 0;
        $rows    = ($czt == 1 || $czt == 5) ? [] : $this->getflowpipei($this->uid);
        if ($rows) {
            $checksa = $this->checksmodel->getrows($this->mwhere . ' and `addlx`=3');
            $coursea = $nrows = [];
            foreach ($checksa as $k => $rs) {
                $coursea[$rs['courseid']] = '1';
            }
            $nrows        = [];
            $allcheckid   = '';
            $isoptsuperbo = false;
            foreach ($rows as $k => $rs) {
                $uarr                  = $this->getcheckname($rs);
                $rows[$k]['checkid']   = $uarr[0];
                $rows[$k]['checkname'] = $uarr[1];
                $allcheckid            .= ',' . $uarr[0] . '';
                if ($rs['checktype'] == 'optsuper' && isempt($uarr[0])) {
                    $isoptsuperbo = true;
                }
            }
            if ($isoptsuperbo) {
                foreach ($rows as $k => $rs) {
                    if ($rs['checktype'] == 'optsuper') {
                        $_k1  = $k - 1;
                        $_uid = $this->optid;
                        if ($_k1 >= 0) {
                            $ours = $this->flogmodel->getone(
                                $this->mwhere . ' and `courseid`=' . $rows[$_k1]['id'] . ' and `valid`=1 ', '`checkid`',
                                '`id` desc'
                            );
                            if (!$ours) {
                                $_uid = (int)$rows[$_k1]['checkid'];
                            } else {
                                $_uid = $ours['checkid'];
                            }
                        }
                        $uarr = $this->adminmodel->getsuperman($_uid);
                        if ($uarr) {
                            $rows[$k]['checkid']   = $uarr[0];
                            $rows[$k]['checkname'] = $uarr[1];
                        }
                    }
                }
            }
            foreach ($rows as $k => $rs) {
                $nrows[] = $rs;
                if ($rs['checktype'] == 'superall') {
                    $ids1   = $rs['id'];
                    $suparr = $this->adminmodel->getsuperarr($this->uid);
                    if ($suparr) {
                        $logdsar = $this->getlog();
                        foreach ($logdsar as $k1 => $rs1) {
                            if ($rs1['courseid'] > 0 && $rs1['status'] == '1' && $rs1['valid'] == '1') {
                                $allcheckid .= ',' . $rs1['checkid'] . '';
                            }
                        }
                        foreach ($suparr as $k1 => $surs) {
                            if (!contain(',' . $allcheckid . ',', ',' . $surs['id'] . ',')) {
                                $rs['oldid']     = $ids1;
                                $rs['id']        = $ids1 * 99999 + $surs['id'];
                                $rs['checkid']   = $surs['id'];
                                $rs['checkname'] = $surs['name'];
                                $rs['iszf']      = 0;
                                $nrows[]         = $rs;
                                $allcheckid      .= ',' . $surs['id'] . '';
                            }
                        }
                    }
                }
            }
            $yisheh = '';
            if ($this->isflow == 2) {
                $logdsar = $this->getlog();
                foreach ($logdsar as $k1 => $rs1) {
                    if ($rs1['courseid'] > 0 && $rs1['status'] == 1 && $rs1['valid'] == 1) {
                        $yisheh .= ',' . $rs1['checkid'] . '';
                    }
                }
            }
            foreach ($nrows as $k => $rs) {
                $whereid   = (int)$rs['whereid'];
                $checkshu  = $rs['checkshu'];
                $checkid   = $rs['checkid'];
                $checkname = $rs['checkname'];
                $checktype = $rs['checktype'];
                if ($this->isflow == 2 && !isempt($checkid) && isempt($rs['checkfields'])) {
                    if (($checkid == $this->uid || $checkid == $this->optid)) {
                        continue;
                    }
                    $k2    = $k + 1;
                    $ntype = 'yes';
                    if (isset($nrows[$k2])) {
                        if ($nrows[$k2]['checktype'] == 'change') {
                            $ntype = 'no';
                        }
                    }
                    if ($ntype == 'yes' && contain(',' . $yisheh . ',', ',' . $checkid . ',')) {
                        continue;
                    }
                }
                if (!isempt($checkid)) {
                    $yisheh .= ',' . $checkid . '';
                }
                $zongsetp++;
                $ischeck  = 0;
                $checkids = $checknames = '';
                $_su      = '' . $rs['id'] . '';
                $nowshu   = 0;
                if (isset($cufss[$_su])) {
                    $nowshu = $cufss[$_su];
                }
                if (!$this->isempt($checkid)) {
                    $checkida  = explode(',', $checkid);
                    $checkidna = explode(',', $checkname);
                    $_chid     = $_chna = '';
                    foreach ($checkida as $k1 => $chkid) {
                        $_su1 = '' . $rs['id'] . '_' . $chkid . '';
                        if (!in_array($chkid, $allcheckids)) {
                            $allcheckids[] = $chkid;
                        }
                        if (!isset($chesarr[$_su1])) {
                            $_chid .= ',' . $chkid . '';
                            $_chna .= ',' . arrvalue($checkidna, $k1) . '';
                        }
                    }
                    if ($_chid != '') {
                        $_chid = substr($_chid, 1);
                    }
                    if ($_chna != '') {
                        $_chna = substr($_chna, 1);
                    }
                    if ($_chid == '') {
                        $ischeck = 1;
                    } else {
                        if ($checkshu > 0 && $nowshu >= $checkshu) {
                            $ischeck = 1;
                        }
                    }
                    $checkids   = $_chid;
                    $checknames = $_chna;
                } else {
                    if ($checkshu > 0 && $nowshu >= $checkshu) {
                        $ischeck = 1;
                    }
                    if ($checkshu == 0 && $nowshu > 0) {
                        $ischeck = 1;
                    }
                }
                if ($ischeck == 0 && $coutye == 0) {
                    if ((int)arrvalue($rs, 'coursetype', '0') > 0) {
                        $coutye = 1;
                    }
                }
                $rs['ischeck']      = $ischeck;
                $rs['islast']       = 0;
                $rs['checkid']      = $checkid;
                $rs['checkname']    = $checkname;
                $rs['nowcheckid']   = $checkids;
                $rs['nowcheckname'] = $checknames;
                $rs['isnow']        = 0;
                $rs['nowstep']      = $zongsetp;
                $rs['step']         = $k + 1;
                if ($ischeck == 0 && $nowstep == -1) {
                    $rs['isnow']     = 1;
                    $nowstep         = $zongsetp;
                    $this->nowcourse = $rs;
                    $nowcourseid     = $rs['id'];
                    $nowcheckid      = $checkids;
                    $nowcheckname    = $checknames;
                }
                if ($nowstep > -1 && $zongsetp == $nowstep + 1) {
                    $this->nextcourse = $rs;
                }
                $this->flowarr[] = $rs;
            }
        }
        if ($zongsetp > -1) {
            $this->flowarr[$zongsetp]['islast'] = 1;
        }
        if ($nowstep == -1) {
            $isend = 1;
        } else {
            $nstatustext = '待' . $nowcheckname . '处理';
        }
        $this->flowisend         = $isend;
        $allcheckid              = join(',', $allcheckids);
        $arrbill['allcheckid']   = $allcheckid;
        $arrbill['nowcourseid']  = $nowcourseid;
        $arrbill['nowcheckid']   = $nowcheckid;
        $arrbill['nowcheckname'] = $nowcheckname;
        $arrbill['nstatustext']  = $nstatustext;
        $arrbill['nstatus']      = $nstatus;
        $arrbill['status']       = $this->rs['status'];
        $arrbill['isturn']       = $this->rs['isturn'];
        if ($sbo) {
            $this->getflowsave($arrbill);
        }
        return $arrbill;
    }

    public function wheremanzhu($id)
    {
        $uid = $this->uid;
        $ser = $this->wheremodel->getflowwhere($id, $uid);
        if (!$ser) {
            return true;
        }
        $str = $ser['ntr'];
        if (!isempt($str)) {
            $to = $this->db->rows('[Q]admin', "`id`='$uid' and ($str)");
            if ($to > 0) {
                return false;
            }
        }
        $str = $ser['str'];
        if (!isempt($str)) {
            $str = str_replace('{asqom}', '', $str);
            $to  = $this->rows("`id`='$this->id' and $str");
            if ($to == 0) {
                return false;
            }
        }
        $str = $ser['utr'];
        if (!isempt($str)) {
            $to = $this->db->rows('[Q]admin', "`id`='$uid' and $str");
            if ($to == 0) {
                return false;
            }
        }
        return true;
    }

    public function getflowsave($sarr, $suvu = false)
    {
        if (!$sarr) {
            return;
        }
        if ($suvu) {
            $sarr['updt'] = $this->rock->now;
        }
        $this->billmodel->update($sarr, $this->mwhere);
    }

    private function getcheckname($crs)
    {
        $type     = $crs['checktype'];
        $cuid     = $name = '';
        $courseid = $crs['id'];
        $cheorws  = $this->checksmodel->getall(
            $this->mwhere . ' and `courseid`=' . $courseid . '', 'checkid,checkname'
        );
        if ($cheorws) {
            foreach ($cheorws as $k => $rs) {
                $lxss = $rs['checkid'];
                if (isempt($lxss) || $lxss == '0') {
                    continue;
                }
                $cuid .= ',' . $lxss . '';
                $name .= ',' . $rs['checkname'] . '';
            }
            if ($cuid != '') {
                $cuid = substr($cuid, 1);
                $name = substr($name, 1);
                return [$cuid, $name];
            }
        }
        if (!$this->isempt($crs['num'])) {
            $uarr = $this->flowcheckname($crs['num']);
            if (is_array($uarr)) {
                if (!$this->isempt($uarr[0])) {
                    return $uarr;
                }
            }
        }
        if ($type == 'super' || $type == 'superall') {
            $cuid = $this->urs['superid'];
            $name = $this->urs['superman'];
        }
        if ($type == 'dept' || $type == 'super' || $type == 'superall') {
            if ($this->isempt($cuid) && $this->drs) {
                $cuid = $this->drs['headid'];
                $name = $this->drs['headman'];
            }
        }
        if ($type == 'apply') {
            $cuid = $this->urs['id'];
            $name = $this->urs['name'];
        }
        if ($type == 'opt') {
            $cuid = $this->rs['optid'];
            $name = $this->rs['optname'];
            if (isempt($cuid)) {
                $cuid = $this->urs['id'];
                $name = $this->urs['name'];
            }
        }
        if ($type == 'user') {
            $cuid = $crs['checktypeid'];
            $name = $crs['checktypename'];
        }
        if ($type == 'rank') {
            $rank = $crs['checktypename'];
            if (!$this->isempt($rank)) {
                $wheer1 = $this->adminmodel->getcompanywhere(5, '', $this->companyid);
                $rnurs  = $this->db->getrows(
                    '[Q]admin', "`status`=1 and `ranking`='$rank' " . $wheer1 . "", 'id,name', 'sort'
                );
                foreach ($rnurs as $k => $rns) {
                    $cuid .= ',' . $rns['id'] . '';
                    $name .= ',' . $rns['name'] . '';
                }
                if ($cuid != '') {
                    $cuid = substr($cuid, 1);
                    $name = substr($name, 1);
                }
            }
        }
        if ($type == 'cname') {
            $cnbar = $this->cnamemodel->getcheckname($crs['checktypeid'], $this->uid);
            $cuid  = arrvalue($cnbar, 0);
            $name  = arrvalue($cnbar, 1);
        }
        if ($type == 'field') {
            $fids = $crs['checktypeid'];
            if (!isempt($fids)) {
                $vals  = '';
                $farrs = explode(',', $fids);
                foreach ($farrs as $fid) {
                    $vid = arrvalue($this->rs, $fid);
                    if (!isempt($vid)) {
                        $vals .= ',' . $vid . '';
                    }
                }
                if ($vals != '') {
                    $vals = substr($vals, 1);
                    $uarr = $this->adminmodel->getrows(
                        '`status`=1 and `id` in(' . $vals . ')', 'id,name', 'FIELD(`id`,' . $vals . ')'
                    );
                    foreach ($uarr as $k => $rs) {
                        $cuid .= ',' . $rs['id'] . '';
                        $name .= ',' . $rs['name'] . '';
                    }
                    if ($cuid != '') {
                        $cuid = substr($cuid, 1);
                        $name = substr($name, 1);
                    }
                }
            }
        }
        $cuid = $this->rock->repempt($cuid);
        $name = $this->rock->repempt($name);
        return [$cuid, $name];
    }

    public function createbianhao($num, $fid, $wshu = 3)
    {
        if (isempt($num)) {
            $num = '' . $this->modenum . '-';
        }
        @$appdt = $this->rs['applydt'];
        if (isempt($appdt)) {
            $appdt = $this->rock->date;
        }
        $apdt = str_replace('-', '', substr($appdt, 0, 10));
        $num  = str_replace('Ymd', $apdt, $num);
        return $this->db->sericnum($num, '[Q]' . $this->mtable . '', $fid, $wshu);
    }

    public function createinputnum($num, $fid)
    {
        $acta = '';
        if (method_exists($this, $num)) {
            $acta = $num;
        } else {
            if (contain($num, ',')) {
                $arra = explode(',', $num);
                $acta = $arra[0];
                $num  = $arra[1];
            }
        }
        if ($acta && method_exists($this, $acta)) {
            $barr = $this->$acta($num);
            if (is_array($barr)) {
                $qom    = arrvalue($barr, 'qom', $num);
                $wshu   = arrvalue($barr, 'wshu', 3);
                $bom    = arrvalue($barr, 'bom');
                $fields = arrvalue($barr, 'fields', $fid);
                return $this->createbianhao($qom, $fields, $wshu) . $bom;
            } else {
                if (isempt($barr)) {
                    $barr = $num;
                }
                return $this->createbianhao($barr, $fid);
            }
        } else {
            return $this->createbianhao($num, $fid);
        }
    }

    public function createnum()
    {
        $num = $this->moders['sericnum'];
        if ($num == '无' || $this->isempt($num)) {
            $num = 'TM-Ymd-';
        }
        @$appdt = $this->rs['applydt'];
        if (isempt($appdt)) {
            $appdt = $this->rock->date;
        }
        $apdt = str_replace('-', '', $appdt);
        $num  = str_replace('Ymd', $apdt, $num);
        return $this->db->sericnum($num, '[Q]flow_bill', 'sericnum', 3);
    }

    public function savebill($oarr = [])
    {
        $dbs  = $this->billmodel;
        $whes = $this->mwhere;
        $birs = $dbs->getone($whes);
        $arr  = [
            'table'     => $this->mtable,
            'mid'       => $this->id,
            'optdt'     => isset($this->rs['optdt']) ? $this->rs['optdt'] : $this->rock->now,
            'optname'   => $this->adminname,
            'optid'     => $this->adminid,
            'modeid'    => $this->modeid,
            'updt'      => $this->rock->now,
            'isturn'    => $this->rs['isturn'],
            'nstatus'   => $this->rs['status'],
            'applydt'   => $this->rs['applydt'],
            'modename'  => $this->modename,
            'uname'     => $this->rs['base_name'],
            'udeptname' => $this->rs['base_deptname'],
            'uid'       => $this->uid,
        ];
        foreach ($oarr as $k => $v) {
            $arr[$k] = $v;
        }
        if (!$birs) {
            $arr['isdel']    = '0';
            $arr['status']   = $arr['nstatus'];
            $arr['createdt'] = $arr['optdt'];
            $arr['sericnum'] = $this->createnum();
            $arr['udeptid']  = $this->rock->post('sysudeptid', $this->urs['deptid']);
            $whes            = '';
            $this->sericnum  = $arr['sericnum'];
        } else {
            $udeptid = $birs['udeptid'];
            if ($udeptid == 0) {
                $arr['udeptid'] = $this->urs['deptid'];
            }
        }
        $dbs->record($arr, $whes);
        return $arr;
    }

    public function getsummary()
    {
        return $this->rock->reparr($this->moders['summary'], $this->rs);
    }

    public function addcheckname($courseid, $uid, $uname, $onbo = false, $addlx = 0)
    {
        if (isempt($uid)) {
            $uid   = '0';
            $uname = 'auto';
        }
        $uida  = explode(',', '' . $uid . '');
        $uidan = explode(',', $uname);
        if ($onbo) {
            $this->checksmodel->delete($this->mwhere . ' and `courseid`=' . $courseid . '');
        }
        if ($uida) {
            foreach ($uida as $k => $uid) {
                $uname = $this->rock->arrvalue($uidan, $k);
                $zyarr = [
                    'table'    => $this->mtable,
                    'mid'      => $this->id,
                    'modeid'   => $this->modeid,
                    'courseid' => $courseid,
                    'optid'    => $this->adminid,
                    'optname'  => $this->adminname,
                    'addlx'    => $addlx,
                    'optdt'    => $this->rock->now,
                    'status'   => 0
                ];
                $this->checksmodel->delete(
                    $this->mwhere . ' and `checkid`=' . $uid . ' and `courseid`=' . $courseid . ''
                );
                $zyarr['checkid']   = $uid;
                $zyarr['checkname'] = $uname;
                $this->checksmodel->insert($zyarr);
            }
        }
        if ($addlx == 4) {
            $this->checksmodel->delete(
                $this->mwhere . ' and `checkid`=' . $this->adminid . ' and `courseid`=' . $courseid . ''
            );
        }
    }

    public function savedatastr($fval, $farr, $data = [])
    {
        $str = '';
        if (!$farr) {
            return $str;
        }
        $savewhere = $farr['savewhere'];
        $name      = $farr['name'];
        $types     = $farr['fieldstype'];
        if (isempt($savewhere) || isempt($fval)) {
            return $str;
        }
        $savewhere = str_replace(['{0}', '{date}', '{now}'], [$name, $this->rock->date, $this->rock->now], $savewhere);
        $savewhere = $this->rock->reparr($savewhere, $data);
        $saees     = explode(',', $savewhere);
        if ($types == 'date' || $types == 'datetime') {
            $fval = strtotime($fval);
        }
        if ($types == 'number') {
            $fval = floatval($fval);
        }
        foreach ($saees as $saeess) {
            $fsaed = explode('|', $saeess);
            $msg   = isset($fsaed[2]) ? $fsaed[2] : '' . $name . '数据不符号';
            $val   = isset($fsaed[1]) ? $fsaed[1] : '';
            $lfs   = $fsaed[0];
            if ($val != '') {
                if ($types == 'date' || $types == 'datetime') {
                    $val = strtotime($val);
                }
                if ($types == 'number') {
                    $val = floatval($val);
                }
                if ($lfs == 'gt') {
                    $bo = $fval > $val;
                    if (!$bo) {
                        return $msg;
                    }
                }
                if ($lfs == 'egt') {
                    $bo = $fval >= $val;
                    if (!$bo) {
                        return $msg;
                    }
                }
                if ($lfs == 'lt') {
                    $bo = $fval < $val;
                    if (!$bo) {
                        return $msg;
                    }
                }
                if ($lfs == 'elt') {
                    $bo = $fval <= $val;
                    if (!$bo) {
                        return $msg;
                    }
                }
                if ($lfs == 'eg') {
                    $bo = $fval == $val;
                    if (!$bo) {
                        return $msg;
                    }
                }
                if ($lfs == 'neg') {
                    $bo = $fval != $val;
                    if (!$bo) {
                        return $msg;
                    }
                }
            }
        }
        return $str;
    }

    public function update($arr, $where)
    {
        if (is_array($arr)) {
            foreach ($arr as $k => $v) {
                $this->rs[$k] = $v;
            }
        }
        return parent::update($arr, $where);
    }

    public function updatelogvalid($whe)
    {
        $this->flogmodel->update('valid=0', $this->mwhere . ' ' . $whe);
    }

    public function strappend($sm, $str, $fh = ',')
    {
        if (isempt($str)) {
            return $sm;
        }
        if (!isempt($sm)) {
            $sm .= $fh;
        }
        $sm .= $str;
        return $sm;
    }

    public function checkerror($lx = 1, $sm = '')
    {
        if ($sm == '') {
            $sm = '单据异常管理员处理';
        }
        $msg = $this->check($lx, $sm, 1);
        return $msg;
    }

    public function check($zt, $sm = '', $lx = 0)
    {
        if ($this->rs['status'] == 1) {
            return '流程已处理完成,无需操作';
        }
        $arr       = $this->getflow();
        $flowinfor = $this->getflowinfor();
        if ($flowinfor['ischeck'] == 0 && $lx == 0) {
            return '当前是[' . $arr['nowcheckname'] . ']处理';
        }
        $nowcourse = $this->nowcourse;
        if ($lx == 1) {
            if ($arr['nowcourseid'] != 0) {
                return '当前有审核步骤ID是存在的不能直接标识已完成';
            }
            $to = $this->flogmodel->rows($this->mwhere . ' and `courseid`>0 and `status`=1');
            if ($to == 0) {
                return '该单据没有任何通过审核处理不能直接标识已完成或已审核';
            }
            $nowcourse = ['id' => 66666, 'name' => '异常处理', 'step' => 0];
        }
        $nextcourse = $this->nextcourse;
        $zynameid   = $this->rock->post('zynameid');
        $zyname     = $this->rock->post('zyname');
        $csnameid   = '';
        $csname     = '';
        $nextname   = $this->rock->post('nextname');
        $nextnameid = $this->rock->post('nextnameid');
        $qmimgstr   = $this->rock->post('qmimgstr');
        $tuiid      = (int)$this->rock->post('tuiid');
        $iszhuanyi  = $ischangenext = 0;
        if ($zt == 1 && $this->isflow != 3 && isempt($zynameid) && arrvalue($nextcourse, 'checktype') == 'change') {
            $ischangenext = 1;
        }
        if ($zt != 2) {
            $tuiid = 0;
        }
        $istongyi = in_array($zt, $this->flowstatusarr);
        if ($zynameid != '' && $istongyi) {
            if ($zynameid == $this->adminid) {
                return '不能转给自己';
            }
            $sm                       = $this->strappend($sm, '转给：' . $zyname . '');
            $iszhuanyi                = 1;
            $this->rs['syszb_name']   = $zyname;
            $this->rs['syszb_nameid'] = $zynameid;
        }
        if ($nextnameid == '' && $ischangenext == 1) {
            return '请选择下一步处理人';
        }
        $ufied = [];
        if ($iszhuanyi == 0 && $zt != 2) {
            foreach ($flowinfor['checkfields'] as $chef => $chefv) {
                $ufied[$chef] = $this->rock->post('cfields_' . $chef . '');
                if (isempt($ufied[$chef]) && $chefv['isbt'] == '1') {
                    $this->echomsg('' . $chefv['name'] . '不能为空');
                }
                $_str = $this->savedatastr($ufied[$chef], $chefv['fieldsarr'], $this->rs);
                if ($_str != '') {
                    $this->echomsg($_str);
                }
            }
        }
        $this->checkiszhuanyi = $iszhuanyi;
        $barr                 = $this->flowcheckbefore($zt, $ufied, $sm);
        $msg                  = '';
        if (is_array($barr) && isset($barr['msg'])) {
            $msg = $barr['msg'];
        }
        if (is_array($barr) && isset($barr['update'])) {
            foreach ($barr['update'] as $_k => $_v) {
                $ufied[$_k] = $_v;
            }
        }
        if (is_string($barr)) {
            $msg = $barr;
        }
        if (!isempt($msg)) {
            return $msg;
        }
        if ($ufied) {
            $bo = $this->update($ufied, $this->id);
            if (!$bo) {
                return 'dberr:' . $this->db->error();
            }
        }
        $courseact   = $flowinfor['courseact'];
        $act         = $courseact[$zt];
        $statusname  = $act[0];
        $statuscolor = $act[1];
        $nzt         = $act[2];
        $courseid    = $nowcourse['id'];
        $this->checksmodel->update(
            '`status`=' . $zt . '',
            $this->mwhere . ' and `checkid`=' . $this->adminid . ' and `courseid`=' . $courseid . ''
        );
        if ($iszhuanyi == 1) {
            $this->addcheckname($courseid, $zynameid, $zyname, false, 4);
            $nowcourse['id'] = 0;
        }
        if ($ischangenext == 1) {
            $this->addcheckname($nextcourse['id'], $nextnameid, $nextname, true, 1);
        }
        $tuirs = [];
        if ($tuiid > 0) {
            $tuirs = $this->flogmodel->getone($tuiid);
        }
        if (!$tuirs) {
            $tuiid = 0;
        }
        if ($tuiid > 0) {
            $sm          = $this->strappend($sm, '退回到[' . $tuirs['name'] . '(' . $tuirs['checkname'] . ')]');
            $statusname  = '退回';
            $statuscolor = '#17B2B7';
        }
        $this->checkistui = $tuiid;
        $logsm            = $sm;
        if ($iszhuanyi == 0 && $csname) {
            $logsm = $this->strappend($logsm, '抄送给：' . $csname . '');
        }
        $this->lastlogid = $this->addlog(
            [
                'courseid'   => $nowcourse['id'],
                'name'       => $nowcourse['name'],
                'step'       => $nowcourse['step'],
                'status'     => $zt,
                'statusname' => $statusname,
                'color'      => $statuscolor,
                'explain'    => $logsm,
                'iszb'       => $iszhuanyi,
                'qmimg'      => $qmimgstr
            ]
        );
        if ($tuiid > 0) {
            $this->addcheckname($tuirs['courseid'], $tuirs['checkid'], $tuirs['checkname'], true, 3);
            $this->updatelogvalid('and `courseid`>0 and `status`=1 and `step`>=' . $tuirs['step'] . '');
        }
        $lzt            = $this->rock->repempt($nzt, $zt);
        $uparr          = $nexttodoarr = $nexttodoarc = [];
        $bsarr          = $this->getflow();
        $bsarr['tuiid'] = $tuiid;
        $nextcheckid    = $bsarr['nowcheckid'];
        if ($istongyi) {
            if ($iszhuanyi == 0) {
                $uparr['status'] = $this->rock->repempt($nzt, '0');
            }
            $nexttodoarr = [$nextcheckid, 'next', $sm, $statusname];
        } else {
            if ($tuiid > 0) {
                $lzt         = 23;
                $nexttodoarr = [$nextcheckid, 'tui', $sm, $statusname];
            } elseif ($zt == 2) {
                $nexttodoarr = [$this->optid, 'nothrough', $sm, $statusname];
            }
            $uparr['status'] = $lzt;
        }
        $this->flowcheckafter($zt, $sm, $nowcourse);
        $bsarr['nstatus'] = $lzt;
        $bsarr['checksm'] = $sm;
        if (!$this->nowcourse) {
            $uparr['status'] = $lzt;
            $nexttodoarc     = [$this->optid, 'finish', $sm, ''];
        }
        if ($uparr) {
            $this->update($uparr, $this->id);
        }
        if (!$this->nowcourse) {
            $this->flowcheckfinsh($zt);
            if ($istongyi) {
                $this->checksmodel->delete($this->mwhere);
            }
        }
        $bsarr['status'] = $this->rs['status'];
        $this->getflowsave($bsarr, true);
        if ($this->db->backsql()) {
            $bos = ($courseid == arrvalue($this->nowcourse, 'id') && $istongyi);
            if ($nexttodoarr && (!$bos || $iszhuanyi == 1)) {
                $this->nexttodo($nexttodoarr[0], $nexttodoarr[1], $nexttodoarr[2], $nexttodoarr[3]);
            }
            if ($nexttodoarc) {
                $this->nexttodo($nexttodoarc[0], $nexttodoarc[1], $nexttodoarc[2], $nexttodoarc[3]);
            }
        }
        if ($iszhuanyi == 1) {
            $this->gettodosend(
                'bozhuan', '', $sm, 0, '' . $this->adminname . '将[' . $nowcourse['name'] . ']转给:' . $zyname . ''
            );
        } else {
            if ($istongyi) {
                $this->gettodosend('botong', $statusname, $sm, $nowcourse['id']);
            }
            if ($zt == 2) {
                $this->gettodosend('bobutong', $statusname, $sm, $nowcourse['id']);
            }
            if (!$this->nowcourse && $istongyi) {
                $this->gettodosend('bofinish', '', $sm);
            }
        }
        if ($iszhuanyi == 0) {
            $sm1 = '在“' . $nowcourse['name'] . '”处理' . $statusname . '';
            $this->savecsname($csnameid, $csname, $this->adminid, $nowcourse['id'], 1, $sm1);
        }
        return 'ok';
    }

    public function pushs($receid, $cont, $title = '', $params = [])
    {
        return $this->push($receid, '', $cont, $title, 0, $params);
    }

    public function getxiangurl($num = '', $id = 0, $lx = 'x')
    {
        if ($num == '') {
            $num = $this->modenum;
        }
        if ($id == 0) {
            $id = $this->id;
        }
        $url = URL;
        if ($lx == 'auto') {
            $lx = ($this->ismobile == 1) ? 'x' : 'p';
        }
        if ($lx == 'x' || $lx == 'a') {
            $url = $this->rock->getouturl();
        }
        $url = '' . $url . 'task.php?a=' . $lx . '&num=' . $num . '&mid=' . $id . '';
        if (COMPANYNUM) {
            $url .= '&dwnum=' . COMPANYNUM . '';
        }
        return $url;
    }

    public function getxiangurlx($num = '', $id = 0)
    {
        return $this->getxiangurl($num, $id, 'x');
    }

    public function push($receid, $gname = '', $cont = '', $title = '', $wkal = 0, $params = [])
    {
        if (isempt($receid) && $wkal == 1) {
            $receid = 'all';
        }
        if (isempt($receid)) {
            return false;
        }
        if (contain(',' . $receid . ',', ',d1,')) {
            $receid = 'all';
        }
        $modenum  = arrvalue($params, 'modenum', $this->modenum);
        $modename = arrvalue($params, 'modename', $this->modename);
        $id       = (int)arrvalue($params, 'id', $this->id);
        $moders   = arrvalue($params, 'moders');
        if (!is_array($moders)) {
            $moders = $this->moders;
        }
        if ($gname == '') {
            $gname = $modename;
        }
        $reim  = m('reim');
        $url   = $this->getxiangurl($modenum, $id, 'p');
        $wxurl = $this->getxiangurl($modenum, $id, 'x');
        $emurl = $this->getxiangurl($modenum, $id, 'a');
        if ($id == 0) {
            $url   = '';
            $wxurl = '';
            $emurl = '';
        }
        $url   = arrvalue($params, 'url', $url);
        $wxurl = arrvalue($params, 'wxurl', $wxurl);
        $emurl = arrvalue($params, 'emurl', $emurl);
        $slx   = 0;
        $pctx  = $moders['pctx'];
        $mctx  = $moders['mctx'];
        $wxtx  = $moders['wxtx'];
        $ddtx  = $moders['ddtx'];
        $emtx  = $moders['emtx'];
        if ($pctx == 0 && $mctx == 1) {
            $slx = 2;
        }
        if ($pctx == 1 && $mctx == 0) {
            $slx = 1;
        }
        if ($pctx == 0 && $mctx == 0) {
            $slx = 3;
        }
        $this->rs['now_adminname'] = $this->adminname;
        $this->rs['now_modename']  = $modename;
        $cont                      = $this->rock->reparr($cont, $this->rs);
        $receid                    = $this->adminmodel->gjoins($receid);
        $uids                      = m('todo')->addtodo($receid, $modename, $cont, $modenum, $id);
        if ($uids != '' && $moders['type'] != '系统' && $id > 0) {
            $this->todosmodel->addtotouids(
                $uids, [
                'table'    => $moders['table'],
                'mid'      => $id,
                'modename' => $modename,
                'modenum'  => $modenum,
            ]
            );
        }
        $title = $this->rock->reparr($title, $this->rs);
        $reim->pushagent($uids, $gname, $cont, $title, $url, $wxurl, $slx, '' . $modenum . '|' . $id . '');
        $this->flowchangetodo($uids, $gname);
        if (isempt($title)) {
            $title = $modename;
        }
        $this->flowweixinarr = [];
        return $receid;
    }

    public function nexttodo($nuid, $type, $sm = '', $act = '')
    {
        $cont    = '';
        $tit     = '';
        $gname   = '流程待办';
        $summary = $this->getsummary();
        if ($type == 'submit' || $type == 'next' || $type == 'cuiban') {
            $cont = '你有[' . $this->uname . ']的[' . $this->modename . ',单号:' . $this->sericnum . ']需要处理';
            if ($sm != '') {
                $cont .= '，说明:' . $sm . '';
            }
            $tit = '' . $this->uname . '的' . $this->modename . '';
            if ($type != 'cuiban') {
                $txnum = $this->option->getval('sms_txnum');
                if (!isempt($txnum)) {
                    $mknum = $this->option->getval('sms_mknum');
                    if ($mknum == 'all' || contain(',' . $mknum . ',', ',' . $this->modenum . ',')) {
                        $wxurl = $this->getxiangurlx();
                        $barr  = c('xinhuapi')->sendsms(
                            $nuid, '', $txnum, [
                            'modename'  => $this->modename,
                            'sericnum'  => $this->sericnum,
                            'applyname' => $this->uname,
                            'deptname'  => $this->rs['base_deptname'],
                        ], $wxurl
                        );
                    }
                }
            }
            $type = 'daiban';
        }
        if ($type == 'nothrough') {
            $cont  = '你提交[' . $this->modename . ',单号:' . $this->sericnum . ']' . $this->adminname . '处理[' . $act . ']，原因:[' . $sm . ']';
            $gname = '流程申请';
            $tit   = '' . $this->modename . '处理' . $act . '';
        }
        if ($type == 'finish') {
            $cont  = '你提交的[' . $this->modename . ',单号:' . $this->sericnum . ']已全部处理完成';
            $gname = '流程申请';
            $tit   = '' . $this->modename . '全部处理完成';
        }
        if ($type == 'zhui') {
            $cont = '' . $this->adminname . '追加单据说明[' . $this->modename . ',单号:' . $this->sericnum . ']，说明:[' . $sm . ']';
        }
        if ($type == 'tui') {
            $cont = '[' . $this->adminname . ']退回单据[' . $this->modename . ',单号:' . $this->sericnum . ']到你这请及时处理，说明:' . $sm . '';
        }
        if ($type == 'chao') {
            $cont = '' . $this->adminname . '' . $sm . '了“' . $this->modename . '”';
            if (!isempt($summary)) {
                $cont .= '，摘要“' . $summary . '”';
            }
            if ($this->isflow > 0) {
                $cont .= '，单号“' . $this->sericnum . '”';
            }
            $gname = '';
            $tit   = '' . $this->modename . '的单据抄送';
        }
        if ($type == 'pinglun') {
            $cont  = '' . $this->adminname . '' . $act . '你的[' . $this->modename . ']单据，说明:' . $sm . '';
            $gname = '';
            $tit   = '' . $this->modename . '评论';
        }
        if ($type == 'receipt') {
            $cont = '' . $this->adminname . '' . $act . '[' . $this->modename . ']的单据';
            if ($sm != '') {
                $cont .= '，说明:' . $sm . '';
            }
            $gname = '回执确认';
            $tit   = '' . $this->modename . '回执确认';
        }
        $nbis = $this->flownexttodo($type);
        if ($nbis) {
            if (is_string($nbis)) {
                $cont = $nbis;
            }
            if (is_array($nbis)) {
                $tit   = arrvalue($nbis, 'title', $tit);
                $gname = arrvalue($nbis, 'gname', $gname);
                $cont  = arrvalue($nbis, 'cont', $cont);
            }
        }
        if ($cont != '') {
            $this->push($nuid, $gname, $cont, $tit);
        }
    }

    public function getwxurl($num = '')
    {
        if ($num == '') {
            $num = $this->modenum;
        }
        $url = $this->rock->getouturl();
        $str = '' . $url . '?m=ying&d=we&num=' . $num . '';
        return $str;
    }

    public function getweurl($num = '')
    {
        if ($num == '') {
            $num = $this->modenum;
        }
        $url = $this->rock->getouturl();
        $str = '' . $url . '?m=ying&d=we&mnum=' . $num . '';
        return $str;
    }

    public function deletebill($sm = '', $qxpd = true)
    {
        if (getconfig('systype') == 'demo') {
            return '演示请勿删除';
        }
        if ($qxpd) {
            $is = $this->isdeleteqx();
            if ($is == 0) {
                return '无权删除';
            }
        }
        if (method_exists($this, 'flowdeletebillbefore')) {
            $bstr = $this->flowdeletebillbefore($sm);
            if (!isempt($bstr)) {
                return $bstr;
            }
        }
        $modewhere = "`modenum`='" . $this->modenum . "' and `mid`=" . $this->id . "";
        $this->flogmodel->delete($this->mwhere);
        m('reads')->delete($this->mwhere);
        m('file')->delfiles($this->mtable, $this->id);
        $tables = $this->moders['tables'];
        if (!isempt($tables)) {
            $arrse = explode(',', $tables);
            foreach ($arrse as $arrses) {
                m($arrses)->delete('mid=' . $this->id . '');
            }
        }
        $this->billmodel->delete($this->mwhere);
        $this->todosmodel->delete($this->mwhere);
        $this->checksmodel->delete($this->mwhere);
        $this->chaomodel->delete($this->mwhere);
        m('remind')->delete($this->mwhere);
        m('todo')->delete($this->mwhere);
        m('todo')->delete($modewhere);
        m('receipt')->delete($this->mwhere);
        m('im_history')->delete("`xgurl`='" . $this->modenum . "|" . $this->id . "'");
        $this->delete($this->id);
        $this->flowdeletebill($sm);
        $this->flowzuofeibill($sm);
        $this->gettodosend('bodel', '', $sm);
        $dels = '删除模块[' . $this->modename . ']id为' . $this->id . '的单据';
        $ztss = arrvalue($this->rs, 'base_summary');
        if (!isempt($ztss)) {
            $dels .= ',摘要[' . $ztss . ']';
        }
        if (!isempt($sm)) {
            $dels .= ',说明:' . $sm . '';
        }
        m('log')->addlogs('删除单据', $dels, 3);
        foreach ($this->wherejoin as $num => $fields) {
            $this->deletebilljoin($num, "`$fields`='$this->id'", $sm);
        }
        return 'ok';
    }

    public function deletebilljoin($num, $where, $sm = '')
    {
        $flow = m('flow')->initflow($num);
        $rows = $flow->getall($where);
        foreach ($rows as $k1 => $rs1) {
            $mid = $rs1['id'];
            $flow->loaddata($mid, false);
            $flow->deletebill($sm, false);
        }
    }

    public function zuofeibilljoin($num, $where, $sm = '')
    {
        $flow = m('flow')->initflow($num);
        $rows = $flow->getall($where);
        foreach ($rows as $k1 => $rs1) {
            $mid = $rs1['id'];
            $flow->loaddata($mid, false);
            $flow->zuofeibill($sm);
        }
    }

    public function zuofeibill($sm = '')
    {
        $this->addlog(['explain' => $sm, 'name' => '作废', 'status' => 1,]);
        $this->update('`status`=5', $this->id);
        $zfarr = [
            'status'       => 5,
            'nstatus'      => 5,
            'checksm'      => '作废：' . $sm . '',
            'nowcheckid'   => '',
            'nowcheckname' => '',
            'nstatustext'  => '作废',
            'updt'         => $this->rock->now,
        ];
        $this->billmodel->update($zfarr, $this->mwhere);
        $tables = $this->moders['tables'];
        if (!isempt($tables)) {
            $arrse = explode(',', $tables);
            foreach ($arrse as $arrses) {
                m($arrses)->delete('mid=' . $this->id . '');
            }
        }
        $this->flowzuofeibill($sm);
        $this->gettodosend('bozuofei', '', $sm);
        foreach ($this->wherejoin as $num => $fields) {
            $this->zuofeibilljoin($num, "`$fields`='$this->id'", $sm);
        }
        return 'ok';
    }

    public function openxiang()
    {
        $xiangdata = $btndata = [];
        $data      = $this->flowrsreplace($this->rs, 4);
        foreach ($this->fieldsarra as $k => $rs) {
            if ($rs['iszs'] == '1') {
                $xiangdata[] = [
                    'name'   => $rs['name'],
                    'fields' => $rs['fields'],
                    'value'  => $this->rock->repempt(arrvalue($data, $rs['fields']))
                ];
            }
        }
        $barr['xiangdata'] = $xiangdata;
        $btnrows           = $this->db->getrows(
            '[Q]flow_menu', "`setid`='$this->modeid' and `status`=1 and `num` like 'open%'",
            'id,wherestr,name,num,issm,type', '`sort`'
        );
        foreach ($btnrows as $k => $rs) {
            $wherestr = $rs['wherestr'];
            $bo       = false;
            if (isempt($wherestr)) {
                $bo = true;
            } else {
                $ewet = $this->wheremodel->getstrwhere($this->rock->jm->base64decode($wherestr));
                $ewet = str_replace(['{asqom}', '1=2 and'], '', $ewet);
                $tos  = $this->rows("`id`='$this->id' and $ewet");
                if ($tos > 0) {
                    $bo = true;
                }
            }
            if ($bo) {
                $btndata[] = ['id' => $rs['id'], 'name' => $rs['name'], 'issm' => $rs['issm'],];
            }
        }
        $barr['btndata'] = $btndata;
        if (method_exists($this, 'flowopenxiang')) {
            $lbarr = $this->flowopenxiang($data, $xiangdata, $btndata);
            if (is_array($lbarr)) {
                foreach ($lbarr as $k => $v) {
                    $barr[$k] = $v;
                }
            }
        }
        return $barr;
    }

    public function smschuiban($sm = '')
    {
        if ($this->isflow > 0 && $this->adminid == $this->uid) {
            $farr       = $this->getflow(true);
            $nowcheckid = $farr['nowcheckid'];
            $tplnum     = $this->option->getval('sms_cbnum', 'defnum');
            $wxurl      = $this->getxiangurlx();
            $barr       = c('xinhuapi')->sendsms(
                $nowcheckid, '', $tplnum, [
                'modename'  => $this->modename,
                'sericnum'  => $this->sericnum,
                'applyname' => $this->uname,
                'deptname'  => $this->rs['base_deptname'],
            ], $wxurl, false, false
            );
            if (!$barr['success']) {
                return $barr['msg'];
            }
            $this->addlog(['explain' => $sm, 'name' => '短信催办', 'status' => 1,]);
        }
        return 'ok';
    }

    public function addschedule($sm = '')
    {
        $txdt = $this->rock->post('txdt');
        if (isempt($sm)) {
            return '说明不能为空';
        }
        if (isempt($txdt)) {
            return '提醒时间不能为空';
        }
        $barr['title']   = $sm;
        $barr['startdt'] = $txdt;
        $barr['uid']     = $this->adminid;
        $barr['optdt']   = $this->rock->now;
        $barr['optname'] = $this->adminname;
        $barr['txsj']    = 1;
        m('schedule')->insert($barr);
        return 'ok';
    }

    public function getoptmenu($flx = 0)
    {
        $where = '';
        if ($flx == 1) {
            $where = 'and `iszs`=1';
        }
        $rows  = $this->db->getrows(
            '[Q]flow_menu', "`setid`='$this->modeid' " . $where . " and `status`=1",
            'id,wherestr,name,statuscolor,statusvalue,num,islog,issm,type,upgcont', '`sort`'
        );
        $arr   = [];
        $bfrom = $this->rock->post('bfrom');
        $arr[] = [
            'lx'        => 0,
            'name'      => $this->rock->jm->base64decode('5pyq562!5o6I5peg5rOV5pi!56S66I!c5Y2V'),
            'optmenuid' => 0,
            'color'     => 'red'
        ];
        if ($flx == 1) {
            return $arr;
        }
        $status   = (int)arrvalue($this->rs, 'status', '0');
        $isturn   = (int)arrvalue($this->rs, 'isturn', '0');
        $ismy     = ($this->uid == $this->adminid or $this->optid == $this->adminid);
        $isreadbo = $this->isreadqx(1);
        if ($this->isflow > 0 && $isturn == 1) {
        }
        if ($status != 5 && arrvalue($this->moders, 'ispl', '1') == '1' && $isreadbo) {
            $arr[] = ['name' => '评论', 'lx' => 15, 'nup' => 1, 'issm' => 1, 'optmenuid' => -15];
        }
        if ($ismy && arrvalue($this->moders, 'ishz') == '1' && $status == 1) {
            $smcont = $this->getsummary();
            $mid    = (int)m('receipt')->getmou(
                'id', "`uid`='$this->adminid' and `modenum`='$this->modenum' and `mid`='$this->id'"
            );
            $namess = '回执确认设置';
            if ($mid > 0) {
                $namess = '回执确认编辑';
            }
            $arr[] = [
                'name'      => $namess,
                'djmid'     => $mid,
                'optnum'    => 'receipt',
                'lx'        => '18',
                'optmenuid' => -18,
                'modename'  => $this->modename,
                'smcont'    => $smcont
            ];
        }
        if ($isreadbo && arrvalue($this->moders, 'istxset', '1') == '1' && $this->modenum != 'remind' && !in_array(
                $status, [2, 5]
            )) {
            $smcont = '' . $this->modename . '：' . $this->getsummary();
            $mid    = (int)m('remind')->getmou(
                'id', "`uid`='$this->adminid' and `modenum`='$this->modenum' and `mid`='$this->id'"
            );
            $namess = '＋添加提醒设置';
            if ($mid > 0) {
                $namess = '提醒设置编辑';
            }
            $arr[] = [
                'name'      => $namess,
                'djmid'     => $mid,
                'smcont'    => $smcont,
                'issm'      => 1,
                'optnum'    => 'tixing',
                'lx'        => '14',
                'optmenuid' => -14
            ];
        }
        if ($this->iseditqx() == 1 && $isreadbo) {
            $arr[] = ['name' => '编辑', 'optnum' => 'edit', 'lx' => '11', 'optmenuid' => -11];
        }
        if ($this->isdeleteqx() == 1) {
            $arr[] = [
                'name'        => '删除',
                'color'       => 'red',
                'optnum'      => 'del',
                'nup'         => 1,
                'issm'        => 0,
                'islog'       => 0,
                'statusvalue' => 9,
                'lx'          => '9',
                'optmenuid'   => -9
            ];
        }
        return $arr;
    }

    public function optmenu($czid, $zt, $sm = '')
    {
        $msg     = '';
        $cname   = $this->rock->post('changename');
        $cnameid = $this->rock->post('changenameid');
        $cdate   = $this->rock->post('changedate');
        $darr    = ['cname' => $cname, 'cnameid' => $cnameid, 'cdate' => $cdate, 'sm' => $sm,];
        if ($czid == -9) {
            $msg = $this->deletebill($sm);
        } else {
            if ($czid == -10) {
                $msg = $this->check($zt, $sm);
                if (contain($msg, '成功')) {
                    $msg = 'ok';
                }
            } else {
                if ($czid == -12) {
                    $this->zhuijiaexplain($sm);
                } else {
                    if ($czid == -13) {
                        $this->chuiban($sm);
                    } else {
                        if ($czid == -14) {
                            $msg = $this->addschedule($sm);
                        } else {
                            if ($czid == -15) {
                                $actname = $this->rock->post('name');
                                $this->addlog(['explain' => $sm, 'name' => $actname,]);
                                $uids = arrvalue($this->rs, 'uid', '0');
                                if (isset($this->rs['optid'])) {
                                    $uids .= ',' . $this->rs['optid'] . '';
                                }
                                $this->nexttodo($uids, 'pinglun', $sm, $actname);
                                $this->gettodosend('boping', '', $sm);
                            } else {
                                if ($czid == -16) {
                                    $this->zuofeibill($sm);
                                } else {
                                    if ($czid == -17) {
                                        $msg = $this->smschuiban($sm);
                                    } else {
                                        if ($czid == -18) {
                                            $msg = $this->jiankongzb($darr);
                                        } else {
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        if ($msg == '') {
            $msg = 'ok';
        }
        return $msg;
    }

    public function jiankongzb($darr)
    {
        return $this->bd6('5peg5L!h5ZG8562!5o6I5peg5q2k5Yqf6IO9');
    }

    public function billwhere($uid, $lx)
    {
        $arr['table']        = $this->mtable;
        $arr['tableleft']    = '';
        $arr['fields']       = '';
        $arr['order']        = '';
        $arr['group']        = '';
        $arr['keywhere']     = '';
        $arr['asqom']        = '';
        $arr['onlywhere']    = '';
        $arr['companywhere'] = '';
        $this->atype         = $lx;
        $nas                 = $this->flowbillwhere($uid, $lx);
        $inwhere             = '';
        if (substr($lx, 0, 5) == 'grant') {
            $inwhere = $this->viewmodel->viewwhere($this->moders, $this->adminid, $this->flowviewufieds, 1);
        }
        if ($lx == 'chaos') {
            $inwhere = "and {asqom}`id` in(select `mid` from `[Q]flow_chao` where `table`='{$this->mtable}' and " . $this->rock->dbinstr(
                    'csnameid', $this->adminid
                ) . ")";
        }
        if ($lx == 'mychuli') {
            $inwhere = "and {asqom}`id` in(select bill.`mid` from `[Q]flow_bill` as `bill` where bill.`modeid`='{$this->modeid}' and " . $this->rock->dbinstr(
                    'bill.`allcheckid`', $this->adminid
                ) . ")";
        }
        $_wehs = '';
        if (is_array($nas)) {
            if (isset($nas['where'])) {
                $_wehs = $nas['where'];
            }
            $ftears = explode(
                ',', 'asqom,order,fields,fieldsleft,table,group,companywhere,onlywhere,keywhere,tableleft'
            );
            foreach ($ftears as $fid) {
                if (isset($nas[$fid])) {
                    $arr[$fid] = $nas[$fid];
                }
            }
        } else {
            $_wehs = $nas;
        }
        $fwhere = $this->getflowwhere($uid, $lx);
        $path   = '' . P . '/flow/page/rock_page_' . $this->modenum . '.php';
        $table  = $arr['table'];
        $temsao = 0;
        if (!contain($table, ' ') && $this->isflow > 0) {
            $arr['table'] = '`[Q]' . $this->mtable . '` a left join `[Q]flow_bill` b on a.`id`=b.`mid` and b.`table`=\'' . $this->mtable . '\'';
            if (!isempt($arr['tableleft'])) {
                $arr['table'] .= ' left join ' . $arr['tableleft'] . '';
            }
            $arr['asqom']  = 'a.';
            $arr['fields'] = 'a.*,b.`uname` as base_name,b.`udeptname` as base_deptname,b.`sericnum`,b.`nowcheckname`';
            if (isset($arr['fieldsleft']) && $arr['fieldsleft']) {
                $arr['fields'] .= ',' . $arr['fieldsleft'] . '';
            }
            if ($arr['order'] == '') {
                $arr['order'] = 'a.`optdt` desc';
            }
            $temsao = 1;
            if ($this->defaultorder) {
                $defa         = explode(',', $this->defaultorder);
                $desc         = arrvalue($defa, 1, 'desc');
                $arr['order'] = 'a.`' . $defa[0] . '` ' . $desc . '';
            }
        }
        if (isempt($arr['order'])) {
            $arr['order'] = '{asqom}`id` desc';
            if ($this->defaultorder) {
                $defa         = explode(',', $this->defaultorder);
                $desc         = arrvalue($defa, 1, 'desc');
                $arr['order'] = '{asqom}`' . $defa[0] . '` ' . $desc . '';
            }
        }
        if (isempt($fwhere) && isempt($inwhere) && $this->moders['isscl'] == 1) {
            $fwhere = 'and 1=2';
        }
        $where    = $inwhere;
        $wherestr = $this->moders['where'];
        if (!isempt($wherestr)) {
            $wherestr = $this->rock->covexec($wherestr);
            $where    .= ' and {asqom}' . $wherestr;
        }
        if ($fwhere != '') {
            $where .= ' ' . $fwhere;
        }
        if ($_wehs != '') {
            $where .= ' ' . $_wehs;
        }
        $highwhere = $this->gethighwhere();
        $allfields = [];
        $key       = $this->rock->post('key');
        $pnum      = $this->rock->post('pnum');
        $status    = $this->rock->post('keystatus');
        $ztfields  = arrvalue($nas, 'ztfields', 'status');
        $xhlikea   = ['like', '=', '>=', '<=', 'not like'];
        $xhfields  = $this->rock->post('xhfields');
        $xhlike    = (int)$this->rock->post('xhlike', '0');
        $xhkeygj   = $this->rock->jm->base64decode($this->rock->post('xhkeygj'));
        if (!isempt($xhkeygj) && $xhfields) {
            if (substr($xhfields, 0, 2) == 'zb') {
                $xu       = substr($xhfields, 2, 1);
                $zbasr    = explode(',', $this->moders['tables']);
                $zbts     = arrvalue($zbasr, $xu);
                $xhfields = substr($xhfields, 4);
                $wher1    = "`$xhfields` " . $xhlikea[$xhlike] . "";
                if ($xhlike == 0 || $xhlike == 4) {
                    $wher1 .= " '%" . $xhkeygj . "%'";
                }
                if ($xhlike == 1 || $xhlike == 2 || $xhlike == 3) {
                    $wher1 .= " '$xhkeygj'";
                }
                $wher1 = " and {asqom}`id` in(select `mid` from `[Q]" . $zbts . "` where " . $wher1 . ")";
                $where .= $wher1;
            } else {
                $wher1 = " and {asqom}`$xhfields` " . $xhlikea[$xhlike] . "";
                if ($xhlike == 0 || $xhlike == 4) {
                    $wher1 .= " '%" . $xhkeygj . "%'";
                }
                if ($xhlike == 1 || $xhlike == 2 || $xhlike == 3) {
                    $wher1 .= " '$xhkeygj'";
                }
                $where .= $wher1;
            }
        }
        if (!isempt($status)) {
            $where .= ' and {asqom}`' . $ztfields . '`=' . $status . '';
        }
        if (!isempt($key) && isempt($arr['keywhere'])) {
            $check     = c('check');
            $allfields = $this->db->getallfields('[Q]' . $this->mtable . '');
            $_kearr    = [];
            if ($check->isdate($key) || $check->ismonth($key)) {
                $skeay = ['date', 'datetime', 'month'];
                foreach ($this->fieldsarra as $k => $rs) {
                    $flx = $rs['fieldstype'];
                    $fid = $rs['fields'];
                    if ($rs['issou'] == 1 && in_array($flx, $skeay) && in_array($fid, $allfields)) {
                        if ($check->isdate($key)) {
                            if ($flx == 'date') {
                                $_kearr[] = "{asqom}`" . $fid . "`='$key'";
                            }
                            if ($flx == 'datetime') {
                                $_kearr[] = "{asqom}`" . $fid . "` like '$key%'";
                            }
                            if ($flx == 'month') {
                                $_kearr[] = "{asqom}`" . $fid . "`='" . substr($key, 0, 7) . "'";
                            }
                            if ($temsao == 1) {
                                $_kearr[] = "b.`applydt`='$key'";
                            }
                        }
                        if ($check->ismonth($key)) {
                            if ($flx == 'month') {
                                $_kearr[] = "{asqom}`" . $fid . "`='$key'";
                            } else {
                                $_kearr[] = "{asqom}`" . $fid . "` like '$key%'";
                            }
                            if ($temsao == 1) {
                                $_kearr[] = "b.`applydt` like '$key%'";
                            }
                        }
                    }
                }
            }
            if (!$_kearr) {
                $skeay = [
                    'text',
                    'textarea',
                    'htmlediter',
                    'changeuser',
                    'changeusercheck',
                    'changedept',
                    'changedeptusercheck',
                    'selectdatafalse',
                    'selectdatatrue',
                    'num'
                ];
                $xiakk = ['rockcombo', 'select'];
                foreach ($this->fieldsarra as $k => $rs) {
                    if ($rs['issou'] == 1 && in_array($rs['fields'], $allfields) && substr($rs['fields'], -2) != 'dt') {
                        if (in_array($rs['fieldstype'], $skeay)) {
                            $_kearr[] = "{asqom}`" . $rs['fields'] . "` like '%" . $key . "%'";
                        }
                    }
                }
                if ($temsao == 1) {
                    $_kearr[] = "b.`uname` like '%" . $key . "%'";
                    $_kearr[] = "b.`udeptname` like '%" . $key . "%'";
                    $_kearr[] = "b.`sericnum` = '$key'";
                    $_kearr[] = "b.`nowcheckname` = '$key'";
                }
                if (isset($nas['orlikefields'])) {
                    $owhee = explode(',', $nas['orlikefields']);
                    foreach ($owhee as $owhees) {
                        $_owhees = explode('@', $owhees);
                        $sle     = arrvalue($_owhees, 1);
                        if ($sle == '1') {
                            $_kearr[] = "" . $_owhees[0] . " ='$key'";
                        } else {
                            $_kearr[] = "" . $_owhees[0] . " like '%" . $key . "%'";
                        }
                    }
                }
            }
            if ($_kearr && $arr['onlywhere'] == '') {
                $arr['keywhere'] = "and (" . join(' or ', $_kearr) . ")";
            }
        }
        if (!isempt($arr['companywhere']) && getconfig('companymode')) {
            $where .= ' ' . $arr['companywhere'];
        }
        if (!isempt($arr['onlywhere'])) {
            $where .= ' ' . $arr['onlywhere'];
        }
        if (!isempt($arr['keywhere'])) {
            $where .= ' ' . $arr['keywhere'];
        }
        if ($highwhere != '') {
            $where .= ' ' . $highwhere;
        }
        $where        = str_replace('{asqom}', $arr['asqom'], $where);
        $arr['order'] = str_replace('{asqom}', $arr['asqom'], $arr['order']);
        $where        = str_replace('[A]', $arr['asqom'], $where);
        $fields       = $arr['fields'];
        if ($this->flowfieldstype == 1 && (isempt($fields) || $fields == '*') && $this->moders['isscl'] == 1) {
            if (!$allfields) {
                $allfields = $this->db->getallfields('[Q]' . $this->mtable . '');
            }
            $fields = '{asqom}`id`';
            $odlvs  = $this->option->getval('columns_' . $this->modenum . '_' . $pnum . '');
            if (isempt($odlvs)) {
                foreach ($this->fieldsarra as $k => $rs) {
                    if ($rs['islb'] == 1 && in_array($rs['fields'], $allfields)) {
                        $fields .= ',{asqom}`' . $rs['fields'] . '`';
                    }
                }
            } else {
                $odlvsa = explode(',', $odlvs);
                foreach ($odlvsa as $odlvs1) {
                    if (in_array($odlvs1, $allfields)) {
                        $fields .= ',{asqom}`' . $odlvs1 . '`';
                    }
                }
            }
            if ($this->isflow > 0) {
                if (!contain($fields, '`status`')) {
                    $fields .= ',{asqom}`status`';
                }
            }
            $fields        = str_replace('{asqom}', $arr['asqom'], $fields);
            $arr['fields'] = $fields;
        }
        $fields = $arr['fields'];
        if (!isempt($fields) && $fields != '*') {
            $fieldsa = explode(',', $fields);
            $fieldss = '';
            foreach ($fieldsa as $fieldsas) {
                if (contain($fieldsas, '`') || contain($fieldsas, '.') || contain($fieldsas, ' ') || contain(
                        $fieldsas, '('
                    )) {
                    $fieldss .= ',' . $fieldsas . '';
                } else {
                    $fieldss .= ',`' . $fieldsas . '`';
                }
            }
            $arr['fields'] = substr($fieldss, 1);
        }
        $arr['where'] = str_replace('{asqom}', '', $where);
        return $arr;
    }

    public function gethighwhere()
    {
        $s = '';
        return $s;
    }

    public function getflowwhere($uid, $num)
    {
        $where = '';
        $rs    = $this->wheremodel->getone("`setid`='$this->modeid' and `num`='$num'");
        if (!$rs) {
            return $where;
        }
        $where = $this->wheremodel->getwherestr($rs, $uid, $this->flowviewufieds);
        return $where;
    }

    public function getflowrows($uid, $lx, $limit = 5, $swher = '')
    {
        $nas   = $this->billwhere($uid, $lx);
        $table = $nas['table'];
        if (!contain($table, ' ')) {
            $table = '[Q]' . $table . '';
        }
        if (isempt($nas['fields'])) {
            $nas['fields'] = '*';
        }
        $swher = str_replace('{asqom}', $nas['asqom'], $swher);
        $where = '1=1 ' . $nas['where'] . ' ' . $swher . '';
        if ($limit == 0) {
            return $this->db->rows($table, $where);
        }
        $rows = $this->db->getrows($table, $where, $nas['fields'], $nas['order'], $limit);
        foreach ($rows as $k => $rs) {
            $rows[$k] = $this->flowrsreplace($rs, 2);
        }
        return $rows;
    }

    public function gettodorows($whereid)
    {
        $where    = $this->wheremodel->getwherestr($whereid, $this->adminid, $this->flowviewufieds);
        $wherestr = $this->moders['where'];
        if (!isempt($wherestr)) {
            $wherestr = $this->rock->covexec($wherestr);
            $where    .= ' and ' . $wherestr;
        }
        $where = str_replace('{asqom}', '', $where);
        $rows  = $this->getall('2=2 ' . $where . '');
        foreach ($rows as $k => $rs) {
            $rows[$k] = $this->flowrsreplace($rs, 1);
        }
        return $rows;
    }

    public function printexecl($event)
    {
        $arr['moders'] = $this->moders;
        $arr['fields'] = $this->getfields();
        $cell          = 1;
        foreach ($arr['fields'] as $k => $v) {
            $cell++;
        }
        $arr['cell'] = $cell;
        $where       = '1=1';
        $str1        = $this->moders['where'];
        if (!isempt($str1)) {
            $str1  = $this->rock->covexec($str1);
            $where = $str1;
        }
        $vwhere       = $this->viewmodel->viewwhere($this->moders, $this->adminid);
        $rows         = $this->getrows('' . $where . ' ' . $vwhere . '', '*', 'id desc', 100);
        $arr['rows']  = $this->flowprintrows($rows);
        $arr['count'] = $this->db->count;
        return $arr;
    }

    public function getsuballdata($lx = 0, $mid = 0)
    {
        $tabless = $this->moders['tables'];
        $subdata = [];
        if ($mid == 0) {
            $mid = $this->id;
        }
        if (!isempt($tabless)) {
            $tablessa = explode(',', $tabless);
            $namessa  = explode(',', $this->moders['names']);
            $tabless1 = '[' . str_replace(',', '],[', $tabless) . ']';
            foreach ($tablessa as $zbx => $tables) {
                $cis  = substr_count($tabless1, '[' . $tables . ']');
                $whes = '';
                if ($cis > 1) {
                    $whes = ' and `sslx`=' . $zbx . '';
                }
                $data = m($tables)->getall('mid=' . $mid . '' . $whes . '', '*', '`sort`');
                $data = $this->flowsubdata($data, $lx, $zbx);
                if ($lx == 0) {
                    $subdata['subdata' . $zbx . ''] = $data;
                } else {
                    $subdata[$zbx] = [
                        'data'   => $data,
                        'fields' => 'subdata' . $zbx . '',
                        'name'   => $this->rock->arrvalue($namessa, $zbx)
                    ];
                }
            }
        }
        return $subdata;
    }

    private $gettodolistarr = null;

    public function gettodolist($act)
    {
        if (is_array($act)) {
            return $act;
        }
        if ($this->gettodolistarr === null) {
            $rows = $this->todomodel->getrows("`setid`='" . $this->modeid . "' and `status`=1");
            $barr = [];
            foreach ($rows as $k => $rs) {
                $whereid = (int)$rs['whereid'];
                if ($whereid > 0) {
                    $bo = $this->wheremanzhu($whereid);
                    if (!$bo) {
                        continue;
                    }
                }
                $barr[] = $rs;
            }
            $this->gettodolistarr = $barr;
        } else {
            $barr = $this->gettodolistarr;
        }
        $garr = [];
        if ($barr) {
            foreach ($barr as $k => $rs) {
                if (arrvalue($rs, $act) == '1') {
                    $garr[] = $rs;
                }
            }
        }
        return $garr;
    }

    public function gettodosend($act, $actname = '', $sm = '', $courseid = 0, $conts = '')
    {
        $barr = $this->gettodolist($act);
        if (!$barr) {
            return;
        }
        $changearr = [
            'boturn'   => '提交',
            'boedit'   => '编辑',
            'bozhuan'  => '转办',
            'bochang'  => '修改字段',
            'bodel'    => '删除',
            'bozuofei' => '作废',
            'botong'   => '处理同意',
            'bobutong' => '处理不同意',
            'bofinish' => '全部处理完成',
            'bozhui'   => '追加说明',
            'boping'   => '评论',
            'bohuiz'   => '回执确认'
        ];
        if ($actname == '' && is_string($act)) {
            $actname = arrvalue($changearr, $act);
        }
        if (isempt($actname)) {
            return;
        }
        $cheo = c('check');
        foreach ($barr as $k => $rs) {
            $receid = $rs['receid'];
            if ($act == 'botong' || $act == 'bobutong') {
                $changewe = $rs['changecourse'];
                if (!isempt($changewe) && !contain(',' . $changewe . ',', ',' . $courseid . ',')) {
                    continue;
                }
            }
            if ($rs['toturn'] == 1) {
                $receid .= ',' . $this->uid . '';
            }
            if (arrvalue($rs, 'tosuper') == '1') {
                $supar = $this->adminmodel->getsuperman($this->uid);
                $shnej = arrvalue($supar, 0);
                if (!isempt($shnej)) {
                    $receid .= ',' . $shnej . '';
                }
            }
            if ($rs['tocourse'] == 1 && $this->billrs) {
                $allcheckid = $this->billrs['allcheckid'];
                if (!isempt($allcheckid)) {
                    $receid .= ',' . $allcheckid . '';
                }
            }
            $todofields = $rs['todofields'];
            if (!isempt($todofields)) {
                $toad = explode(',', $todofields);
                foreach ($toad as $toads) {
                    $ttv = arrvalue($this->rs, $toads);
                    if (!isempt($ttv) && $cheo->isinnumber($ttv)) {
                        $receid .= ',' . $ttv . '';
                    }
                }
            }
            if (isempt($receid)) {
                continue;
            }
            if (substr($receid, 0, 1) == ',') {
                $receid = substr($receid, 1);
            }
            $cont = $rs['summary'];
            if (isempt($cont)) {
                $cont = $conts;
            }
            if (isempt($cont)) {
                $cont = '' . $this->adminname . '' . $actname . '[' . $this->modename . ',单号:' . $this->sericnum . ']';
                if ($sm != '') {
                    $cont .= ',说明:' . $sm . '';
                }
            }
            $this->push($receid, '', $cont, $this->rock->repempt($rs['name']));
        }
    }

    public function numtodosend($num, $actname = '', $sm = '')
    {
        $rows = $this->todomodel->getrows("`setid`='" . $this->modeid . "' and `num`='$num' and `status`=1");
        if (!$rows) {
            return;
        }
        $this->gettodosend($rows, $actname, $sm);
    }

    public function flowtotal($fields = '', $type = '')
    {
        if ($fields == '') {
            $fields = $this->rock->post('total_fields');
        }
        if ($type == '') {
            $type = $this->rock->post('total_type', 'jls');
        }
        $typea      = explode('|', $type);
        $typefields = '';
        $type       = $typea[0];
        $typefields = arrvalue($typea, 1);
        $rowa       = [];
        $rowa[]     = ['name' => '暂无数据', 'value' => 0, 'bili' => ''];
        $tofiels    = 'count(1)';
        if ($type == 'sum') {
            $tofiels = 'sum([A]`' . $typefields . '`)';
        }
        if ($type == 'avg') {
            $tofiels = 'avg([A]`' . $typefields . '`)';
        }
        $atype = $this->rock->post('atype');
        $table = '[Q]' . $this->mtable . '';
        $narr  = $this->billwhere($this->adminid, $atype);
        $where = $narr['where'];
        $table = $narr['table'];
        if (!contain($table, ' ')) {
            $table = '[Q]' . $table . '';
        }
        $gwhere = $this->rock->post('where');
        if (!isempt($gwhere)) {
            $gwhere = $this->rock->jm->uncrypt($this->rock->iconvsql($gwhere));
            $where  .= ' ' . $gwhere . '';
        }
        $sql   = 'select ' . $fields . ' as `name`,' . $tofiels . ' as value from ' . $table . ' where 1=1 ' . $where . ' group by ' . $fields . '';
        $sql   = str_replace('[A]', $narr['asqom'], $sql);
        $rows  = $this->db->getall($sql);
        $total = 0;
        if ($rows) {
            foreach ($rows as $k => $rs) {
                $total += floatval($rs['value']);
            }
            if ($total > 0) {
                foreach ($rows as $k => $rs) {
                    $rows[$k]['bili'] = $this->rock->number($rs['value'] * 100 / $total) . '%';
                }
            }
            if ($type != 'avg' && count($rows) > 1) {
                $rows[] = ['name' => '合计', 'value' => $total, 'bili' => ''];
            }
        } else {
            $rows = $rowa;
        }
        return $rows;
    }

    public function receiptcheck($hid, $sm)
    {
        return 'ok';
    }

    public function getrowstable($atype, $where, $limit = 100)
    {
        $rows    = $this->getflowrows($this->adminid, $atype, $limit, $where);
        $headstr = '@xuhaos,,center';
        foreach ($this->fieldsarra as $k => $rs) {
            if ($rs['islb'] == 1 && $rs['iszb'] == '0') {
                $headstr .= '@' . $rs['fields'] . ',' . $rs['name'] . '';
            }
        }
        if ($this->isflow > 0) {
            $headstr .= '@statustext,状态';
            if (is_array($rows)) {
                foreach ($rows as $k => $rs) {
                    $rows[$k]['statustext'] = $this->getstatusstr($rs);
                }
            }
        }
        $cont = c('html')->createrows($rows, substr($headstr, 1), '#cccccc', 'noborder');
        return $cont;
    }

    public function viewjinfields($rows)
    {
        if (!$rows) {
            return $rows;
        }
        return $rows;
    }

    public function daochusubtable($rows)
    {
        return $rows;
    }
}