insertGetId($data); if(!$recordId){ \exception('数据保存失败'); } // 生成消息及推送提醒 if($data['type'] == 3){ $context = $title.',抄送给您,请知晓。'; } else if($data['type'] == 9){ $context = $title.',需要您去执行,请知晓。'; } else { if(isset($data['back']) && $data['back'] == 1){ $context = $title.'被打回,请您重新审批。'; }else{ $context = $title.'需要您审批。'; } } $res = model('Message')->add(2,$recordId,2,$data['user_id'],$orgId,$context); if(!$res){ \exception('消息生成失败'); } return true; }catch (Exception $e){ $this->error = $e->getMessage(); return false; } } // 审批单生成时审批记录生成 public function createRecord($applyId,$data){ // flowJson排序 $flowJson = sort_flow_json(json_decode($data['flow_json'],true)); $curTime = date('Y-m-d H:i:s'); $nodeid = ''; $status = 1; $users = []; foreach ($flowJson as $k=>$v){ $nodeid = $v['id']; if($v['type'] == 9||$v['type'] == 3){ // 节点是执行人或审批人时 foreach ($v['userList'] as $kk=>$vv){ $users[] = [ 'user_id' => $vv['userId'], 'nodeid' => $v['id'], 'type' => $v['type'] ]; } } else if($v['type'] == 2||$v['type'] == 8){ // 审批人 foreach ($v['userList'] as $kk=>$vv){ $users[] = [ 'user_id' => $vv['userId'], 'nodeid' => $v['id'], 'type' => $v['type'] ]; } break; } else if($v['type'] == 5){ // 流程结束 $status = 2; } } try{ if($status == 2){ // 流程结束 $ret = Db::name('apply')->where('id',$applyId)->update([ 'status' => 2, 'finish_time' => $curTime, 'update_time' => $curTime, 'nodeid' => $nodeid ]); if(!$ret){ \exception('流程状态修改失败1'); } // 生成消息记录 $context = "温馨提醒,".$data['title']."(编号:".$data['apply_sn'].")已通过。"; $mres = model('Message')->add(3,$applyId,4,$data['user_id'],$data['org_id'],$context); if(!$mres){ \exception('消息生成失败'); } if($data['advanced'] > 0){ // 流程结束高级组件执行逻辑 $aret = $this->advancedEndAction($applyId,$data['org_id'],$data['user_id'],$data['form_json'],$data['advanced']); if(!$aret){ \exception('操作失败'); } } } else { // 审批中 $ret = Db::name('apply')->where('id',$applyId)->update([ 'status' => 1, 'update_time' => $curTime, 'nodeid' => $nodeid ]); if(!$ret){ \exception('流程状态修改失败2'.$ret); } } if($users){ foreach ($users as $k=>$v){ $v['apply_id'] = $applyId; $v['status'] = 0; $v['create_time'] = $curTime; $res = model('ApplyRecord')->add($v,$data['org_id'],$data['title']); if(!$res){ \exception('流程记录生成失败'); } } } return true; }catch (Exception $e){ $this->error = $e->getMessage(); return false; } } // 记录修改为已阅 public function updateStatus($id,$userId){ $info = Db::name('apply_record')->where('id',$id)->where('user_id',$userId)->find(); if($info && $info['status'] == 0){ Db::name('apply_record') ->where('id',$id) ->update(['status' => 1,'finish_time' => date('Y-m-d H:i:s')]); } } // 打回到上一级 public function back($id,$userId){ $info = Db::name('apply_record') ->alias('ar') ->join('apply a','a.id = ar.apply_id') ->where('ar.id',$id) ->where('ar.del',0) ->where('a.del',0) ->where('ar.type','in',[2,8]) ->where('ar.user_id',$userId) ->field('ar.*,a.title,a.org_id,a.flow_json') ->find(); if(!$info){ HelpHander::error('数据不存在'); } // 判断是否有上个审批节点 $f = Db::name('apply_record') ->where('status',1) ->where('apply_id',$info['apply_id']) ->where('type','in',[2,8]) ->where('del',0) ->where('nodeid','<>',$info['nodeid']) ->order('id desc') ->find(); if(!$f){ HelpHander::error('不能打回到拟稿人'); } $flist = Db::name('apply_record') ->where('apply_id',$info['apply_id']) ->where('type','in',[2,8]) // ->where('status','<>',3) // 已转交的记录不用审核 ->where('del',0) ->where('nodeid',$f['nodeid']) ->select(); $flist = $flist?$flist:[]; Db::startTrans(); try{ // 删除上一节点 $fids = []; foreach ($flist as $k=>$v){ $fids[] = $v['id']; } // 同节点已审批的人发通知提醒打回上一节点 $ulist = Db::name('apply_record') ->where('apply_id',$info['apply_id']) ->where('nodeid',$info['nodeid']) ->where('del',0) ->where('status',1) ->field('user_id,id') ->select(); $ulist = $ulist?$ulist:[]; // 操作节点记录删除 $ids = Db::name('apply_record') ->where('apply_id',$info['apply_id']) ->where('nodeid',$info['nodeid']) ->where('del',0) ->column('id'); $rids = array_merge($fids,$ids); $res = Db::name('apply_record')->where('id','in',$rids)->setField('del',1); if(!$res){ \exception('操作失败'); } // 给每条记录打回人 $res = Db::name('apply_record')->where('id','in',$ids)->setField('back_user_id',$id); if(!$res){ \exception('操作失败'); } Db::name('message') ->where('type',2) ->where('bus_type',2) ->where('org_id',$info['org_id']) ->where('bus_id','in',$rids) ->delete(); // 修改申请记录当前节点 $ret = Db::name('apply')->where('id',$info['apply_id'])->setField('nodeid',$f['nodeid']); if(!$ret){ \exception('操作失败'); } //把上一节点的审核人记录,重新生成,重新通知 foreach ($flist as $k=>$v){ if($v['status'] == 3){ // 被转交的不生成记录 continue; } $data = [ 'user_id' => $v['user_id'], 'apply_id' => $v['apply_id'], 'status' => 0, 'nodeid' => $v['nodeid'], 'type' => $v['type'], 'create_time' => date('Y-m-d H:i:s'), 'back' => 1, 'back_user_id' => $userId ]; $res = $this->add($data,$info['org_id'],$info['title']); if(!$res){ \exception('转交失败'); } // 提醒放到最后 $backusername = Db::name('user_info')->where('user_id',$userId)->value('name'); $context = '['.$backusername.']把'.$info['title'].'打回上一审批节点,请知晓。'; foreach ($ulist as $k=>$v){ model('Message')->add(3,$v['id'],0,$v['user_id'],$info['org_id'],$context); } } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error('操作失败'); } return true; } // 转交 public function transferApply($id,$userId,$transferUserId){ if($userId == $transferUserId){ HelpHander::error('被转交人不能是自己'); } if($transferUserId <= 0){ HelpHander::error('未选择被转交人'); } $info = Db::name('apply_record') ->alias('ar') ->join('apply a','a.id = ar.apply_id') ->where('ar.id',$id) ->where('ar.del',0) ->where('a.del',0) ->where('ar.user_id',$userId) ->field('ar.*,a.title,a.org_id') ->find(); if(!$info){ HelpHander::error('数据不存在'); } if($info['type'] == 3||$info['type'] == 9){ HelpHander::error('无法转交'); } if($info['status'] != 0){ HelpHander::error('已处理,无法转交'); } $transfer = Db::name('apply_record')->where('del',0)->where('apply_id',$info['apply_id'])->where('user_id',$transferUserId)->find(); if($transfer){ HelpHander::error('被转交人已参与审批,无法再次转交'); } Db::startTrans(); try{ $ret = Db::name('apply_record')->where('id',$id)->setField('status',3); if(!$ret){ \exception('转交失败'); } $data = [ 'user_id' => $transferUserId, 'apply_id' => $info['apply_id'], 'status' => 0, 'nodeid' => $info['nodeid'], 'type' => 2, 'transfer' => 1, 'create_time' => date('Y-m-d H:i:s') ]; $res = $this->add($data,$info['org_id'],$info['title']); if(!$res){ \exception('转交失败'); } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error('转交失败'); } return true; } // 会签 public function aggregationApproval($id,$userId,$userIds){ $userIds = explode(',',$userIds); $info = Db::name('apply_record') ->alias('ar') ->join('apply a','a.id = ar.apply_id') ->where('ar.id',$id) ->where('ar.del',0) ->where('a.del',0) ->where('ar.user_id',$userId) ->field('ar.*,a.title,a.org_id,a.flow_json') ->find(); if(!$info){ HelpHander::error('数据不存在'); } if($info['type'] == 3||$info['type'] == 9){ HelpHander::error('无法会签'); } if($info['status'] != 0){ HelpHander::error('已处理,无法会签'); } // 检查当前节点是会签还是或签,或签无法加人会签 $flowJson = json_decode($info['flow_json'],true); foreach ($flowJson as $k=>$v){ if($v['id'] == $info['nodeid'] && $v['mode'] == 2){ HelpHander::error('该节点为或签,无法添加会签'); } } $oldusers = Db::name('apply_record') ->where('nodeid',$info['nodeid']) ->where('apply_id',$id) ->where('del',0) ->column('user_id'); $jjuser = array_intersect($userIds, $oldusers); if($jjuser){ HelpHander::error('存在用户已是会签人员'); } Db::startTrans(); try{ foreach ($userIds as $k=>$v){ $data = [ 'user_id' => $v, 'apply_id' => $info['apply_id'], 'status' => 0, 'nodeid' => $info['nodeid'], 'type' => 2, 'countersign' => 1, 'create_time' => date('Y-m-d H:i:s') ]; $res = $this->add($data,$info['org_id'],$info['title']); if(!$res){ \exception('会签失败'); } } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error('会签失败'); } return true; } // 加签 public function addSign($id,$userId,$addUserId,$type=0){ $info = Db::name('apply_record') ->alias('ar') ->join('apply a','a.id = ar.apply_id') ->where('ar.id',$id) ->where('ar.del',0) ->where('a.del',0) ->where('ar.user_id',$userId) ->field('ar.*,a.title,a.org_id,a.flow_json') ->find(); if(!$info){ HelpHander::error('数据不存在'); } if($info['type'] == 3||$info['type'] == 9){ HelpHander::error('无法加签'); } if($info['status'] != 0){ HelpHander::error('已处理,无法加签'); } $lastNode = ''; // 最后一个审批节点 $node = []; // 检查当前节点是会签还是或签,或签无法加签 $flowJson = sort_flow_json(json_decode($info['flow_json'],true)); foreach ($flowJson as $k=>$v){ if($v['id'] == $info['nodeid'] && $v['mode'] == 2){ HelpHander::error('该节点为或签,无法加签'); } if($v['type'] == 2||$v['type'] == 8){ $lastNode = $v['id']; } if($v['id'] == $info['nodeid']){ $node = $v; } } // 检查是否多人会签,多人会签无法加签 $oldusers = Db::name('apply_record') ->where('nodeid',$info['nodeid']) ->where('apply_id',$id) ->where('del',0) ->column('user_id'); if(count($oldusers) > 1 || in_array($addUserId,$oldusers)){ HelpHander::error('无权限加签'); } if($type == 1 && $lastNode != $info['nodeid']){ // 往后加签,检查是否是最后一个审批节点 HelpHander::error('无权限加签'); } $user = Db::name('user_info') ->where('user_id',$addUserId) ->field('user_id,name') ->find(); Db::startTrans(); try{ if($type == 0){ $addnode = $node; $addnode['id'] = 'addnode'.time().rand(1000,9999); $addnode['nextId'] = $node['id']; $addnode['type'] = 8; $addnode['name'] = '加签'; $addnode['userList'] = [[ "userName" => $user['name'], "shortName" => mb_strlen($user['name']) > 2 ? mb_substr($user['name'], 0, -2) : $user['name'], "userId" => $user['user_id'] ]]; foreach ($flowJson as $k=>$v){ if($v['nextId'] == $info['nodeid']){ $flowJson[$k]['nextId'] = $addnode['id']; } } $flowJson[] = $addnode; $flowJson = sort_flow_json($flowJson); // 修改审批单信息 $ret = Db::name('apply')->where('id',$info['apply_id'])->update([ 'nodeid' => $addnode['id'], 'flow_json' => json_encode($flowJson,JSON_UNESCAPED_UNICODE), 'update_time' => date('Y-m-d H:i:s') ]); if(!$ret){ \exception('加签失败'); } // 删除原来节点记录及消息 $ids = Db::name('apply_record') ->where('apply_id',$info['apply_id']) ->where('nodeid',$info['nodeid']) ->where('del',0) ->column('id'); Db::name('apply_record')->where('id','in',$ids)->setField('del',1); Db::name('message') ->where('type',2) ->where('bus_type',2) ->where('org_id',$info['org_id']) ->where('bus_id','in',$ids) ->delete(); $data = [ 'user_id' => $addUserId, 'apply_id' => $info['apply_id'], 'status' => 0, 'nodeid' => $addnode['id'], 'type' => 8, 'create_time' => date('Y-m-d H:i:s') ]; $res = $this->add($data,$info['org_id'],$info['title']); if(!$res){ \exception('加签失败'); } }else{ $addnode = $node; $addnode['id'] = 'addnoder'.time().rand(1000,9999); $addnode['type'] = 8; $addnode['name'] = '加签'; $addnode['userList'] = [[ "userName" => $user['name'], "shortName" => mb_strlen($user['name']) > 2?mb_substr($user['name'], 0, -2):$user['name'], "userId" => $user['user_id'] ]]; foreach ($flowJson as $k=>$v){ if($v['id'] == $info['nodeid']){ $flowJson[$k]['nextId'] = $addnode['id']; } } $flowJson[] = $addnode; $flowJson = sort_flow_json($flowJson); // 修改审批单信息 $ret = Db::name('apply')->where('id',$info['apply_id'])->update([ 'flow_json' => json_encode($flowJson,JSON_UNESCAPED_UNICODE), 'update_time' => date('Y-m-d H:i:s') ]); if(!$ret){ \exception('加签失败'); } } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error('加签失败'.$e->getMessage()); } return true; } // 同意 public function audit($id,$userId,$content,$formJson,$userList){ $info = Db::name('apply_record') ->where('id',$id) ->where('del',0) ->where('user_id',$userId) ->find(); if(!$info){ HelpHander::error('数据不存在'); } if($info['type'] == 3||$info['type'] == 9){ HelpHander::error('无法执行此操作'); } if($info['status'] != 0){ HelpHander::error('已处理'); } $apply = Db::name('apply')->where('del',0)->where('id',$info['apply_id'])->find(); if(!$apply){ HelpHander::error('数据不存在'); } $flowJson = sort_flow_json(json_decode($apply['flow_json'],true)); $curNode = $this->getNodeFlowJson($flowJson,$info['nodeid']); $next = 0; // 是否走到下一流程 if($curNode['mode'] == '1'){ // 会签 // 检查是否该到下一流程 $count = Db::name('apply_record') ->where('apply_id',$info['apply_id']) ->where('nodeid',$info['nodeid']) ->where('status',0) ->where('del',0) ->count(); if($count == 1){ // 下一流程 $next = 1; } } else { // 或签 $next = 1; } $isexecutor = 0; foreach ($flowJson as $k=>$v){ if($v['type'] == 9){ $isexecutor = 1; break; } } $curTime = date('Y-m-d H:i:s'); $duration = round((strtotime($curTime) - strtotime($info['create_time']))/3600,2); // 时长 $applyduration = round((strtotime($curTime) - strtotime($apply['create_time']))/3600,2); // 时长 Db::startTrans(); try{ $ret = Db::name('apply_record') ->where('id',$id) ->update([ 'status' => 1, 'finish_time'=>$curTime, 'content' => $content, 'duration' => $duration ]); if(!$ret){ \exception('操作失败'); } if($formJson || $userList){ // formJson或$userList有变化 if($formJson){ $ad['form_json'] = $formJson; // formJson日志记录 $res = Db::name('apply_form_log')->insert([ 'apply_id' => $info['apply_id'], 'user_id' => $userId, 'form_json' => $formJson, 'create_time' => $curTime ]); if(!$res){ \exception('数据保存失败'); } } if($isexecutor == 1){ foreach ($flowJson as $k=>$v){ if($v['type'] == 9){ $flowJson[$k]['userList'] = json_decode($userList,true); break; } } $ad['flow_json'] = json_encode($flowJson,JSON_UNESCAPED_UNICODE); } $ad['update_time'] = $curTime; $ret = Db::name('apply')->where('id',$info['apply_id'])->update($ad); if(!$ret){ \exception('数据修改失败'); } } if($next == 1){ // 流转到下一节点 Db::name('apply_record') ->where('id','<>',$id) ->where('apply_id',$info['apply_id']) ->where('status',0) ->where('del',0) ->where('nodeid',$info['nodeid']) ->setField('status',4); $nodeid = $curNode['nextId']; $status = 1; $users = []; while (true){ $nextNode = $this->getNodeFlowJson($flowJson,$nodeid); if($nextNode['type'] == 9||$nextNode['type'] == 3){ // 节点是执行人或审批人时 foreach ($nextNode['userList'] as $kk=>$vv){ $users[] = [ 'user_id' => $vv['userId'], 'nodeid' => $nextNode['id'], 'type' => $nextNode['type'] ]; } $nodeid = $nextNode['nextId']; } else if($nextNode['type'] == 2||$nextNode['type'] == 8){ // 审批人 // 检查当前nodeid是否有记录,有记录按记录的生成(下级的审核人与原始的不同,需要从删除的记录中取) $buid = Db::name('apply_record') ->where('apply_id',$info['apply_id']) ->where('del',1) ->where('nodeid',$nextNode['id']) ->where('status','<>',3) // 被转交的不用取 ->where('back_user_id','>',0) // 被转交的不用取 ->order('id desc') ->value('back_user_id'); if($buid){ $ulist = Db::name('apply_record') ->where('apply_id',$info['apply_id']) ->where('del',1) ->where('nodeid',$nextNode['id']) ->where('status','<>',3) // 被转交的不用取 ->where('back_user_id',$buid) // 被转交的不用取 ->field('user_id as userId') ->select(); }else{ $ulist = $nextNode['userList']; } foreach ($ulist as $kk=>$vv){ $users[] = [ 'user_id' => $vv['userId'], 'nodeid' => $nextNode['id'], 'type' => $nextNode['type'] ]; } break; } else if($nextNode['type'] == 5){ // 流程结束 $status = 2; break; } } if($status == 2){ // 流程结束 $ret = Db::name('apply')->where('id',$info['apply_id'])->update([ 'status' => 2, 'finish_time' => $curTime, 'update_time' => $curTime, 'nodeid' => $nodeid, 'duration' => $applyduration ]); if(!$ret){ \exception('信息修改失败'); } // 生成消息记录 $context = "温馨提醒,".$apply['title']."(编号:".$apply['apply_sn'].")已通过。"; $mres = model('Message')->add(3,$info['apply_id'],4,$apply['user_id'],$apply['org_id'],$context); if(!$mres){ \exception('消息生成失败'); } if($apply['advanced'] > 0){ // 流程结束高级组件执行逻辑 $aret = $this->advancedEndAction($apply['id'],$apply['org_id'],$apply['user_id'],$apply['form_json'],$apply['advanced']); if(!$aret){ \exception('操作失败'); } } } else { // 审批中 $ret = Db::name('apply')->where('id',$info['apply_id'])->update([ 'status' => 1, 'update_time' => $curTime, 'nodeid' => $nodeid ]); if(!$ret){ \exception('信息修改失败'); } } if($users){ foreach ($users as $k=>$v){ $v['apply_id'] = $info['apply_id']; $v['status'] = 0; $v['create_time'] = $curTime; $res = $this->add($v,$apply['org_id'],$apply['title']); if(!$res){ \exception('流程记录生成失败'); } } } } Db::commit(); }catch (Exception $e){ trace($e->getMessage()); Db::rollback(); HelpHander::error('操作失败'.$e->getMessage()); } return true; } // 打回/拒绝 public function toBack($applyId,$userId,$content){ $info = Db::name('apply_record') ->alias('ar') ->join('apply a','a.id = ar.apply_id') ->where('a.id',$applyId) ->where('ar.user_id',$userId) ->where('ar.status',0) ->where('ar.del',0) ->field('ar.*') ->find(); if(!$info){ HelpHander::error('数据不存在'); } if($info['type'] == 3||$info['type'] == 9){ HelpHander::error('无法操作'); } if($info['status'] != 0){ HelpHander::error('已处理'); } $apply = Db::name('apply')->where('id',$info['apply_id'])->where('del',0)->find(); if(!$apply){ HelpHander::error('数据不存在'); } $curTime = date('Y-m-d H:i:s'); $duration = round((strtotime($curTime) - strtotime($info['create_time']))/3600,2); // 时长 $applyduration = round((strtotime($curTime) - strtotime($apply['create_time']))/3600,2); // 时长 Db::startTrans(); try{ $ret = Db::name('apply_record')->where('id',$info['id'])->update([ 'status' => 2, 'content' => $content, 'finish_time' => $curTime, 'duration' => $duration ]); if(!$ret){ \exception('操作失败'); } Db::name('apply_record') ->where('id','<>',$info['id']) ->where('status',0) ->where('apply_id',$info['apply_id']) ->where('nodeid',$info['nodeid']) ->setField('status',4); $res = Db::name('apply')->where('id',$applyId)->update([ 'status' => 5, 'finish_time' => $curTime, 'duration' => $applyduration ]); if(!$res){ \exception('操作失败'); } $result = $this->advancedDisagreeAction($applyId,$apply['advanced']); if(!$result){ \exception('操作失败'); } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error('操作失败'.$e->getMessage()); } return true; } // 获取node信息 public function getNodeFlowJson($flowJson,$nodeId){ $curNode = []; foreach ($flowJson as $k=>$v){ if($v['id'] == $nodeId){ $curNode = $v; break; } } return $curNode; } // 高级组件执行操作 -- 流程申请时 public function advancedStartAction($id,$orgId,$userId,$formJson,$advanced,$extra=[]){ switch ($advanced){ case '1': // 请假 $ret = model('AttendanceLeave')->advancedStartLeave($id,$orgId,$userId,$formJson); break; case '3': // 合同 $ret = model('Contract')->advancedStartContract($id,$orgId,$userId,$formJson); break; case '4': // 追加合同 $ret = model('Contract')->advancedStartAddContract($id,$orgId,$userId,$formJson); break; case '5': // 合同付款 $ret = model('ContractPay')->advancedStartContractPay($id,$orgId,$userId,$formJson); break; case '6': // 会议室预定 $ret = model('MeetingRoom')->advancedStartMeetingRoom($id,$orgId,$userId,$formJson,$extra); break; case '7': // 合同收款 $ret = model('ContractPay')->advancedStartContractGet($id,$orgId,$userId,$formJson); break; case '8': // 销假 $ret = model('AttendanceLeaveTerminate')->advancedStartLeaveTerminate($id,$orgId,$userId,$formJson); break; case '9': // 离京报告 $ret = model('LeaveBj')->advancedStartLeaveBj($id,$orgId,$userId,$formJson); break; case '10': // 办公物品 $ret = model('OfficeReceive')->advancedStartOfficeReceive($id,$orgId,$userId,$formJson,$extra); break; case '11': // 用车 $ret = model('CarRecord')->advancedStartCarRecord($id,$orgId,$userId,$formJson,$extra); break; case '13': // 资产领取 $ret = model('AssetReceive')->advancedStartAssetReceive($id,$orgId,$userId,$formJson,$extra); break; case '14': // 资产退库 $ret = model('AssetWithdraw')->advancedStartAssetWithdraw($id,$orgId,$userId,$formJson,$extra); break; case '15': // 资产维修 $ret = model('AssetRepair')->advancedStartAssetRepair($id,$orgId,$userId,$formJson,$extra); break; case '16': // 资产处置 $ret = model('AssetDisposal')->advancedStartAssetDisposal($id,$orgId,$userId,$formJson,$extra); break; case '17': // 预算 $ret = model('BudgetApply')->advancedStartBudgetApply($id,$orgId,$userId,$formJson,$extra); break; case '18': // 用印 $ret = model('OfficialSealApply')->advancedStartSealApply($id,$orgId,$userId,$formJson,$extra); break; case '19': // 中心发文 $ret = model('PostApply')->advancedStartPostApply($id,$orgId,$userId,$formJson,$extra); break; case '20': // 因私出国 $ret = model('AbroadApply')->advancedStartAbroadApply($id,$orgId,$userId,$formJson,$extra); break; case '21': // 日常支出 $ret = model('BudgetPay')->advancedStartBudgetPay($id,$orgId,$userId,$formJson,$extra); break; default: $ret = true; break; } return $ret; } // 高级组件执行操作 -- 流程结束时 public function advancedEndAction($id,$orgId,$userId,$formJson,$advanced){ switch ($advanced){ case '1': // 请假 $ret = model('AttendanceLeave')->advancedEndLeave($id,$orgId,$userId,$formJson); break; case '3': // 合同 $ret = model('Contract')->advancedEndContract($id,$orgId,$userId,$formJson); break; case '4': // 追加合同 $ret = model('Contract')->advancedEndAddContract($id,$orgId,$userId,$formJson); break; case '5': // 合同支付 $ret = model('ContractPay')->advancedEndContractPay($id,$orgId,$userId,$formJson); break; case '6': // 会议室预定 $ret = model('MeetingRoom')->advancedEndMeetingRoom($id,$orgId,$userId,$formJson); break; case '7': // 合同收款 $ret = model('ContractPay')->advancedEndContractGet($id,$orgId,$userId,$formJson); break; case '8': // 销假 $ret = model('AttendanceLeaveTerminate')->advancedEndLeaveTerminate($id,$orgId,$userId,$formJson); break; case '9': // 离京报告 $ret = model('LeaveBj')->advancedEndLeaveBj($id,$orgId,$userId,$formJson); break; case '10': // 办公物品 $ret = model('OfficeReceive')->advancedEndOfficeReceive($id,$orgId,$userId,$formJson); break; case '11': // 用车 $ret = model('CarRecord')->advancedEndCarRecord($id,$orgId,$userId,$formJson); break; case '12': // 离职或退休 $ret = model('UserInfo')->advancedEndUserInfo($id,$orgId,$userId,$formJson); break; case '13': // 资产领取 $ret = model('AssetReceive')->advancedEndAssetReceive($id,$orgId,$userId,$formJson); break; case '14': // 资产退库 $ret = model('AssetWithdraw')->advancedEndAssetWithdraw($id,$orgId,$userId,$formJson); break; case '15': // 资产维修 $ret = model('AssetRepair')->advancedEndAssetRepair($id,$orgId,$userId,$formJson); break; case '16': // 资产处置 $ret = model('AssetDisposal')->advancedEndAssetDisposal($id,$orgId,$userId,$formJson); break; case '17': // 预算 $ret = model('BudgetApply')->advancedEndBudgetApply($id,$orgId,$userId,$formJson); break; case '18': // 用印 $ret = model('OfficialSealApply')->advancedEndSealApply($id,$orgId,$userId,$formJson); break; case '19': // 中心发文 $ret = model('PostApply')->advancedEndPostApply($id,$orgId,$userId,$formJson); break; case '20': // 因私出国 $ret = model('AbroadApply')->advancedEndAbroadApply($id,$orgId,$userId,$formJson); break; case '21': // 日常支出 $ret = model('BudgetPay')->advancedEndBudgetPay($id,$orgId,$userId,$formJson); break; default: $ret = true; break; } return $ret; } public function advancedDisagreeAction($applyId,$advanced){ switch ($advanced){ case '1': // 请假 $ret = model('AttendanceLeave')->advancedDisagreeLeave($applyId); break; case '3': // 合同 $ret = model('Contract')->advancedDisagreeContract($applyId); break; case '4': // 追加合同 $ret = model('Contract')->advancedDisagreeAddContract($applyId); break; case '5': // 合同支付 $ret = model('ContractPay')->advancedDisagreeContractPay($applyId); break; case '6': // 会议室预定 $ret = model('MeetingRoom')->advancedDisagreeMeetingRoom($applyId); break; case '7': // 合同收款 $ret = model('ContractPay')->advancedDisagreeContractGet($applyId); break; case '8': // 销假 $ret = model('AttendanceLeaveTerminate')->advancedDisagreeLeaveTerminate($applyId); break; case '9': // 离京报告 $ret = model('LeaveBj')->advancedDisagreeLeaveBj($applyId); break; case '10': // 办公物品 $ret = model('OfficeReceive')->advancedDisagreeOfficeReceive($applyId); break; case '11': // 用车 $ret = model('CarRecord')->advancedDisagreeCarRecord($applyId); break; case '13': // 资产领取 $ret = model('AssetReceive')->advancedDisagreeAssetReceive($applyId); break; case '14': // 资产退库 $ret = model('AssetWithdraw')->advancedDisagreeAssetWithdraw($applyId); break; case '15': // 资产维修 $ret = model('AssetRepair')->advancedDisagreeAssetRepair($applyId); break; case '16': // 资产处置 $ret = model('AssetDisposal')->advancedDisagreeAssetDisposal($applyId); break; case '17': // 预算 $ret = model('BudgetApply')->advancedDisagreeBudgetApply($applyId); break; case '18': // 用印 $ret = model('OfficialSealApply')->advancedDisagreeSealApply($applyId); break; case '19': // 中心发文 $ret = model('PostApply')->advancedDisagreePostApply($applyId); break; case '20': // 因私出国 $ret = model('AbroadApply')->advancedDisagreeAbroadApply($applyId); break; case '21': // 日常支出 $ret = model('BudgetPay')->advancedDisagreeBudgetPay($applyId); break; default: $ret = true; break; } return $ret; } // 获取未审批数量 public function unApplyNums($userId,$orgId){ $count = Db::name('apply_record') ->alias('ar') ->join('apply a','a.id = ar.apply_id') ->where('ar.status',0) ->where('ar.del',0) ->where('ar.type','in',[2,8]) ->where('ar.user_id',$userId) ->where('a.org_id',$orgId) ->count(); return $count; } }