'未审批', 'checking' => '审批中', 'checked' => '审批通过', 'checkno' => '审批不通过');
    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(isset($_POST['sessionid'])){
            session_id($_POST['sessionid']);
            setcookie('PHPSESSID',$_POST['sessionid']);
            session_start();
        }
        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();
        $pmidlistArray = array();
        if(!empty($sectionlist)){
            $newlist = array();
            $i = 0;
            foreach($sectionlist as $key => $value){
                $j = 0;
                $newkey = $value['pid'];
                $newst = $value['stid'];
                $newpm = $value['pmid'];
                array_push($pmidlistArray,$newpm);
                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']);
            }
        }
        $sql = '';
        $pmid = isset($this->params['pmid']) ? $this->params['pmid'] : '';
        $userchangepower = 1;
        if(!empty($prolist)){
            foreach($prolist as $pk => $pv){
                if(in_array($pv['pid'], $pidArray)){
                    $prolist[$pk]['open'] = 2;
                    foreach($prolist[$pk]['stlist'] as $sk => $sv){
                        if(in_array($sv['stid'], $stidArray)){
                            $prolist[$pk]['stlist'][$sk]['open'] = 2;
                            foreach($prolist[$pk]['stlist'][$sk]['pmlist'] as $mk => $mv){
                                if(in_array($mv['pmid'], $pmidArray)){
                                    $prolist[$pk]['stlist'][$sk]['pmlist'][$mk]['open'] = 2;
                                }
                            }
                        }
                    }
                }
            }
            //存在标段则该标段加粗
            if(!empty($pmid)){
                $pmArray = $this->actmeasure->getRowByPmid($pmid);
                foreach($prolist as $pk => $pv){
                    if($pmArray['pid'] == $pv['pid']){
                        $prolist[$pk]['open'] = 1;
                        foreach($prolist[$pk]['stlist'] as $sk => $sv){
                            if($pmArray['stid'] == $sv['stid']){
                                $prolist[$pk]['stlist'][$sk]['open'] = 1;
                                foreach($prolist[$pk]['stlist'][$sk]['pmlist'] as $mk => $mv){
                                    if($pmArray['pmid'] == $mv['pmid']){
                                        $prolist[$pk]['stlist'][$sk]['pmlist'][$mk]['open'] = 1;
                                        break;
                                    }
                                }
                                break;
                            }
                        }
                        break;
                    }
                }
                $userchangepower = $this->auth->getUid() == $pmArray['uid'] ? 1 : 0;
                $this->data['pmArray'] = $pmArray;
            }else{
                $sql .= ' and pmid in ('.implode(',',$pmidlistArray).')';
            }
        }
        //只有原报人才可以创建变更令和上报变更令
        $this->data['userchangepower'] = $userchangepower;
        $changelist = $this->change->getChangeListbyPmid($pmid,' 1'.$sql);
        $this->data['firstuse'] = empty($changelist) ? 1 : 0;
        $status = isset($this->params['status']) && is_numeric($this->params['status']) ? $this->params['status'] : 1;
        $this->data['status'] = $status;
        $this->data['prolist'] = $prolist;
        $sql .= ' and cid in (SELECT `jl_change_audit`.cid FROM `jl_change_audit` WHERE `jl_change_audit`.uid='.$this->auth->getUid().' GROUP BY `jl_change_audit`.cid)';
        $this->data['num1'] = $this->change->getNumbyMydetail($pmid,$this->auth->getUid());
        $this->data['num2'] = $this->change->getNumbystatus($pmid,'uncheck','back',$sql);
        $this->data['num3'] = $this->change->getNumbystatus($pmid,'checking','',$sql);
        $this->data['num4'] = $this->change->getNumbystatus($pmid,'checked','',$sql);
        $this->data['num5'] = $this->change->getNumbystatus($pmid,'checkno','',$sql);
        //获取列表内容
        Doo::loadHelper('DooPager');
        $pagestr = !empty($pmid) ? '/tender/'.$pmid.'/status/'.$status : '/status/'.$status;
        $totalArchive = $status != 1 ? ($status ==2 ? $this->change->getNumbystatus($pmid,'uncheck','back',$sql) : $this->change->getNumbystatus($pmid,$this->changeStatus[$status],'',$sql)) : $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',$sql) : $this->change->getListbyStatus($pmid,$this->changeStatus[$status], $pager->limit,'',$sql)) : $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]['pmname'] = $this->actmeasure->getRowByPmid($lv['pmid'])['pmname'];
                $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['pmid'] = $pmid;
        $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('不存在此标段');
            }
            include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');
            $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'] = todecimal($totalamount,2);
                }
            }
            $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('不存在此标段');
                }
                include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');
                $decimalnum = $this->getdecimal($changeArray['decimalnum']);
                if(isset($_POST['table']) && $_POST['table'] == '_all'){
                    //获取所有清单列表数据,包括所有审批人
                    //获取用户审批变更清单的列表
                    $auditlist = $this->change->getChangeAuditbylastlist($cid,$changeArray['times']);
                    //获取清单,按清单编号排序
                    $clist = $this->change->getChangeAuditListbycid($cid);
                    $ototalnum = 0;
                    $ctotalnum = 0;
                    $stotalnum = 0;
                    $listtablehtml = '
								
									| 清单编号 | 名称 | 单位 | 单价 | 原设计 | 申报变更增(+)减(-)';
                    $thhtml = ' | 数量 | 金额 | 数量 | 金额';
                    $utotalarr = array();
                    foreach ($auditlist as $ak => $av) {
                        $listtablehtml .= ' | '.$av['name'].' 审批';
                        $thhtml .= ' | 数量 | 金额';
                        $utotalarr[$ak]['uid'] = $av['uid'];
                        $utotalarr[$ak]['status'] = $av['status'];
                        $utotalarr[$ak]['usum'] = 0;
                    }
                    $listtablehtml .= ' | 
|---|
'. $thhtml .'
                                
							';
                    if (!empty($clist)) {
                        foreach ($clist as $ck => $cv) {
                            $osum = floatval($cv['unitprice']) * floatval($cv['oamount']);
                            $osum = $cv['lid'] != 0 ? todecimal($osum,$decimalnum['costdnum']) : $osum;
                            $clist[$ck]['osum'] = $osum;
                            $ototalnum += $osum;
                            $csum = todecimal(floatval($cv['unitprice']) * floatval($cv['camount']),$decimalnum['costdnum']);
                            $clist[$ck]['csum'] = $csum;
                            $ctotalnum += $csum;
                            $listtablehtml .= '| ' . $cv['lnum'] . ' | ' . $cv['lname'] . ' | ' . $cv['unit'] . ' | ' . tofloat($cv['unitprice']) . ' | ' . $cv['oamount'] . ' | ' . $osum . ' | ' . $cv['camount'] . ' | ' . $csum . '';
                            $userjson = json_decode($cv['auditjson'], true);
                            $tdhtml = '';
                            foreach ($userjson as $uk => $uv) {
                                if($uv['ucamount'] != ''){
                                    //update utotalarr value=>usum
                                    foreach($utotalarr as $tk => $tv){
                                        if($tv['uid'] == $uv['uid'] && $tv['status'] == 'checked'){
                                            $usum = todecimal(floatval($cv['unitprice'])*floatval($uv['ucamount']),$decimalnum['costdnum']);
                                            $tdhtml .= ' | '.$uv['ucamount'].' | '.$usum.'';
                                            $utotalarr[$tk]['usum'] = todecimal(floatval($utotalarr[$tk]['usum'])+$usum,$decimalnum['costdnum']);
                                            break;
                                        }elseif($tv['uid'] == $uv['uid']){
                                            $tdhtml .= ' |  | ';
                                            break;
                                        }
                                    }
                                }else{
                                    $tdhtml .= ' |  | ';
                                }
                            }
                            $listtablehtml = $listtablehtml.$tdhtml.' | 
';
                        }
                    }
                    $listtablehtml .= '| 合计 |  |  |  |  | '.$ototalnum.' |  | '.todecimal($ctotalnum,$decimalnum['costdnum']).'';
                    foreach($utotalarr as $tk => $tv){
                        $addtd = $tv['usum'] != 0 ? todecimal($tv['usum'],$decimalnum['costdnum']) : '';
                        $listtablehtml .= ' |  | '.$addtd.'';
                    }
                    $listtablehtml .= ' | 
								
							
';
                    echo json_encode(array('code' => 200, 'html' => $listtablehtml));
                    die;
                }
                $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']);
                        $osum = $cv['lid'] != 0 ? todecimal($osum,$decimalnum['costdnum']) : $osum;
                        $clist[$ck]['osum'] = $osum;
                        $ototalnum += $osum;
                        $csum = todecimal(floatval($cv['unitprice'])*floatval($cv['camount']),$decimalnum['costdnum']);
                        $clist[$ck]['csum'] = $csum;
                        $ctotalnum += $csum;
                        if($cv['samount'] != ''){
                            $ssum = todecimal(floatval($cv['unitprice'])*floatval($cv['samount']),$decimalnum['costdnum']);
                            $clist[$ck]['ssum'] = $ssum;
                            $stotalnum += $ssum;
                        }else{
                            $clist[$ck]['ssum'] = '';
                            $clist[$ck]['samount'] = '';
                        }
                    }
                }
                $this->data['ototalnum'] = $ototalnum;
                $this->data['ctotalnum'] = todecimal($ctotalnum,$decimalnum['costdnum']);
                $this->data['stotalnum'] = $stotalnum != 0 ? todecimal($stotalnum,$decimalnum['costdnum']) : '';
                $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('不是原报人无法创建变更令');
            }
            //取标段位数设置
            $decimalnum = $this->getdecimal($pmArray['cdecimalnum']);
            $this->data['costdnum'] = $decimalnum['costdnum'];
            $this->data['numberdnum'] = $decimalnum['numberdnum'];
            include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');
            //表单提交
            if(isset($_POST['pnum'])){
                if(isset($_POST['checking'])){
                    if(empty($_POST['pnum']) || !isset($_POST['pname']) || empty($_POST['pname']) || !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){
                            $clistid = explode('->',$cv)[0];
                            $clistarr = explode(';',explode('->',$cv)[1]);
                            if(!empty($clistarr[0]) && !empty($clistarr[1]) && is_numeric($clistarr[3]) && is_numeric($clistarr[4]) && is_numeric($clistarr[5])){
                                $changelistArr = $this->change->getChangeListbyid($clistid);
                                if(!empty($changelistArr)){
                                    $total += todecimal(floatval($changelistArr['unitprice'])*floatval($clistarr[5]),$decimalnum['costdnum']);
                                    $cauditlist = new ChangeAuditList();
                                    $cauditlist->pid = $pmArray['pid'];
                                    $cauditlist->stid = $pmArray['stid'];
                                    $cauditlist->pmid = $pmArray['pmid'];
                                    $cauditlist->cid = $cid;
                                    $cauditlist->lid = $clistid;
                                    $cauditlist->lnum = $changelistArr['lnum'];
                                    $cauditlist->lname = $changelistArr['lname'];
                                    $cauditlist->unit = $changelistArr['unit'];
                                    $cauditlist->unitprice = $changelistArr['unitprice'];
                                    $cauditlist->oamount = $changelistArr['amount'];
                                    $cauditlist->camount = $clistarr[5];
                                    $cauditlist->auditjson = json_encode($auditArr);
                                    $cauditlist->insert();
                                }else{
                                    $total += todecimal(floatval($clistarr[3])*floatval($clistarr[5]),$decimalnum['costdnum']);
                                    $cauditlist = new ChangeAuditList();
                                    $cauditlist->pid = $pmArray['pid'];
                                    $cauditlist->stid = $pmArray['stid'];
                                    $cauditlist->pmid = $pmArray['pmid'];
                                    $cauditlist->cid = $cid;
                                    $cauditlist->lid = 0;
                                    $cauditlist->lnum = $clistarr[0];
                                    $cauditlist->lname = $clistarr[1];
                                    $cauditlist->unit = $clistarr[2];
                                    $cauditlist->unitprice = $clistarr[3];
                                    $cauditlist->oamount = $clistarr[4];
                                    $cauditlist->camount = $clistarr[5];
                                    $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]) && is_numeric($wlistarr[3]) && is_numeric($wlistarr[4]) && is_numeric($wlistarr[5])){
                                $total += todecimal(floatval($wlistarr[3])*floatval($wlistarr[5]),$decimalnum['costdnum']);
                                $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,todecimal($total,$decimalnum['costdnum']));
                    $status = isset($_POST['uncheck']) ? 2 : 3;
                    return '/change/index/tender/'.$pmArray['pmid'].'/status/'.$status;
                }else{
                    exit('添加到变更令失败');
                }
            }
            $this->data['companylist'] = $this->change->getCompanyList($pmid);
            $list = $this->change->getChangeListbyPmid($pmid);
            if(!empty($list)){
                foreach($list as $k => $v){
                    $totalamount = floatval($v['unitprice'])*floatval($v['amount']);
                    $list[$k]['totalamount'] = todecimal($totalamount,2);
                    $list[$k]['index'] = $k+1;
                }
            }
            //获取标段审批人列表
            $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)|19\d{2}|20\d{2}|\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(preg_match('/19\d{2}|20\d{2}/i',$arr[$i])){
                            $pnum .= $arr[$i];
                        }else{
                            $pnum .= $this->makenum($arr[$i]);
                        }
                    }else{
                        $pnum .= $arr[$i];
                    }
                }
                $this->data['pnum'] = $pnum;
            }else{
                $this->data['pnum'] = '变更申请编号001';
            }
            $cfuhashids = new Hashids\Hashids('cfileupload', 15);
            $this->data['uid'] = $this->auth->getUid();
            $verification = $cfuhashids->encode($pmArray['pmid'],$this->auth->getUid());
            $this->data['verification'] = $verification;
            $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('不存在此标段');
                }
                include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');
                $decimalnum = $this->getdecimal($changeArray['decimalnum']);
//                $step = $this->makestep($decimalnum['numberdnum']);
                //审批结果
                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 += todecimal(floatval($oneauditlist['unitprice'])*floatval($ucamount),$decimalnum['costdnum']);
                            $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,todecimal($totalamount,$decimalnum['costdnum']));
                        //更改下一个审批状态或结束审批
                        $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->bnum = isset($_POST['bnum']) ? $_POST['bnum'] : $changeArray['pnum'];
                            $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 += todecimal(floatval($cv['unitprice'])*floatval($cv['camount']),$decimalnum['costdnum']);
                                }
                                foreach($auditjson as $jk => $jv){
                                    if(!empty($lastlastuid) && $jv['uid'] == $lastlastuid){
                                        $totalamount += todecimal(floatval($cv['unitprice'])*floatval($jv['ucamount']),$decimalnum['costdnum']);
                                        $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,todecimal($totalamount,$decimalnum['costdnum']));
                        }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 += todecimal(floatval($cv['unitprice'])*floatval($cv['camount']),$decimalnum['costdnum']);
                                $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 = todecimal($totalamount,$decimalnum['costdnum']);
                            $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 = '
								
									| 清单编号 | 名称 | 单位 | 单价 | 原设计 | 申报变更增(+)减(-)';
                $thhtml = ' | 数量 | 金额 | 数量 | 金额';
                $utotalarr = array();
                $checkinguid = 0;
                $firstcheck = 0;
                $lastid = 0;
                foreach ($auditlist as $ak => $av) {
                    $listtablehtml .= ' | '.$av['name'].' 审批';
                    $thhtml .= ' | 数量 | 金额';
                    $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 .= ' | 
|---|
'. $thhtml .'
                                
							';
                if (!empty($clist)) {
                    foreach ($clist as $ck => $cv) {
                        $osum = floatval($cv['unitprice']) * floatval($cv['oamount']);
                        $osum = $cv['lid'] != 0 ? todecimal($osum,$decimalnum['costdnum']) : $osum;
                        $clist[$ck]['osum'] = $osum;
                        $ototalnum += $osum;
                        $csum = todecimal(floatval($cv['unitprice']) * floatval($cv['camount']),$decimalnum['costdnum']);
                        $clist[$ck]['csum'] = $csum;
                        $ctotalnum += $csum;
                        $listtablehtml .= '| ' . $cv['lnum'] . ' | ' . $cv['lname'] . ' | ' . $cv['unit'] . ' | ' . tofloat($cv['unitprice']) . ' | ' . $cv['oamount'] . ' | ' . $osum . ' | ' . $cv['camount'] . ' | ' . $csum . '';
                        $userjson = json_decode($cv['auditjson'], true);
                        $tdhtml = '';
                        foreach ($userjson as $uk => $uv) {
                            if ($uv['uid'] == $checkinguid) {
                                if($uv['ucamount'] != '') {
                                    $ssum = todecimal(floatval($cv['unitprice'])*floatval($uv['ucamount']),$decimalnum['costdnum']);
                                    $samount = $uv['ucamount'];
                                    $stotalnum += $ssum;
                                }else if ($cv['samount'] != ''){
                                    $ssum = todecimal(floatval($cv['unitprice'])*floatval($cv['samount']),$decimalnum['costdnum']);
                                    $samount = $cv['samount'];
                                    $stotalnum += $ssum;
                                }else{
                                    $ssum = $csum;
                                    $samount = $cv['camount'];
                                    $stotalnum += $ssum;
                                }
                                $tdhtml .= ' |  | '.$ssum.'';
                            }else{
                                if($uv['ucamount'] != ''){
                                    $usum = todecimal(floatval($cv['unitprice'])*floatval($uv['ucamount']),$decimalnum['costdnum']);
                                    $tdhtml .= ' | '.$uv['ucamount'].' | '.$usum.'';
                                    //update utotalarr value=>usum
                                    foreach($utotalarr as $tk => $tv){
                                        if($tv['uid'] == $uv['uid']){
                                            $utotalarr[$tk]['usum'] = todecimal(floatval($utotalarr[$tk]['usum'])+$usum,$decimalnum['costdnum']);
                                            break;
                                        }
                                    }
                                }else{
                                    $tdhtml .= ' |  | ';
                                }
                            }
                        }
                        $listtablehtml = $listtablehtml.$tdhtml.' | 
';
                    }
                }
                $listtablehtml .= '| 合计 |  |  |  |  | '.$ototalnum.' |  | '.todecimal($ctotalnum,$decimalnum['costdnum']).'';
                foreach($utotalarr as $tk => $tv){
                    $addtd = $tv['status'] == 'checking' ? todecimal($stotalnum,$decimalnum['costdnum']) : ($tv['usum'] != 0 ? todecimal($tv['usum'],$decimalnum['costdnum']) : '');
                    $checkinghtml = $tv['status'] == 'checking' ? ' class="utotalnum"': '';
                    $listtablehtml .= ' |  | '.$addtd.'';
                }
                $listtablehtml .= ' | 
								
							
';
                $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;
                //判断是否为本标段终审人
                $auditArray =  $this->change->getChangeAuditLastUser($cid);
                $this->data['isenduser'] = $auditArray['uid'] == $this->auth->getUid() ? 1 : 0;
                $cfuhashids = new Hashids\Hashids('cfileupload', 15);
                $this->data['uid'] = $this->auth->getUid();
                $verification = $cfuhashids->encode($pmArray['pmid'],$this->auth->getUid());
                $this->data['verification'] = $verification;
                $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('不是原报人无法修改或重新上报变更令');
                }
                include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');
                //取标段位数设置
                $decimalnum = $this->getdecimal($changeArray['decimalnum']);
                $this->data['costdnum'] = $decimalnum['costdnum'];
                $this->data['numberdnum'] = $decimalnum['numberdnum'];
                //删除变更令
                if(isset($_POST['delete']) && !empty($_POST['delete']) && $changeArray['status'] == 'uncheck'){
                    //需要删除变更令表,清单表,变更审批人表,附件表及附件
                    $this->change->delChangebyCid($cid);
                    $this->change->delChangeAuditListbyCid($cid);
                    $this->change->delChangeAuditbyCid($cid);
                    $changeAttList = $this->change->getChangeAttListbycid($cid);
                    if(!empty($changeAttList)){
                        Doo::loadModel('changeatt');
                        include (DOO::conf()->SITE_PATH . 'protected/plugin/io.han.php');
                        $pathf = DOO::conf()->SITE_PATH;
                        foreach($changeAttList as $k => $v){
                            $this->IoHandler = new IoHandler();
                            $this->IoHandler->DeleteFile($pathf.$v['filepath']);
                            $changeAtt = new ChangeAtt();
                            $changeAtt->delChangeAttbyFid($v['id']);
                        }
                    }
                    return '/change/index/tender/'.$pmArray['pmid'];
                }
                //表单提交
                if(isset($_POST['pnum'])){
                    if(isset($_POST['status']) && $_POST['status'] == 'checking'){
                        if(empty($_POST['pnum']) || !isset($_POST['pname']) || empty($_POST['pname']) || !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();
                    $cauditlist2->delChangeAuditListbyCid($cid);
                    //清单添加,不分顺序,最终展示按清单编号排序
                    $total = 0;
                    if(!empty($_POST['changelist'])){
                        $clist = explode(',',$_POST['changelist']);
                        foreach($clist as $ck => $cv){
                            $clistid = explode('->',$cv)[0];
                            $clistarr = explode(';',explode('->',$cv)[1]);
                            if(!empty($clistarr[0]) && !empty($clistarr[1]) && is_numeric($clistarr[3]) && is_numeric($clistarr[4]) && is_numeric($clistarr[5])){
                                $changelistArr = $this->change->getChangeListbyid($clistid);
                                if(!empty($changelistArr)){
                                    $total += todecimal(floatval($changelistArr['unitprice'])*floatval($clistarr[5]),$decimalnum['costdnum']);
                                    $cauditlist = new ChangeAuditList();
                                    $cauditlist->pid = $pmArray['pid'];
                                    $cauditlist->stid = $pmArray['stid'];
                                    $cauditlist->pmid = $pmArray['pmid'];
                                    $cauditlist->cid = $cid;
                                    $cauditlist->lid = $clistid;
                                    $cauditlist->lnum = $changelistArr['lnum'];
                                    $cauditlist->lname = $changelistArr['lname'];
                                    $cauditlist->unit = $changelistArr['unit'];
                                    $cauditlist->unitprice = $changelistArr['unitprice'];
                                    $cauditlist->oamount = $changelistArr['amount'];
                                    $cauditlist->camount = $clistarr[5];
                                    $cauditlist->auditjson = json_encode($auditArr);
                                    $cauditlist->insert();
                                }else{
                                    $total += todecimal(floatval($clistarr[3])*floatval($clistarr[5]),$decimalnum['costdnum']);
                                    $cauditlist = new ChangeAuditList();
                                    $cauditlist->pid = $pmArray['pid'];
                                    $cauditlist->stid = $pmArray['stid'];
                                    $cauditlist->pmid = $pmArray['pmid'];
                                    $cauditlist->cid = $cid;
                                    $cauditlist->lid = 0;
                                    $cauditlist->lnum = $clistarr[0];
                                    $cauditlist->lname = $clistarr[1];
                                    $cauditlist->unit = $clistarr[2];
                                    $cauditlist->unitprice = $clistarr[3];
                                    $cauditlist->oamount = $clistarr[4];
                                    $cauditlist->camount = $clistarr[5];
                                    $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]) && is_numeric($wlistarr[3]) && is_numeric($wlistarr[4]) && is_numeric($wlistarr[5])){
                                $total += todecimal(floatval($wlistarr[3])*floatval($wlistarr[5]),$decimalnum['costdnum']);
                                $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,todecimal($total,$decimalnum['costdnum']));
                    $status = isset($_POST['status']) && $_POST['status'] == 'checking' ? 3 : 2;
                    return '/change/index/tender/'.$pmArray['pmid'].'/status/'.$status;
                }
                $this->data['companylist'] = $this->change->getCompanyList($pmArray['pmid']);
                $list = $this->change->getChangeListbyPmid($pmArray['pmid']);
                if(!empty($list)){
                    foreach($list as $k => $v){
                        $totalamount = floatval($v['unitprice'])*floatval($v['amount']);
                        $list[$k]['totalamount'] = todecimal($totalamount,2);
                        $list[$k]['index'] = $k+1;
                    }
                }
                //获取标段审批人列表
                $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']);
                        $osum = todecimal($osum,2);
                        $csum = todecimal(floatval($cv['unitprice'])*floatval($cv['camount']),$decimalnum['costdnum']);
                        $clist[$ck]['csum'] = $csum;
                        $ctotalnum += $csum;
                        //判断这条清单是否已被替换或删除,有则变成空白清单显示
                        $oneclist = $this->change->getChangeListbyid($cv['lid']);
                        if($cv['lid'] != 0 && !empty($oneclist)){
                            array_push($changeidlist,$cv['lid']);
                            array_push($changelist,$cv['lid'].'->'.$cv['lnum'].';'.$cv['lname'].';'.$cv['unit'].';'.$cv['unitprice'].';'.$cv['oamount'].';'.$cv['camount']);
                            $clist[$ck]['iswhite'] = 0;
                        }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;
                            $clist[$ck]['iswhite'] = 1;
                        }
                        $clist[$ck]['osum'] = $osum;
                        $ototalnum += $osum;
                    }
                }
                $this->data['changelist'] = implode(',',$changelist);
                $this->data['changewhitelist'] = implode(',',$changewhitelist);
                $this->data['changeidlist'] = implode(',',$changeidlist);
                $this->data['ototalnum'] = $ototalnum;
                $this->data['ctotalnum'] = todecimal($ctotalnum,$decimalnum['costdnum']);
                $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]['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;
                $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());
                //输出重新上报的审批列表信息
                if($changeArray['status'] == 'back'){
                    $creatorArray = $this->change->getChangeAuditLastUser($cid,0);
                    $auditlist2 = $this->change->getChangeAuditsbySort($cid,$creatorArray['times']);
                    $this->data['auditlist2'] = $auditlist2;
                }
                $cfuhashids = new Hashids\Hashids('cfileupload', 15);
                $this->data['uid'] = $this->auth->getUid();
                $verification = $cfuhashids->encode($pmArray['pmid'],$this->auth->getUid());
                $this->data['verification'] = $verification;
//                $this->data['stepnumdnum'] = $this->makestep(intval($decimalnum['numberdnum']));
                $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 .= '';
                }
            }
            if(!empty($_POST['ac'])){
                $addarr = $_POST['ac'];
                $pmArray = $this->actmeasure->getRowByPmid($_POST['pmid']);
                foreach($addarr as $ak => $av){
                    if(!empty(trim($av))){
                        $company2 = new ChangeCompany();
                        $company2->pid = $pmArray['pid'];
                        $company2->stid = $pmArray['stid'];
                        $company2->pmid = $pmArray['pmid'];
                        $company2->name = $av;
                        $id = $company2->insert();
                        $selecthtml .= '';
                        $addhtml .= '';
                    }
                }
            }
            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(){
//        session_write_close();
//        if(isset($_POST['sessionid'])){
//            session_id($_POST['sessionid']);
//            setcookie('PHPSESSID',$_POST['sessionid']);
//            session_start();
//        }
        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 setDecimalnum(){
        $num = array(0,1,2,3,4,5,6);
        if(isset($_POST['costdnum']) && isset($_POST['numberdnum']) && in_array(intval($_POST['costdnum']), $num) && in_array(intval($_POST['numberdnum']), $num)){
            $dnum = intval($_POST['costdnum']).'_'.intval($_POST['numberdnum']);
            //判断更改类型
            if(isset($_POST['pmid']) && is_numeric($_POST['pmid'])){
                $pmArray = $this->actmeasure->getRowByPmid($_POST['pmid']);
                if(!empty($pmArray)){
                    $this->actmeasure->updateChangeDecimalNum($_POST['pmid'],$dnum);
                    exit(json_encode(array('code' => 200,'msg' => '更新小数位数成功')));
                }else{
                    exit(json_encode(array('code' => 400,'msg' => '不存在此标段')));
                }
            }elseif(isset($_POST['cid']) && is_numeric($_POST['cid'])){
                $changeArray = $this->change->getChangebyid($_POST['cid']);
                if(!empty($changeArray)){
                    $this->change->updateChangeDecimalNum($_POST['cid'],$dnum);
                    exit(json_encode(array('code' => 200,'msg' => '更新小数位数成功')));
                }else{
                    exit(json_encode(array('code' => 400,'msg' => '不存在此变更令')));
                }
            }
        }
        exit(json_encode(array('code' => 400,'msg' => '参数或小数位数有误')));
    }
    //根据位数生成几位小数,0位-》1,1位-》0.1 ,5位-》0.00001
    function makestep($num){
        if($num >= 1 && $num <= 6){
            $arr = [];
            for($i=0;$i< $num;$i++){
                if($i != $num-1){
                    $arr[$i] = 0;
                }else{
                    $arr[$i] = 1;
                }
            }
        return '0.'.implode('',$arr);
    }else{
            return 1;
        }
    }
    //获取costdnum和numberdnum
    function getdecimal($arr){
        //取变更令位数设置
        $decimalnum = explode('_',$arr);
        $decimal = array();
        $decimal['costdnum'] = $decimalnum[0];
        $decimal['numberdnum'] = $decimalnum[1];
        return $decimal;
    }
    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);
    }
}
?>