'未审批', 'checking' => '审批中', 'checked' => '审批通过', 'checkno' => '审批不通过'); private $changeType = array('2' => 'A.数量', '1' => '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', '6' => 'del'); 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->getRowUser2($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); $this->data['num6'] = $this->change->getNumbystatus($pmid,'del','',$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 .= ''; $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 .= ''; $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 .= ''; $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 .= ''; foreach($utotalarr as $tk => $tv){ $addtd = $tv['usum'] != 0 ? todecimal($tv['usum'],$decimalnum['costdnum']) : ''; $listtablehtml .= ''; } $listtablehtml .= '
清单编号名称单位单价原设计申报变更增(+)减(-)数量 金额 数量 金额'.$av['name'].' 审批数量金额
' . $cv['lnum'] . '' . $cv['lname'] . '' . $cv['unit'] . '' . tofloat($cv['unitprice']) . '' . $cv['oamount'] . '' . $osum . '' . $cv['camount'] . '' . $csum . ''.$uv['ucamount'].''.$usum.'
合计'.$ototalnum.''.todecimal($ctotalnum,$decimalnum['costdnum']).''.$addtd.'
'; 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); if(!empty($auditlist)){ foreach($auditlist as $ak => $av){ $auditlist[$ak]['email'] = $this->auth->getEmail($av['uid']); $auditlist[$ak]['lastusite'] = $this->change->getChangeAuditsMaxUsite($cid,$av['times'])['maxsite']; } } $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(); $useridlist = 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']; $userlist[$k]['email'] = $this->auth->getEmail($v['auditoruid']); array_push($useridlist, $usermsg['userid']); } } 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']; $orginArray['email'] = $this->auth->getEmail($measureArray['uid']); array_push($userlist,$orginArray); array_push($useridlist, $usermsg2['userid']); } $this->data['pmArray'] = $pmArray; $this->data['userlist'] = $userlist; $this->data['useridlist'] = implode(',',$useridlist); $userArray = $this->auth->getRowByUid($this->auth->getUid()); $userArray['email'] = $this->auth->getEmail($this->auth->getUid()); $this->data['userArray'] = $userArray; $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); //获取uid最新上报人信息 $userArray = $this->auth->getRowByUid($auditArray['uid']); $auditArray['company'] = $userArray['company']; $auditArray['jobs'] = $userArray['jobs']; $auditArray['name'] = $userArray['name']; //获取最后一个审批人的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 .= ''; $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 .= ''; $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 .= ''; }else{ if($uv['ucamount'] != ''){ $usum = todecimal(floatval($cv['unitprice'])*floatval($uv['ucamount']),$decimalnum['costdnum']); $tdhtml .= ''; //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 .= ''; 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 .= '
清单编号名称单位单价原设计申报变更增(+)减(-)数量 金额 数量 金额'.$av['name'].' 审批数量金额
' . $cv['lnum'] . '' . $cv['lname'] . '' . $cv['unit'] . '' . tofloat($cv['unitprice']) . '' . $cv['oamount'] . '' . $osum . '' . $cv['camount'] . '' . $csum . ''.$ssum.''.$uv['ucamount'].''.$usum.'
合计'.$ototalnum.''.todecimal($ctotalnum,$decimalnum['costdnum']).'
'; $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); if(!empty($auditlist2)){ foreach($auditlist2 as $ak => $av){ $auditlist2[$ak]['email'] = $this->auth->getEmail($av['uid']); $auditlist2[$ak]['lastusite'] = $this->change->getChangeAuditsMaxUsite($cid,$av['times'])['maxsite']; } } $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(); $useridlist = 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']; $userlist[$k]['email'] = $this->auth->getEmail($v['auditoruid']); array_push($useridlist, $usermsg['userid']); } } 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']; $orginArray['email'] = $this->auth->getEmail($measureArray['uid']); array_push($userlist,$orginArray); array_push($useridlist, $usermsg2['userid']); } //获取已选审批人列表,生成changeaudit和selectauditlist,并把未在常用审批人的uid找出来 $auditlist = $this->change->getChangeAuditsbycidtime($cid,$changeArray['times']); $changeauditList = array(); $selectauditlist = array(); foreach($auditlist as $adk => $adv){ $email = $this->auth->getEmail($adv['uid']); $auditlist[$adk]['email'] = $email; $auditlist[$adk]['lastusite'] = count($auditlist); array_push($changeauditList,$adv['uid']); $addauditlist = $adv['uid'].'_'.$adv['name'].'_'.$adv['company'].'_'.$adv['jobs'].'_'.$email; array_push($selectauditlist,$addauditlist); // if(!in_array($adv['uid'],$useridlist)){ // $auditlist[$adk]['email'] = $this->auth->getEmail($adv['uid']); // array_push($useridlist,$adv['uid']); // } $auditlist[$adk]['islast'] = $adk+1 == count($auditlist) ? 1 : 0; } $this->data['changeaudit'] = implode(',',$changeauditList); $this->data['selectauditlist'] = implode('->',$selectauditlist); $this->data['auditlist'] = $auditlist; //获取已选清单列表,已选清单id列表,属于签约清单的changelist,和changewhitelist $clist = $this->change->getChangeAuditListbycid($cid); $ototalnum = 0; $ctotalnum = 0; $changeidlist = array(); $changelist = array(); $changewhitelist = array(); $changeRepeatList = array(); $changeRepeatWhiteList = 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; array_push($changeRepeatList, $cv['lnum'].'|'.$cv['lname'].'|'.$cv['unit'].'|'.$cv['unitprice']); }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; array_push($changeRepeatWhiteList, $cv['lnum'].'|'.$cv['lname'].'|'.$cv['unit'].'|'.$cv['unitprice']); } $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; $this->data['changeRepeatList'] = implode(',',$changeRepeatList); $this->data['changeRepeatWhiteList'] = implode(',',$changeRepeatWhiteList); //获取已添加的附件列表 $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['useridlist'] = implode(',',$useridlist); $userArray = $this->auth->getRowByUid($this->auth->getUid()); $userArray['email'] = $this->auth->getEmail($this->auth->getUid()); $this->data['userArray'] = $userArray; $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']); if(!empty($auditlist2)){ foreach($auditlist2 as $ak => $av){ $auditlist2[$ak]['email'] = $this->auth->getEmail($av['uid']); $auditlist2[$ak]['lastusite'] = $this->change->getChangeAuditsMaxUsite($cid,$av['times'])['maxsite']; } } $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)){ $useridlist = $_POST['useridlist']; $userlist = array(); foreach($usermsg as $k => $v){ if(!in_array($v['userid'], $useridlist)){ $usermsg[$k]['email'] = $this->auth->getEmail($v['userid']); array_push($userlist,$usermsg[$k]); } } if(!empty($userlist)){ echo json_encode(array('code' => 200, 'userlist' => $userlist)); exit; }else{ echo json_encode(array('code' => 400, 'msg' => '常用中已存在当前审批人')); 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); } } ?>