| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531 | <?php//ini_set('display_errors', on);Doo::loadClass('auth');Doo::loadClass('attfile');Doo::loadClass('profile');Doo::loadClass('project');Doo::loadClass('contractact');Doo::loadClass('actmeasure');Doo::loadClass('numofperact');Doo::loadClass('measureauditact');Doo::loadClass('sign');Doo::loadClass('sms');Doo::loadClass('change');Doo::loadModelAt('aconfig', 'admin');Doo::loadClass('Hashids/Hashids');/* * proDetail * MainController * Feel free to delete the methods and replace them with your own code. * * @author darkredz */class ChangeController extends DooController{    private $aconfig, $data, $sms, $sign, $change, $auth, $attfile, $profile, $project, $contractact, $actmeasure, $measureauditact, $numofperact, $__hashids, $statusArray = array('uncheck' => '<span class = "colGray">未审批</span>', 'checking' => '<span class = "colOrange">审批中</span>', 'checked' => '<span class = "colGreen">审批通过</span>', 'checkno' => '<span class = "colRed">审批不通过</span>');    private $changeType = array('1' => 'A.位置', '2' => 'B.数量', '3' => 'C.结构', '4' => 'D.新增', '5' => 'E.取消', '6' => 'F.纠错');    private $changeCategory = array('1' => 'A类变更(设计变更)', '2' => 'B类变更(施工措施变更)', '3' => 'C类变更(计划变更)', '4' => 'D类变更(条件变更)', '5' => 'E类变更(新增工程)');    private $changeNature = array('1' => '一般设计变更', '2' => '较大设计变更', '3' => '重大设计变更');    private $changeStatus = array('2' => 'uncheck', '3' => 'checking', '4' => 'checked', '5' => 'checkno');    private $changeUnit = array('m','km','m2','m3','kg','t','m3·km','总额','月','项','处','个','根','棵','块','每一试桩','桥长米','公路公里','株','组','座','元','工日','套','台班','艘班','m/处','m/道','m/座','m2/m','m3/m','m3/处','根/米','亩','m3/m2');    public function beforeRun($resource, $action)    {        if ($this->auth->getUid()) {            $uGroups = $this->profile->getProWithUid($this->auth->getUid());            $falg = Doo::acl()->isAllowed($uGroups['groups'], $resource, $action);            if (!$falg)                return Doo::acl()->defaultFailedRoute;        } else {            return Doo::acl()->defaultFailedRoute;        }    }    public function __construct()    {        $this->aconfig = new AConfig();        $this->auth = new Auth();        $this->attfile = new attFile();        $this->profile = new Profile();        $this->project = new Project();        $this->contractact = new Contractact();        $this->actmeasure = new actMeasure();        $this->numofperact = new NumofperAct();        $this->measureauditact = new MeasureauditAct();        $this->sign = new Signn();        $this->change = new Changes();        $this->sms = new Sms(Doo::conf()->SMS_URL, Doo::conf()->SMS_ACCOUNT, DOO::conf()->SMS_PASSWORD, DOO::conf()->SMS_EXTNO);        $this->__hashids = new Hashids\Hashids('jlzffileid', 8);        $this->data['rootUrl'] = Doo::conf()->APP_URL;        $this->data['currChannle'] = 'change';        $this->data['user'] = $this->profile->getProWithUid($this->auth->getUid());        $mpidArray = $this->measureauditact->getAuditProject2($this->auth->getUid());        $this->data['numofchecking'] = 0;        if (isset($mpidArray[0]['pid'])) {            foreach ($mpidArray as $key => $value) {                // 审批操作按照时间排序多标段                $this->data['numofchecking'] += $this->measureauditact->getCountMyChecking($value['pid'], $this->auth->getUid());            }        }        if (!isset($this->data['numofchecking']) || $this->data['numofchecking'] == 0) {            $this->data['numofchecking'] = null;        }        $this->data['signSwitch'] = $this->aconfig->getOne(array('select' => 'signswitch', 'asArray' => TRUE))['signswitch'];        //获取需要您签署的数目        if($this->data['signSwitch'] > 0)            $this->data['needSignNum'] = $this->sign->getNeedSignNumbyUid($this->auth->getUid()) != 0 ? $this->sign->getNeedSignNumbyUid($this->auth->getUid()) : '';        //获取桌面版本        $this->getsoftware();        //草图入口        $this->data['imediateSwitch'] = $this->aconfig->getOne(array('select' => 'imediateswitch', 'asArray' => TRUE))['imediateswitch'];        //获取需要你审批的变更令数目        $this->data['needChangeNum'] = $this->change->getNeedChangeNumbyUid($this->auth->getUid()) != 0 ? $this->change->getNeedChangeNumbyUid($this->auth->getUid()) : '';    }    function getsoftware(){        $StrJson = ($this->aconfig->getOne(array('select' => 'upgradeinfo', 'asArray' => TRUE))['upgradeinfo']);        $upgradeinfo = json_decode($StrJson, true);        if ($upgradeinfo) {            $this->data['version'] = $upgradeinfo['version'];            $this->data['download'] = $upgradeinfo['download'];        }    }    /**     *     * @return type     */    public function index()    {        //获取 项目-标段类型-标段 的树结构, 包含个人对应的原报,审批和变更令审批人专属树结构        $sectionlist = array();        $hashArray = array();        //先取原报人标段        $mpidArray = $this->actmeasure->getRowUser($this->auth->getUid());        if(!empty($mpidArray)){            foreach($mpidArray as $k => $v){                $sectionlist[] = array('pid' => $v['pid'], 'stid' => $v['stid'], 'pmid' => $v['pmid']);                $hashArray[] = md5($v['pmid']);            }        }        //再取审批表标段//        $mpidArray2 = $this->measureauditact->getPmidGroup($this->auth->getUid());//        if(!empty($mpidArray2)){//            foreach($mpidArray2 as $k2 => $v2){//                $hashstr = md5($v2['pmid']);//                if(!in_array($hashstr,$hashArray)){//                    $sectionlist[] = array('pid' => $v2['pid'], 'stid' => $v2['stid'], 'pmid' => $v2['pmid']);//                    $hashArray[] = md5($v2['pmid']);//                }//            }//        }        //最后取变更令审批人所属的标段        $mpidArray3 = $this->change->getPmidGroup($this->auth->getUid());        if(!empty($mpidArray3)){            foreach($mpidArray3 as $k3 => $v3){                $hashstr = md5($v3['pmid']);                if(!in_array($hashstr,$hashArray)){                    $sectionlist[] = array('pid' => $v3['pid'], 'stid' => $v3['stid'], 'pmid' => $v3['pmid']);                    $hashArray[] = md5($v3['pmid']);                }            }        }        //算法 ---> 把一个二维数组按内容转换成一个三维数组        $prolist = array();        if(!empty($sectionlist)){            $newlist = array();            $i = 0;            foreach($sectionlist as $key => $value){                $j = 0;                $newkey = $value['pid'];                $newst = $value['stid'];                $newpm = $value['pmid'];                if(!isset($newlist[$newkey])){                    $newlist[$newkey]['i'] = $i;                    $prolist[$i]['open'] = 0;                    $prolist[$i]['pid'] = $newkey;                    $prolist[$i]['pname'] = $this->project->getRowByPid($newkey)['pname'];                    $prolist[$i]['stlist'] = array();                    $newlist[$newkey]['st'][$newst]['j'] = $j;                    $newlist[$newkey]['stnum'] = $j;                    $prolist[$i]['stlist'][$j]['open'] = 0;                    $prolist[$i]['stlist'][$j]['stid'] = $newst;                    $prolist[$i]['stlist'][$j]['stname'] = $this->contractact->getRowByStid($newst)['stname'];                    $prolist[$i]['stlist'][$j]['pmlist'] = array();                    array_push($prolist[$i]['stlist'][$j]['pmlist'],array('open' => 0, 'pmid' => $newpm, 'pmname' => $this->actmeasure->getRowByPmid($newpm)['pmname']));                    $i++;                }else{                    $i2 = $newlist[$newkey]['i'];                    if(!isset($newlist[$newkey]['st'][$newst])){                        $newlist[$newkey]['st'][$newst]['j'] = $newlist[$newkey]['stnum']+1;                        $j = $newlist[$newkey]['st'][$newst]['j'];                        $newlist[$newkey]['stnum']++;                        $prolist[$i2]['stlist'][$j]['stid'] = $newst;                        $prolist[$i2]['stlist'][$j]['stname'] = $this->contractact->getRowByStid($newst)['stname'];                        $prolist[$i2]['stlist'][$j]['pmlist'] = array();                        array_push($prolist[$i2]['stlist'][$j]['pmlist'],array('open' => 0, 'pmid' => $newpm, 'pmname' => $this->actmeasure->getRowByPmid($newpm)['pmname']));                    }else{                        $j2 = $newlist[$newkey]['st'][$newst]['j'];                        array_push($prolist[$i2]['stlist'][$j2]['pmlist'],array('open' => 0, 'pmid' => $newpm, 'pmname' => $this->actmeasure->getRowByPmid($newpm)['pmname']));                    }                }            }        }        //获取需要您审批的签署表cid,pid,stid,pmid信息,并open所有需要审批的节点        $cListmsg = $this->change->getNeedChangeNumbyUid($this->auth->getUid()) != 0 ? $this->change->getNeedChangeAllList($this->auth->getUid()) : '';        $pidArray = $stidArray = $pmidArray = array();        if(!empty($cListmsg)){            foreach($cListmsg as $clk => $clv){                array_push($pidArray,$clv['pid']);                array_push($stidArray,$clv['stid']);                array_push($pmidArray,$clv['pmid']);            }        }        $pmid = isset($this->params['pmid']) ? $this->params['pmid'] : $prolist[0]['stlist'][0]['pmlist'][0]['pmid'];        $pmArray = $this->actmeasure->getRowByPmid($pmid);        if(!empty($pmArray)){            foreach($prolist as $pk => $pv){                if($pmArray['pid'] == $pv['pid'] || in_array($pv['pid'], $pidArray)){                    $prolist[$pk]['open'] = $pmArray['pid'] == $pv['pid'] ? 1 : 2;                    foreach($prolist[$pk]['stlist'] as $sk => $sv){                        if($pmArray['stid'] == $sv['stid'] || in_array($sv['stid'], $stidArray)){                            $prolist[$pk]['stlist'][$sk]['open'] = $pmArray['stid'] == $sv['stid'] ? 1 : 2;                            foreach($prolist[$pk]['stlist'][$sk]['pmlist'] as $mk => $mv){                                if($pmArray['pmid'] == $mv['pmid'] || in_array($mv['pmid'], $pmidArray)){                                    $prolist[$pk]['stlist'][$sk]['pmlist'][$mk]['open'] = $pmArray['pmid'] == $mv['pmid'] ? 1 : 2;//                                    break;                                }                            }//                            break;                        }                    }//                    break;                }            }        }        //只有原报人才可以创建变更令和上报变更令        $this->data['userchangepower'] = $this->auth->getUid() == $pmArray['uid'] ? 1 : 0;        $changelist = $this->change->getChangeListbyPmid($pmid);        $this->data['firstuse'] = empty($changelist) ? 1 : 0;        $status = (isset($this->params['status']) && is_numeric($this->params['status']) && $this->params['status'] != 2) || ($this->params['status'] == 2 && $this->auth->getUid() == $pmArray['uid']) ? $this->params['status'] : 1;        $this->data['status'] = $status;        $this->data['pmArray'] = $pmArray;        $this->data['prolist'] = $prolist;        $this->data['num1'] = $this->change->getNumbyMydetail($pmid,$this->auth->getUid());        $this->data['num2'] = $this->change->getNumbystatus($pmid,'uncheck','back');        $this->data['num3'] = $this->change->getNumbystatus($pmid,'checking');        $this->data['num4'] = $this->change->getNumbystatus($pmid,'checked');        $this->data['num5'] = $this->change->getNumbystatus($pmid,'checkno');        //获取列表内容        Doo::loadHelper('DooPager');        $pagestr = '/'.$pmid.'/'.$status;        $totalArchive = $status != 1 ? $this->change->getNumbystatus($pmid,$this->changeStatus[$status]) : $this->change->getNumbyMydetail($pmid,$this->auth->getUid());        $pager = new DooPager(Doo::conf()->APP_URL . 'change/index'.$pagestr.'/page', $totalArchive, 10, 100);        $pager->setCss('', 'disabled', 'active');        if (isset($this->params['pindex']))            $pager->paginate(intval($this->params['pindex']));        else            $pager->paginate(1);        if ($pager->limit != ' -10,10')            $list = $status != 1 ? ($status ==2 ? $this->change->getListbyStatus($pmid,$this->changeStatus[$status], $pager->limit,'back') : $this->change->getListbyStatus($pmid,$this->changeStatus[$status], $pager->limit)) : $this->change->getListbyMydetail($pmid,$this->auth->getUid(), $pager->limit);        if(isset($list) && !empty($list)){            foreach($list as $lk => $lv){                if($status == 3){                    $checkman = $this->change->getOneAuditbystatus($lv['cid'],'checking');                    $list[$lk]['checkman'] = $checkman['name'];//                    $list[$lk]['checkstatus'] = $this->statusArray[$checkman['status']];                }                $list[$lk]['username'] = $this->auth->getRowByUid($lv['uid'])['name'];                $list[$lk]['changeCategory'] = $this->changeCategory[$lv['category']];            }        }        //uid        $this->data['uid'] = $this->auth->getUid();        $this->data['list'] = isset($list) ? $list : '';        $this->data['pager'] = $pager->output;        $this->render('biangeng-poj', $this->data, TRUE);    }    //签约清单    public function dealBills(){        if(isset($this->params['pmid']) && is_numeric($this->params['pmid'])){            $pmid = $this->params['pmid'];            $pmArray = $this->actmeasure->getRowByPmid($pmid);            if(empty($pmArray)){                exit('不存在此标段');            }            $this->data['pmArray'] = $pmArray;            $list = $this->change->getChangeListbyPmid($pmid);            if(!empty($list)){                foreach($list as $k => $v){                    $totalamount = floatval($v['unitprice'])*floatval($v['amount']);                    $list[$k]['totalamount'] = $totalamount;                }            }            $this->data['list'] = $list;            $this->render('biangeng-dealbills', $this->data, TRUE);        }else{            exit('不存在此标段');        }    }    public function changeDetail(){        //获取变更令信息        if(isset($this->params['cid']) && is_numeric($this->params['cid'])) {            $cid = $this->params['cid'];            $changeArray = $this->change->getChangebyid($cid);            if(!empty($changeArray)){                $pmArray = $this->actmeasure->getRowByPmid($changeArray['pmid']);                if(empty($pmArray)){                    exit('不存在此标段');                }                $this->data['pmArray'] = $pmArray;                $ctypelist = array();                if(!empty($changeArray['ctype'])){                    $ctype = explode(',',$changeArray['ctype']);                    foreach($ctype as $tk => $tv){                        $ctypelist[$tk]['typename'] = $this->changeType[$tv];                    }                }                $changeArray['ctypelist'] = $ctypelist;                $changeArray['categoryname'] = $this->changeCategory[$changeArray['category']];                $changeArray['naturename'] = $this->changeNature[$changeArray['cnature']];                $changeArray['companyname'] = $this->change->getCompanybyid($changeArray['companyid'])['name'];                $this->data['changeArray'] = $changeArray;                //获取清单,按清单编号排序                $clist = $this->change->getChangeAuditListbycid($cid);                $ototalnum = 0;                $ctotalnum = 0;                $stotalnum = 0;                if(!empty($clist)){                    foreach($clist as $ck => $cv){                        $osum = floatval($cv['unitprice'])*floatval($cv['oamount']);                        $clist[$ck]['osum'] = $osum;                        $ototalnum += $osum;                        $csum = floatval($cv['unitprice'])*floatval($cv['camount']);                        $clist[$ck]['csum'] = $csum;                        $ctotalnum += $csum;                        if($cv['samount'] != ''){                            $ssum = floatval($cv['unitprice'])*floatval($cv['samount']);                            $clist[$ck]['ssum'] = $ssum;                            $stotalnum += $ssum;                        }else{                            $clist[$ck]['ssum'] = '';                            $clist[$ck]['samount'] = '';                        }                    }                }                include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');                $this->data['ototalnum'] = tofloat($ototalnum);                $this->data['ctotalnum'] = tofloat($ctotalnum);                $this->data['stotalnum'] = $stotalnum != 0 ? tofloat($stotalnum) : '';                $this->data['clist'] = $clist;                //获取附件                $attlist = $this->change->getChangeAttListbycid($cid);                $showattlist = array();                if(!empty($attlist)){                    foreach($attlist as $k => $v){                        //加密下载的id                        $fid = $this->__hashids->encode($v['id']);                        $showattlist[$k]['sort'] = $k+1;                        $showattlist[$k]['downurl'] = '/change/file/download/'.$fid;                        $showattlist[$k]['filename'] = $v['filename'].'.'.$v['fileext'];                        $showattlist[$k]['time'] = date('Y-m-d H:i',$v['intime']);                        $showattlist[$k]['size'] = $this->changefilesize($v['filesize']);                    }                }                $this->data['attlist'] = $showattlist;                //获取审批流程列表                $auditlist = $this->change->getChangeAuditsbySort($cid);                $this->data['auditlist'] = $auditlist;                $this->render('biangeng-detail', $this->data, TRUE);            }        }        exit('参数有误');    }    public function changeNew(){        if(isset($this->params['pmid']) && is_numeric($this->params['pmid'])){            $pmid = $this->params['pmid'];            $pmArray = $this->actmeasure->getRowByPmid($pmid);            if(empty($pmArray)){                exit('不存在此标段');            }            if($this->auth->getUid() != $pmArray['uid']){                exit('不是原报人无法创建变更令');            }            //表单提交            if(isset($_POST['pnum'])){                if(isset($_POST['checking'])){                    if(empty($_POST['pnum']) || !isset($_POST['pname']) || empty($_POST['pname']) || !isset($_POST['mnum']) || empty($_POST['mnum']) || !isset($_POST['description']) || empty($_POST['description']) || !isset($_POST['changeaudit']) || empty($_POST['changeaudit']) || !isset($_POST['changelist']) || !isset($_POST['changewhitelist'])){                        exit('参数缺失或为空');                    }                    if(empty($_POST['changelist']) && empty($_POST['changewhitelist'])){                        exit('变更清单缺失');                    }                }elseif(isset($_POST['uncheck'])){                    if(empty($_POST['pnum']) || !isset($_POST['pname']) || empty($_POST['pname'])){                        exit('参数缺失或为空');                    }                }                //先添加生成变更令                $cid = $this->change->insertChangeMsg($pmArray,$this->auth->getUid(),$_POST);                if($cid){                    //附件添加cid                    if(!empty($_POST['changeatt'])){                        Doo::loadModel('changeatt');                        $attlist = explode(',', $_POST['changeatt']);                        foreach($attlist as $ak => $av){                            $changeAtt = new ChangeAtt();                            $changeAtt->id = $av;                            $changeAtt->cid = $cid;                            $changeAtt->update();                        }                    }                    //审批人添加                    //先添加提交人到audit中                    $site = 0;                    Doo::loadModel('changeaudit');                    $changeaudit2 = new ChangeAudit();                    $userArray2 = $this->auth->getRowByUid($this->auth->getUid());                    $changeaudit2->pid = $pmArray['pid'];                    $changeaudit2->stid = $pmArray['stid'];                    $changeaudit2->pmid = $pmArray['pmid'];                    $changeaudit2->cid = $cid;                    $changeaudit2->times = 0;                    $changeaudit2->usite = $site;                    $changeaudit2->usort = $site;                    $changeaudit2->uid = $this->auth->getUid();                    $changeaudit2->company = $userArray2['company'];                    $changeaudit2->jobs = $userArray2['jobs'];                    $changeaudit2->name = $userArray2['name'];                    $changeaudit2->status = isset($_POST['checking']) ? 'checked' : 'checking';                    $changeaudit2->sintime = isset($_POST['checking']) ? time() : '';                    $changeaudit2->insert();                    $site++;                    $auditArr = array();                    if(!empty($_POST['changeaudit'])){                        $auditlist = explode(',', $_POST['changeaudit']);                        foreach($auditlist as $uk => $uv){                            $userArray = $this->auth->getRowByUid($uv);                            $changeaudit = new ChangeAudit();                            $changeaudit->pid = $pmArray['pid'];                            $changeaudit->stid = $pmArray['stid'];                            $changeaudit->pmid = $pmArray['pmid'];                            $changeaudit->cid = $cid;                            $changeaudit->times = 0;                            $changeaudit->usite = $site;                            $changeaudit->usort = $site;                            $changeaudit->uid = $uv;                            $changeaudit->company = $userArray['company'];                            $changeaudit->jobs = $userArray['jobs'];                            $changeaudit->name = $userArray['name'];                            $changeaudit->status = (isset($_POST['checking']) && $uk == 0) ? 'checking' : 'uncheck';                            $changeaudit->insert();                            $site++;                            array_push($auditArr,array('uid' => $uv, 'ucamount' => ''));                        }                    }                    //清单添加,不分顺序,最终展示按清单编号排序                    Doo::loadModel('changeauditlist');                    $total = 0;                    if(!empty($_POST['changelist'])){                        $clist = explode(',',$_POST['changelist']);                        foreach($clist as $ck => $cv){                            $clistarr = explode('_',$cv);                            if(!empty($clistarr[1]) && is_numeric($clistarr[1])){                                $changelistArr = $this->change->getChangeListbyid($clistarr[0]);                                $total += floatval($changelistArr['unitprice'])*floatval($clistarr[1]);                                $cauditlist = new ChangeAuditList();                                $cauditlist->pid = $pmArray['pid'];                                $cauditlist->stid = $pmArray['stid'];                                $cauditlist->pmid = $pmArray['pmid'];                                $cauditlist->cid = $cid;                                $cauditlist->lid = $clistarr[0];                                $cauditlist->lnum = $changelistArr['lnum'];                                $cauditlist->lname = $changelistArr['lname'];                                $cauditlist->unit = $changelistArr['unit'];                                $cauditlist->unitprice = $changelistArr['unitprice'];                                $cauditlist->oamount = $changelistArr['amount'];                                $cauditlist->camount = $clistarr[1];                                $cauditlist->auditjson = json_encode($auditArr);                                $cauditlist->insert();                            }                        }                    }                    if(!empty($_POST['changewhitelist'])){                        $wlist = explode(',',$_POST['changewhitelist']);                        foreach($wlist as $wk => $wv){                            $wlistarr = explode(';',explode('->',$wv)[1]);                            if(!empty($wlistarr[0]) && !empty($wlistarr[1]) && !empty($wlistarr[3]) && !empty($wlistarr[4]) && !empty($wlistarr[5]) && is_numeric($wlistarr[3]) && is_numeric($wlistarr[4]) && is_numeric($wlistarr[5])){                                $total += floatval($wlistarr[3])*floatval($wlistarr[5]);                                $cauditlist = new ChangeAuditList();                                $cauditlist->pid = $pmArray['pid'];                                $cauditlist->stid = $pmArray['stid'];                                $cauditlist->pmid = $pmArray['pmid'];                                $cauditlist->cid = $cid;                                $cauditlist->lid = 0;                                $cauditlist->lnum = $wlistarr[0];                                $cauditlist->lname = $wlistarr[1];                                $cauditlist->unit = $wlistarr[2];                                $cauditlist->unitprice = $wlistarr[3];                                $cauditlist->oamount = $wlistarr[4];                                $cauditlist->camount = $wlistarr[5];                                $cauditlist->auditjson = json_encode($auditArr);                                $cauditlist->insert();                            }                        }                    }                    //变更令添加变更总金额                    $this->change->updateChangeTotalamount($cid,$total);                    $status = isset($_POST['uncheck']) ? 2 : 3;                    return '/change/index/'.$pmArray['pmid'].'/'.$status;                }else{                    exit('添加到变更令失败');                }            }            $this->data['companylist'] = $this->change->getCompanyList();            $list = $this->change->getChangeListbyPmid($pmid);            if(!empty($list)){                foreach($list as $k => $v){                    $totalamount = floatval($v['unitprice'])*floatval($v['amount']);                    $list[$k]['totalamount'] = $totalamount;                }            }            //获取标段审批人列表            $auditactlist = $this->measureauditact->getUserAuditID($this->params['pmid']);            //获取原报人            $measureArray = $this->actmeasure->getRowByPmid($this->params['pmid']);            $inside = 1;            $userlist = array();            $usernamelist = array();            if(!empty($auditactlist)){                foreach($auditactlist as $k => $v){                    if($measureArray['uid'] == $v['auditoruid']){                        $inside = 0;                    }                    $usermsg = $this->auth->getRowByUid($v['auditoruid']);                    $userlist[$k]['userid'] = $usermsg['userid'];                    $userlist[$k]['name'] = $usermsg['name'];                    $userlist[$k]['jobs'] = $usermsg['jobs'];                    $userlist[$k]['avatar'] = $usermsg['avatar'];                    $userlist[$k]['company'] = $usermsg['company'];                    array_push($usernamelist, $usermsg['name']);                }            }            if($inside){                $usermsg2 = $this->auth->getRowByUid($measureArray['uid']);                $orginArray['userid'] = $measureArray['uid'];                $orginArray['avatar'] = $usermsg2['avatar'];                $orginArray['name'] = $usermsg2['name'];                $orginArray['jobs'] = $usermsg2['jobs'];                $orginArray['company'] = $usermsg2['company'];                array_push($userlist,$orginArray);                array_push($usernamelist, $usermsg2['name']);            }            $this->data['pmArray'] = $pmArray;            $this->data['userlist'] = $userlist;            $this->data['usernamelist'] = implode(',',$usernamelist);            $this->data['userArray'] = $this->auth->getRowByUid($this->auth->getUid());            $this->data['list'] = $list;            $this->data['year'] = date('Y',time());            //获取此标段的最新一个变更令申请编号,没有则赋值为 变更申请编号001            $lastnum = $this->change->getLastChangePnum($this->params['pmid']);            if(!empty($lastnum)){                //正则获取申请编号                $pattern = '/(?!\d{3,6})(\D|\d)|\d{3,6}/i';                preg_match_all($pattern, $lastnum['pnum'],$str);                $arr = $str[0];                $pnum = '';                for($i = 0; $i < count($arr); $i++){                    if(mb_strlen($arr[$i],'UTF8') > 1){                        if($arr[$i] == date('Y',time()) || $arr[$i] == date('Y',strtotime("-1 year"))){                            $pnum .= $arr[$i];                        }else{                            $pnum .= $this->makenum($arr[$i]);                        }                    }else{                        $pnum .= $arr[$i];                    }                }                $this->data['pnum'] = $pnum;            }else{                $this->data['pnum'] = '变更申请编号001';            }            $this->render('biangeng-new', $this->data, TRUE);        }else{            exit('不存在此标段');        }    }    //生成和num相同位数的并加一     001 -》 002, 0023 -》 0024    function makenum($num){        $len = mb_strlen($num,'UTF8');  //获取原位数        $intnum = intval($num)+1;     //获取int        $len2 = mb_strlen($intnum,'UTF8');  //获取int位数        if($len > $len2){            $arr = Array();            for($i = 0; $i < $len-$len2; $i++){                $arr[$i] = '0';            }            $intnum = implode('',$arr).$intnum;        }        return $intnum;    }    public function changeApproval(){        if (isset($this->params['cid']) && is_numeric($this->params['cid'])) {            $cid = $this->params['cid'];            $changeArray = $this->change->getChangebyid($cid);            if (!empty($changeArray)) {                //判断当前变更令是否处于你审批状态,否 则显示详情页                $userchange = $this->change->getOneChangeAudit($this->auth->getUid(), $cid, $changeArray['times']);                if ($changeArray['status'] != 'checking' || empty($userchange) || $userchange['status'] != 'checking') {                    return '/change/detail/' . $cid;                    die;                }                $pmArray = $this->actmeasure->getRowByPmid($changeArray['pmid']);                if (empty($pmArray)) {                    exit('不存在此标段');                }                //审批结果                if(isset($_POST['approval']) && is_numeric($_POST['approval'])){                    $status = $_POST['status'];                    Doo::loadModel('change');                    Doo::loadModel('changeaudit');                    Doo::loadModel('changeauditlist');                    $sintime = time();                    if($status == 'checked'){                        //通过                        $this->change->updateChangeAudit($this->auth->getUid(),$cid, $changeArray['times'], 'checked',$_POST['desc'],$sintime,$_POST['clist']);                        //更新audit_list                        $clist = explode(',',$_POST['clist']);                        $totalamount = 0;                        foreach($clist as $k => $v){                            $lid = explode('_',$v)[0];                            $ucamount = explode('_',$v)[1] != '' ? explode('_',$v)[1] : 0;                            $oneauditlist = $this->change->getOneChangeAuditList($lid);                            $totalamount += floatval($oneauditlist['unitprice'])*floatval($ucamount);                            $auditjson = json_decode($oneauditlist['auditjson'],true);                            foreach($auditjson as $ak => $av){                                if($av['uid'] == $this->auth->getUid()){                                    $auditjson[$ak]['ucamount'] = $ucamount;                                }                            }                            $cauditlist = new ChangeAuditList();                            $cauditlist->id = $lid;                            $cauditlist->samount = $ucamount;                            $cauditlist->auditjson = json_encode($auditjson);                            $cauditlist->update();                        }                        //更新change总金额                        $this->change->updateChangeTotalamount($cid,$totalamount);                        //更改下一个审批状态或结束审批                        $audit = new ChangeAudit();                        $auditlist = $audit->getChangeAuditbylastlist($cid,$changeArray['times']);                        $flag = true;                        foreach($auditlist as $uk => $uv){                            if($uv['status'] == 'uncheck'){                                $changeaudit = new ChangeAudit();                                $changeaudit->id = $uv['id'];                                $changeaudit->status = 'checking';                                $changeaudit->update();                                $flag = false;                                break;                            }                        }                        //审批完成,更改change状态                        if($flag){                            $changes = new Change();                            $changes->cid = $cid;                            $changes->status = 'checked';                            $changes->sintime = $sintime;                            $changes->update();                        }                    }elseif($status == 'back'){                        if(isset($_POST['back']) && $_POST['back'] == 1 && !empty($_POST['lastuid'])){                            //退回到上一个审批人                            $lastuid = $_POST['lastuid'];                            //新增本次审批人,设为未审批并排序加2;                            $auditArray2 = $this->change->getOneChangeAudit($this->auth->getUid(),$cid,$changeArray['times']);                            //改变当前状态                            $this->change->updateChangeAudit($this->auth->getUid(),$cid, $changeArray['times'], 'back',$_POST['desc'],$sintime);                            $changeaudit2 = new ChangeAudit();                            $changeaudit2->insertChangeAudit($auditArray2,'uncheck',$auditArray2['usort']+2);                            //新增上一个审批人,设为审批中并排序加1;                            $changeaudit = new ChangeAudit();                            $auditArray = $changeaudit->getOneChangeAudit($lastuid,$cid,$changeArray['times']);                            $changeaudit->insertChangeAudit($auditArray,'checking',$auditArray2['usort']+1);                            //把接下未审批的审批人排序都加2                            $changeaudit3 = new ChangeAudit();                            $auditlist = $changeaudit3->getChangeAuditsbycidtimeWithout($cid,$changeArray['times'],$lastuid,$this->auth->getUid());                            if(!empty($auditlist)){                                foreach($auditlist as $ak => $av){                                    $changeaudit4 = new ChangeAudit();                                    $changeaudit4->id = $av['id'];                                    $changeaudit4->usort = $av['usort']+2;                                    $changeaudit4->update();                                }                            }                            //获取上上个审批通过人uid                            if($auditArray2['usite'] > 2){                                $lastlastuid = $changeaudit3->getChangeAuditbycidsitetime($cid,$changeArray['times'],$auditArray2['usite']-2)['uid'];                            }else{                                $lastlastuid = '';                            }                            //更新audit_list                            $clist = $this->change->getChangeAuditListbycid($cid);                            $totalamount = 0;                            foreach($clist as $ck => $cv){                                $auditjson = json_decode($cv['auditjson'],true);                                $samount = '';                                if(empty($lastlastuid)){                                    $totalamount += floatval($cv['unitprice'])*floatval($cv['camount']);                                }                                foreach($auditjson as $jk => $jv){                                    if(!empty($lastlastuid) && $jv['uid'] == $lastlastuid){                                        $totalamount += floatval($cv['unitprice'])*floatval($jv['ucamount']);                                        $samount = $jv['ucamount'];                                    }                                    if($jv['uid'] == $lastuid){                                        $auditjson[$jk]['ucamount'] = '';                                    }                                }                                $cauditlist = new ChangeAuditList();                                $cauditlist->id = $cv['id'];                                $cauditlist->samount = $samount;                                $cauditlist->auditjson = json_encode($auditjson);                                $cauditlist->update();                            }                            //更新change总金额                            $this->change->updateChangeTotalamount($cid,$totalamount);                        }elseif(isset($_POST['back']) && $_POST['back'] == 2){                            //退回到提交人,重新上报                            $this->change->updateChangeAudit($this->auth->getUid(),$cid, $changeArray['times'], 'backnew',$_POST['desc'],$sintime);                            $changeaudit = new ChangeAudit();                            //获取最后一次上报的上报人信息                            $auditArray = $changeaudit->getChangeAuditLastUser($cid,0);                            //获取最后一个审批人的usort                            $auditArray2 = $changeaudit->getChangeAuditLastUser($cid);                            //新建新的提交人,并把time+1                            $changeaudit->insertChangeAudit($auditArray,'checking',$auditArray2['usort']+1,$auditArray['times']+1);                            //更新audit_list                            $clist = $this->change->getChangeAuditListbycid($cid);                            $totalamount = 0;                            foreach($clist as $ck => $cv){                                $totalamount += floatval($cv['unitprice'])*floatval($cv['camount']);                                $cauditlist = new ChangeAuditList();                                $cauditlist->id = $cv['id'];                                $cauditlist->samount = '';                                $cauditlist->auditjson = '';                                $cauditlist->update();                            }                            //更新change                            $changes = new Change();                            $changes->cid = $cid;                            $changes->status = 'back';                            $changes->totalamount = $totalamount;                            $changes->update();                        }                    }elseif($status == 'checkno'){                        //不通过                        $this->change->updateChangeAudit($this->auth->getUid(),$cid, $changeArray['times'], 'checkno',$_POST['desc'],$sintime);                        $changes = new Change();                        $changes->cid = $cid;                        $changes->status = 'checkno';                        $changes->sintime = time();                        $changes->update();                    }                    return '/change/detail/'. $cid;                }                $this->data['pmArray'] = $pmArray;                $ctypelist = array();                if (!empty($changeArray['ctype'])) {                    $ctype = explode(',', $changeArray['ctype']);                    foreach ($ctype as $tk => $tv) {                        $ctypelist[$tk]['typename'] = $this->changeType[$tv];                    }                }                $changeArray['ctypelist'] = $ctypelist;                $changeArray['categoryname'] = $this->changeCategory[$changeArray['category']];                $changeArray['naturename'] = $this->changeNature[$changeArray['cnature']];                $changeArray['companyname'] = $this->change->getCompanybyid($changeArray['companyid'])['name'];                $this->data['changeArray'] = $changeArray;                //获取用户审批变更清单的列表                $auditlist = $this->change->getChangeAuditbylastlist($cid,$changeArray['times']);                //获取清单,按清单编号排序                $clist = $this->change->getChangeAuditListbycid($cid);                $ototalnum = 0;                $ctotalnum = 0;                $stotalnum = 0;                $listtablehtml = '<table class="table table-striped table-bordered nowrap" id="tablelist" cellspacing="0" width="100%">								<thead>									<tr><th rowspan="2" class="text-center" width="100">清单编号</th><th rowspan="2" class="text-center">名称</th><th rowspan="2" class="text-center">单位</th><th rowspan="2" class="text-center">单价</th><th colspan="2" class="text-center">原设计</th><th colspan="2" class="text-center">申报变更</th>';                $thhtml = '<th class="text-center">数量</th>									<th class="text-center">金额</th>									<th class="text-center">数量</th>									<th class="text-center">金额</th>';                $utotalarr = array();                $checkinguid = 0;                $firstcheck = 0;                $lastid = 0;                foreach ($auditlist as $ak => $av) {                    $listtablehtml .= '<th colspan="2" class="text-center">'.$av['name'].' 审批</th>';                    $thhtml .= '<th class="text-center">数量</th><th class="text-center">金额</th>';                    $utotalarr[$ak]['uid'] = $av['uid'];                    $utotalarr[$ak]['status'] = $av['status'];                    $utotalarr[$ak]['usum'] = 0;                    if($av['status'] == 'checking'){                        $checkinguid = $av['uid'];                        if($ak == 0){                            $firstcheck = 1;                        }else{                            $lastid = $auditlist[$ak-1]['uid'];                        }                    }                }                $this->data['lastuid'] = $lastid;                //获取上一个审批人名称和提交人名称                if($lastid != ''){                    $this->data['lastusername'] = $this->auth->getRowByUid($lastid)['name'];                }                $this->data['createusername'] = $this->auth->getRowByUid($changeArray['uid'])['name'];                $this->data['firstcheck'] = $firstcheck;                $listtablehtml .= '</tr><tr>'. $thhtml .'</tr>                                </thead>							<tbody id="list">';                if (!empty($clist)) {                    include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');                    foreach ($clist as $ck => $cv) {                        $osum = floatval($cv['unitprice']) * floatval($cv['oamount']);                        $clist[$ck]['osum'] = $osum;                        $ototalnum += $osum;                        $csum = floatval($cv['unitprice']) * floatval($cv['camount']);                        $clist[$ck]['csum'] = $csum;                        $ctotalnum += $csum;                        if($cv['samount'] != ''){                            $ssum = floatval($cv['unitprice'])*floatval($cv['samount']);                            $samount = $cv['samount'];                            $stotalnum += $ssum;                        }else{                            $ssum = $csum;                            $samount = $cv['camount'];                            $stotalnum += $ssum;                        }                        $listtablehtml .= '<tr class="clist"><td>' . $cv['lnum'] . '</td><td>' . $cv['lname'] . '</td><td>' . $cv['unit'] . '</td><td>' . tofloat($cv['unitprice']) . '</td><td>' . $cv['oamount'] . '</td><td>' . tofloat($osum) . '</td><td>' . $cv['camount'] . '</td><td>' . tofloat($csum) . '</td>';                        $userjson = json_decode($cv['auditjson'], true);                        $tdhtml = '';                        foreach ($userjson as $uk => $uv) {                            if ($uv['uid'] == $checkinguid) {                                $tdhtml .= '<td><input class="form-control input-sm" type="number" min="0" step="0.001" listid="'.$cv['id'].'" value="'.$samount.'" placeholder="请输入变更数量"></td><td class="cnum">'.tofloat($ssum).'</td>';                            }else{                                if($uv['ucamount'] != ''){                                    $usum = floatval($cv['unitprice'])*floatval($uv['ucamount']);                                    $tdhtml .= '<td>'.$uv['ucamount'].'</td><td>'.tofloat($usum).'</td>';                                    //update utotalarr value=>usum                                    foreach($utotalarr as $tk => $tv){                                        if($tv['uid'] == $uv['uid']){                                            $utotalarr[$tk]['usum'] = floatval($utotalarr[$tk]['usum'])+$usum;                                            break;                                        }                                    }                                }else{                                    $tdhtml .= '<td></td><td></td>';                                }                            }                        }                        $listtablehtml = $listtablehtml.$tdhtml.'</tr>';                    }                }                $listtablehtml .= '</tbody><tfoot><tr class="info"><td>合计</td><td></td><td></td><td></td><td></td><td>'.tofloat($ototalnum).'</td><td></td><td>'.tofloat($ctotalnum).'</td>';                foreach($utotalarr as $tk => $tv){                    $addtd = $tv['status'] == 'checking' ? tofloat($stotalnum) : ($tv['usum'] != 0 ? tofloat($tv['usum']) : '');                    $checkinghtml = $tv['status'] == 'checking' ? ' class="utotalnum"': '';                    $listtablehtml .= '<td></td><td'. $checkinghtml .'>'.$addtd.'</td>';                }                $listtablehtml .= '</tr>								</tfoot>							</table>';                $this->data['listtablehtml'] = $listtablehtml;                //uid                $this->data['userid'] = $this->auth->getUid();                //cid                $this->data['cid'] = $cid;                //获取附件                $attlist = $this->change->getChangeAttListbycid($cid);                $showattlist = array();                if (!empty($attlist)) {                    foreach ($attlist as $k => $v) {                        //加密下载的id                        $fid = $this->__hashids->encode($v['id']);                        $showattlist[$k]['fid'] = $v['id'];                        $showattlist[$k]['uid'] = $v['uid'];                        $showattlist[$k]['sort'] = $k + 1;                        $showattlist[$k]['downurl'] = '/change/file/download/' . $fid;                        $showattlist[$k]['filename'] = $v['filename'] . '.' . $v['fileext'];                        $showattlist[$k]['time'] = date('Y-m-d H:i', $v['intime']);                        $showattlist[$k]['size'] = $this->changefilesize($v['filesize']);                    }                }                $this->data['attlist'] = $showattlist;                $auditlist2 = $this->change->getChangeAuditsbySort($cid);                $this->data['auditlist'] = $auditlist2;                $this->render('biangeng-approval', $this->data, TRUE);exit;            }        }        exit('参数有误');    }    //重新上报、修改变更内容    public function changeReport(){        if(isset($this->params['cid']) && is_numeric($this->params['cid'])){            $cid = $this->params['cid'];            $changeArray = $this->change->getChangebyid($cid);            //判断当前变更令是否处于上报或重新上报状态,否 则显示详情页            if (!empty($changeArray) && ($changeArray['status'] == 'back' || $changeArray['status'] == 'uncheck') && $changeArray['uid'] == $this->auth->getUid() ) {                $pmArray = $this->actmeasure->getRowByPmid($changeArray['pmid']);                if (empty($pmArray)) {                    exit('不存在此标段');                }                if($this->auth->getUid() != $pmArray['uid']){                    exit('不是原报人无法修改或重新上报变更令');                }                //表单提交                if(isset($_POST['pnum'])){                    if(isset($_POST['status']) && $_POST['status'] == 'checking'){                        if(empty($_POST['pnum']) || !isset($_POST['pname']) || empty($_POST['pname']) || !isset($_POST['mnum']) || empty($_POST['mnum']) || !isset($_POST['description']) || empty($_POST['description']) || !isset($_POST['changeaudit']) || empty($_POST['changeaudit']) || !isset($_POST['changelist']) || !isset($_POST['changewhitelist'])){                            exit('参数缺失或为空');                        }                        if(empty($_POST['changelist']) && empty($_POST['changewhitelist'])){                            exit('变更清单缺失');                        }                    }elseif(isset($_POST['status']) && $_POST['status'] == 'save'){                        if(empty($_POST['pnum']) || !isset($_POST['pname']) || empty($_POST['pname'])){                            exit('参数缺失或为空');                        }                    }                    Doo::loadModel('change');                    Doo::loadModel('changeaudit');                    Doo::loadModel('changeauditlist');                    //获取提交人audit表信息                    $creatorArray = $this->change->getChangeAuditLastUser($cid,0);                    $sort = $creatorArray['usort']+1;                    //先修改成变更令                    $status = isset($_POST['status']) && $_POST['status'] == 'checking' ? 'checking' : '';                    $this->change->updateChangeMsg($cid,$_POST,$creatorArray['times'],$status);                    if($status){                        //再修改提交人上报信息                        $changeaudit2 = new ChangeAudit();                        $changeaudit2->id = $creatorArray['id'];                        $changeaudit2->status = 'checked';                        $changeaudit2->sintime = time();                        $changeaudit2->update();                    }                    //附件添加cid                    if(!empty($_POST['changeatt'])){                        Doo::loadModel('changeatt');                        $attlist = explode(',', $_POST['changeatt']);                        foreach($attlist as $ak => $av){                            $changeAtt = new ChangeAtt();                            $changeAtt->id = $av;                            $changeAtt->cid = $cid;                            $changeAtt->update();                        }                    }                    //先删除所有审批人列,再重新添加                    $caudit = new ChangeAudit();                    $caudit->deleteChangeAuditthisTime($cid,$creatorArray['times']);                    //审批人添加                    $auditArr = array();                    if(!empty($_POST['changeaudit'])){                        $auditlist = explode(',', $_POST['changeaudit']);                        $site = 1;                        foreach($auditlist as $uk => $uv){                            $userArray = $this->auth->getRowByUid($uv);                            $changeaudit = new ChangeAudit();                            $changeaudit->pid = $pmArray['pid'];                            $changeaudit->stid = $pmArray['stid'];                            $changeaudit->pmid = $pmArray['pmid'];                            $changeaudit->cid = $cid;                            $changeaudit->times = $creatorArray['times'];                            $changeaudit->usite = $site;                            $changeaudit->usort = $sort;                            $changeaudit->uid = $uv;                            $changeaudit->company = $userArray['company'];                            $changeaudit->jobs = $userArray['jobs'];                            $changeaudit->name = $userArray['name'];                            $changeaudit->status = (isset($_POST['status']) && $_POST['status'] == 'checking' && $uk == 0) ? 'checking' : 'uncheck';                            $changeaudit->insert();                            $sort++;                            $site++;                            array_push($auditArr,array('uid' => $uv, 'ucamount' => ''));                        }                    }                    //先删除变更令所有清单列,再重新添加                    $cauditlist2 = new ChangeAuditList();                    $this->change->delChangeAuditListbyCid($cid);                    //清单添加,不分顺序,最终展示按清单编号排序                    $total = 0;                    if(!empty($_POST['changelist'])){                        $clist = explode(',',$_POST['changelist']);                        foreach($clist as $ck => $cv){                            $clistarr = explode('_',$cv);                            if(!empty($clistarr[1]) && is_numeric($clistarr[1])){                                $changelistArr = $this->change->getChangeListbyid($clistarr[0]);                                $total += floatval($changelistArr['unitprice'])*floatval($clistarr[1]);                                $cauditlist = new ChangeAuditList();                                $cauditlist->pid = $pmArray['pid'];                                $cauditlist->stid = $pmArray['stid'];                                $cauditlist->pmid = $pmArray['pmid'];                                $cauditlist->cid = $cid;                                $cauditlist->lid = $clistarr[0];                                $cauditlist->lnum = $changelistArr['lnum'];                                $cauditlist->lname = $changelistArr['lname'];                                $cauditlist->unit = $changelistArr['unit'];                                $cauditlist->unitprice = $changelistArr['unitprice'];                                $cauditlist->oamount = $changelistArr['amount'];                                $cauditlist->camount = $clistarr[1];                                $cauditlist->auditjson = json_encode($auditArr);                                $cauditlist->insert();                            }                        }                    }                    if(!empty($_POST['changewhitelist'])){                        $wlist = explode(',',$_POST['changewhitelist']);                        foreach($wlist as $wk => $wv){                            $wlistarr = explode(';',explode('->',$wv)[1]);                            if(!empty($wlistarr[0]) && !empty($wlistarr[1]) && !empty($wlistarr[3]) && !empty($wlistarr[4]) && !empty($wlistarr[5]) && is_numeric($wlistarr[3]) && is_numeric($wlistarr[4]) && is_numeric($wlistarr[5])){                                $total += floatval($wlistarr[3])*floatval($wlistarr[5]);                                $cauditlist = new ChangeAuditList();                                $cauditlist->pid = $pmArray['pid'];                                $cauditlist->stid = $pmArray['stid'];                                $cauditlist->pmid = $pmArray['pmid'];                                $cauditlist->cid = $cid;                                $cauditlist->lid = 0;                                $cauditlist->lnum = $wlistarr[0];                                $cauditlist->lname = $wlistarr[1];                                $cauditlist->unit = $wlistarr[2];                                $cauditlist->unitprice = $wlistarr[3];                                $cauditlist->oamount = $wlistarr[4];                                $cauditlist->camount = $wlistarr[5];                                $cauditlist->auditjson = json_encode($auditArr);                                $cauditlist->insert();                            }                        }                    }                    //变更令添加变更总金额                    $this->change->updateChangeTotalamount($cid,$total);                    $status = isset($_POST['status']) && $_POST['status'] == 'checking' ? 3 : 2;                    return '/change/index/'.$pmArray['pmid'].'/'.$status;                }                $this->data['companylist'] = $this->change->getCompanyList();                $list = $this->change->getChangeListbyPmid($pmArray['pmid']);                if(!empty($list)){                    foreach($list as $k => $v){                        $totalamount = floatval($v['unitprice'])*floatval($v['amount']);                        $list[$k]['totalamount'] = $totalamount;                    }                }                //获取标段审批人列表                $auditactlist = $this->measureauditact->getUserAuditID($pmArray['pmid']);                //获取原报人                $measureArray = $this->actmeasure->getRowByPmid($pmArray['pmid']);                $inside = 1;                $userlist = array();                $usernamelist = array();                if(!empty($auditactlist)){                    foreach($auditactlist as $k => $v){                        if($measureArray['uid'] == $v['auditoruid']){                            $inside = 0;                        }                        $usermsg = $this->auth->getRowByUid($v['auditoruid']);                        $userlist[$k]['userid'] = $usermsg['userid'];                        $userlist[$k]['name'] = $usermsg['name'];                        $userlist[$k]['jobs'] = $usermsg['jobs'];                        $userlist[$k]['avatar'] = $usermsg['avatar'];                        $userlist[$k]['company'] = $usermsg['company'];                        array_push($usernamelist, $usermsg['name']);                    }                }                if($inside){                    $usermsg2 = $this->auth->getRowByUid($measureArray['uid']);                    $orginArray['userid'] = $measureArray['uid'];                    $orginArray['avatar'] = $usermsg2['avatar'];                    $orginArray['name'] = $usermsg2['name'];                    $orginArray['jobs'] = $usermsg2['jobs'];                    $orginArray['company'] = $usermsg2['company'];                    array_push($userlist,$orginArray);                    array_push($usernamelist, $usermsg2['name']);                }                //获取已选审批人列表,生成changeaudit和selectauditlist,并把未在常用审批人的uid找出来                $auditlist = $this->change->getChangeAuditsbycidtime($cid,$changeArray['times']);                $changeauditList = array();                $selectauditlist = array();                $searchauditlist = array();                foreach($auditlist as $adk => $adv){                    array_push($changeauditList,$adv['uid']);                    $addauditlist = $adv['uid'].'_'.$adv['name'].'_'.$adv['company'].'_'.$adv['jobs'];                    array_push($selectauditlist,$addauditlist);                    if(!in_array($adv['name'],$usernamelist)){                        array_push($searchauditlist,$auditlist[$adk]);                        array_push($usernamelist,$adv['name']);                    }                }                $this->data['changeaudit'] = implode(',',$changeauditList);                $this->data['selectauditlist'] = implode('->',$selectauditlist);                $this->data['sauditlist'] = $searchauditlist;                $this->data['auditlist'] = $auditlist;                //获取已选清单列表,已选清单id列表,属于签约清单的changelist,和changewhitelist                $clist = $this->change->getChangeAuditListbycid($cid);                $ototalnum = 0;                $ctotalnum = 0;                $changeidlist = array();                $changelist = array();                $changewhitelist = array();                if(!empty($clist)){                    $addnum = 1;                    foreach($clist as $ck => $cv){                        $osum = floatval($cv['unitprice'])*floatval($cv['oamount']);                        $clist[$ck]['osum'] = $osum;                        $ototalnum += $osum;                        $csum = floatval($cv['unitprice'])*floatval($cv['camount']);                        $clist[$ck]['csum'] = $csum;                        $ctotalnum += $csum;                        if($cv['lid'] != 0){                            array_push($changeidlist,$cv['lid']);                            array_push($changelist,$cv['lid'].'_'.$cv['camount']);                        }else{                            $clist[$ck]['add'] = $addnum;                            array_push($changewhitelist,$addnum.'->'.$cv['lnum'].';'.$cv['lname'].';'.$cv['unit'].';'.$cv['unitprice'].';'.$cv['oamount'].';'.$cv['camount']);                            $addnum++;                            $clist[$ck]['changeunit'] = $this->changeUnit;                        }                    }                }                include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');                $this->data['changelist'] = implode(',',$changelist);                $this->data['changewhitelist'] = implode(',',$changewhitelist);                $this->data['changeidlist'] = implode(',',$changeidlist);                $this->data['ototalnum'] = tofloat($ototalnum);                $this->data['ctotalnum'] = tofloat($ctotalnum);                $this->data['clist'] = $clist;                //获取已添加的附件列表                $attlist = $this->change->getChangeAttListbycid($cid);                $showattlist = array();                if (!empty($attlist)) {                    foreach ($attlist as $k => $v) {                        //加密下载的id                        $fid = $this->__hashids->encode($v['id']);                        $showattlist[$k]['uid'] = $v['uid'];                        $showattlist[$k]['sort'] = $k + 1;                        $showattlist[$k]['downurl'] = '/change/file/download/' . $fid;                        $showattlist[$k]['filename'] = $v['filename'] . '.' . $v['fileext'];                        $showattlist[$k]['time'] = date('Y-m-d H:i', $v['intime']);                        $showattlist[$k]['size'] = $this->changefilesize($v['filesize']);                    }                }                $this->data['attlist'] = $showattlist;                $this->data['changeArray'] = $changeArray;                $this->data['pmArray'] = $pmArray;                $this->data['userlist'] = $userlist;                $this->data['usernamelist'] = implode(',',$usernamelist);                $this->data['userArray'] = $this->auth->getRowByUid($this->auth->getUid());                $this->data['list'] = $list;                $this->data['year'] = date('Y',time());                $this->render('biangeng-update', $this->data, TRUE);            }else{                return '/change/detail/' . $cid;                die;            }        }else{            exit('不存在此变更令');        }    }    public function editCompany(){        if(isset($_POST['uci']) && isset($_POST['uc']) && isset($_POST['ac'])){            $addhtml = '';            $selecthtml = '';            Doo::loadModel('changecompany');            if(!empty($_POST['uci'])){                $idarr = $_POST['uci'];                $namearr = $_POST['uc'];                foreach($idarr as $k => $v){                    $company = new ChangeCompany();                    $company->id = $v;                    $company->name = $namearr[$k];                    $company->update();                    $selecthtml .= '<option value="'.$v.'">'.$namearr[$k].'</option>';                }            }            if(!empty($_POST['ac'])){                $addarr = $_POST['ac'];                foreach($addarr as $ak => $av){                    if(!empty(trim($av))){                        $company2 = new ChangeCompany();                        $company2->name = $av;                        $id = $company2->insert();                        $selecthtml .= '<option value="'.$id.'">'.$av.'</option>';                        $addhtml .= '<div class="form-group"><input type="text" id="'.$id.'" class="form-control" value="'.$av.'"></div>';                    }                }            }            echo json_encode(array('code' => 200, 'addhtml' => $addhtml, 'selecthtml' => $selecthtml));            die;        }else{            echo json_encode(array('code' => 500));            die;        }    }    public function searchUser(){        if(!isset($_GET['name']) || empty($_GET['name'])){            echo json_encode(array('code' => 400, 'msg' => '请输入审批人名称'));            exit;        }        $usermsg = $this->profile->checkUserName($_GET['name']);        if(!empty($usermsg)){            $namelist = $_POST['namelist'];            if(in_array($usermsg['name'], $namelist)){                echo json_encode(array('code' => 400, 'msg' => '列表或常用中已存在当前审批人'));                exit;            }else{                echo json_encode(array('code' => 200, 'user' => $usermsg));                exit;            }        }else{            echo json_encode(array('code' => 400, 'msg' => '不存在此审批人名称'));            exit;        }    }    public function fileUpload(){        if(!isset($this->params['pmid']) && !is_numeric($this->params['pmid'])){            exit(json_encode(array('success' => false, 'msg' => '参数有误')));        }        $pmArray = $this->actmeasure->getRowByPmid($this->params['pmid']);        if(empty($pmArray)){            exit(json_encode(array('success' => false, 'msg' => '不存在此标段,无法上传')));        }        Doo::loadClass('extras/Uploader');        $files = array();        $upload_dir = Doo::conf()->SITE_PATH . 'cfiles/';        $uploader = new FileUpload('uploadfile');        $intime = time();        $extPathdir = $upload_dir.date('Y/md/',$intime);        if (!$this->dir_create2($extPathdir)) {            $status = array('success' => FALSE, 'msg' => '文件夹创建失败');            echo json_encode($status, JSON_UNESCAPED_UNICODE);            die();        }        $files['filename'] = $uploader->getFileNameWithoutExt();        $files['fileext'] = $uploader->getExtension();        $files['filesize'] = $uploader->getFileSize();        $filepath = date('Ymdhis',$intime) . rand(100, 999) . '.' . $files['fileext'];        $uploader->newFileName = $filepath;        $files['filepath'] = 'cfiles/'.date('Y/md/',$intime).$filepath;        $result = $uploader->handleUpload($extPathdir);        if (!$result) {            exit(json_encode(array('success' => false, 'msg' => $uploader->getErrorMsg())));        }        $files['pid'] = $pmArray['pid'];        $files['stid'] = $pmArray['stid'];        $files['pmid'] = $pmArray['pmid'];        $files['cid'] = isset($this->params['cid']) && is_numeric($this->params['cid']) ? $this->params['cid'] : 0;        $files['uid'] = $this->auth->getUid();        $files['intime'] = $intime;        $result2 = $this->change->insertChangeAtt($files);        if(empty($result2)){            exit(json_encode(array('success' => false, 'msg' => '添加到数据库发生错误')));        }        $files2 = array();        $files2['id'] = $result2;        //加密下载的id        $fid = $this->__hashids->encode($result2);        $files2['downurl'] = '/change/file/download/'.$fid;        $files2['filename'] = $files['filename'].'.'.$files['fileext'];        $files2['time'] = date('Y-m-d H:i',$intime);        $files2['size'] = $this->changefilesize($files['filesize']);        echo json_encode(array('success' => true, 'files' => $files2));    }    public function fileDownload(){        $fid = isset($this->params['fid'])?$this->params['fid']:null;        if($fid) {            //解密下载的id            $fid = $this->__hashids->decode($fid)[0];            $fileArray = $this->change->getChangeAttbyFid($fid);            if (!empty($fileArray)) {                $pathf = DOO::conf()->SITE_PATH;                $this->file_down($pathf.$fileArray['filepath'],$fileArray['filename'].'.'.$fileArray['fileext']);            }        }    }    public function fileDelete(){        $fid = isset($_POST['fid']) && is_numeric($_POST['fid']) ? $_POST['fid'] : null;        if($fid){            $fileArray = $this->change->getChangeAttbyFid($fid);            if (!empty($fileArray) && $fileArray['uid'] == $this->auth->getUid()) {                include (DOO::conf()->SITE_PATH . 'protected/plugin/io.han.php');                $pathf = DOO::conf()->SITE_PATH;                $this->IoHandler = new IoHandler();                $this->IoHandler->DeleteFile($pathf.$fileArray['filepath']);                $this->change->delChangeAttbyFid($fid);                exit(json_encode(array('code' => 200)));            }        }        exit(json_encode(array('code' => 400)));    }    public function pnumCheck(){        if(isset($_POST['pnum']) && !empty($_POST['pnum']) && isset($_POST['status']) && !empty($_POST['status']) && isset($_POST['pmid']) && is_numeric($_POST['pmid'])){            if($_POST['status'] == 'new'){                $changeArray = $this->change->getChangebyPnumPmid($_POST['pnum'],$_POST['pmid']);                if(!empty($changeArray)){                    exit(json_encode(array('code' => 400,'msg' => '当前标段变更令已存在此申请编号,请重新输入或改变自增编号值')));                }else{                    exit(json_encode(array('code' => 200,'msg' => '')));                }            }elseif($_POST['status'] == 'update'){                if(isset($_POST['cid']) && is_numeric($_POST['cid'])){                    $changeArray = $this->change->getChangebyPnumPmid($_POST['pnum'],$_POST['pmid'],$_POST['cid']);                    if(!empty($changeArray)){                        exit(json_encode(array('code' => 400,'msg' => '当前标段变更令已存在此申请编号,请重新输入或改变自增编号值')));                    }else{                        exit(json_encode(array('code' => 200,'msg' => '')));                    }                }            }        }        exit(json_encode(array('code' => 400,'msg' => '判断参数有误')));    }    public function substr_replace_cn($string, $repalce = '*', $start = 0, $len = 0)    {        $count = mb_strlen($string, 'UTF-8'); //此处传入编码,建议使用utf-8。此处编码要与下面mb_substr()所使用的一致        if (!$count) {            return $string;        }        if ($len == 0) {            $end = $count;  //传入0则替换到最后        } else {            $end = $start + $len;       //传入指定长度则为开始长度+指定长度        }        $i = 0;        $returnString = '';        while ($i < $count) { //循环该字符串            $tmpString = mb_substr($string, $i, 1, 'UTF-8'); // 与mb_strlen编码一致            if ($start <= $i && $i < $end) {                $returnString .= $repalce;            } else {                $returnString .= $tmpString;            }            $i++;        }        return $returnString;    }    function unicode_encode($name)    {//to Unicode        $name = iconv('UTF-8', 'UCS-2', $name);        $len = strlen($name);        $str = '';        for ($i = 0; $i < $len - 1; $i = $i + 2) {            $c = $name[$i];            $c2 = $name[$i + 1];            if (ord($c) > 0) {// 两个字节的字                $str .= '\\' . base_convert(ord($c), 10, 16) . base_convert(ord($c2), 10, 16);            } else {                $str .= $c2;            }        }        $str = strtoupper($str);        return $str;    }    function unicode_decode($name)    {//Unicode to        $pattern = '/([\w]+)|(\\\u([\w]{4}))/i';        preg_match_all($pattern, $name, $matches);        if (!empty($matches)) {            $name = '';            for ($j = 0; $j < count($matches[0]); $j++) {                $str = $matches[0][$j];                if (strpos($str, '\\u') === 0) {                    $code = base_convert(substr($str, 2, 2), 16, 10);                    $code2 = base_convert(substr($str, 4), 16, 10);                    $c = chr($code) . chr($code2);                    $c = iconv('UCS-2', 'UTF-8', $c);                    $name .= $c;                } else {                    $name .= $str;                }            }        }        return $name;    }    function dir_create2($path, $mode = 0777)    {        if (is_dir($path))            return TRUE;        $path = $this->dir_path($path);        $parent = dirname($path);        if (!is_dir($parent)){            @mkdir($parent, 0777);            @chmod($parent, 0777);        }        @mkdir($path, 0777);        @chmod($path, 0777);        return is_dir($path);    }    function dir_path($path)    {        $path = str_replace('\\', '/', $path);        if (substr($path, -1) != '/')            $path = $path . '/';        return $path;    }    //字节转换    function changefilesize($value){        $units = array(' B', ' KB', ' MB', ' GB', ' TB');        for ($i = 0; $value >= 1024 && $i < 4; $i++) $value /= 1024;        return round($value, 2).$units[$i];    }    /**     * 文件下载     * @param $filepath 文件路径     * @param $filename 文件名称     */    public function file_down($filepath,$filename) {        if (ob_get_length() !== false)            @ob_end_clean();        header('Content-Description: File Download');        header('Content-Type: application/octet-stream');        header('Content-Disposition: attachment; filename='.basename($filename));        header('Content-Transfer-Encoding: binary');        header('Expires: 0');        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');        header('Pragma: public');        header('Content-Length: ' . filesize($filepath));        @readfile($filepath);    }}?>
 |