input('id/d',0), 'user_id' => input('uid/d',0), 'content' => input('content','','trim'), 'end_time' => input('endTime','','trim'), 'org_id' => input('orgId/d',0), 'pid' => input('pid/d',0), 'important_id' => input('importantId/d',0), ]; $result = validate('ImportantRecord')->check($data,[],''); if(true !== $result){ HelpHander::error(validate('ImportantRecord')->getError()); } $id = $data['id']; unset($data['id']); Db::startTrans(); try{ if($id > 0){ $ret = $this->allowField(true)->save($data,['id'=>$id]); }else{ $data['status'] = 1; //所有人员默认同意 $data['create_time'] = date('Y-m-d H:i:s'); $ret = $this->allowField(true)->save($data); } if(!$ret){ \exception('操作失败'); } if($id <= 0){ $id = $this->id; model('Message')->add(3,$id,14,$data['user_id'],$data['org_id'],'有一项重要事项需要您办理.'); } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error($e->getMessage()); } return true; } public function info($id){ $info = $this->where('id',$id)->find(); if(!$info){ HelpHander::error('数据不存在'); } $info = $info->toArray(); $info['user_name'] = Db::name('user_info')->where('user_id',$info['user_id'])->value('name'); $pinfo = Db::name('user_info') ->alias('ui') ->join('important_record ir','ir.user_id = ui.user_id') ->where('ir.id',$info['pid']) ->field('ui.name,ui.user_id') ->find(); $info['pname'] = $pinfo?$pinfo['name']:''; $info['puser_id'] = $pinfo?$pinfo['user_id']:''; $info['annotations'] = model('ImportantRecordAnnotation')->lists($info['id']); return $info; } public function lists($orgId,$userId){ $page = input('page/d',1); $size = input('size/d',10); $title = input('title','','trim'); $sn = input('sn','','trim'); $enable = input('enable/d',-1); $transfer = input('transfer/d',-1); $degree = input('degree/d',-1); $status = input('status/d',-1); $dep = input('dep','','trim'); $user = input('user','','trim'); $source = input('source','','trim'); $proof = input('proof','','trim'); $startTime = input('startTime','','trim'); $endTime = input('endTime','','trim'); $prop = input('prop','','trim'); $order = input('order','','trim'); if($prop == 'transferId'){ $prop = 'i.transfer_id'; }else if($prop == 'endTime'){ $prop = 'i.end_time'; }else if($prop == 'createTime'){ $prop = 'i.create_time'; }else if($prop == 'enable'){ $prop = 'i.status'; } if($prop && $order == 'ascending'){ $orderby = $prop.' asc, ir.id desc'; }else if($prop && $order == 'descending'){ $orderby = $prop.' desc, ir.id desc'; }else{ $orderby = 'ir.id desc'; } if($title != ''){ $map[] = ['i.title','like','%'.$title.'%']; } if($sn != ''){ $map[] = ['i.sn','like','%'.$sn.'%']; } if($source != ''){ $map[] = ['i.source','like','%'.$source.'%']; } if($proof != ''){ $map[] = ['i.proof','like','%'.$proof.'%']; } if($enable >= 0){ $map[] = ['i.status','=',$enable]; } if($transfer >= 0){ $map[] = ['i.transfer','=',$transfer]; } if($degree >= 0){ $map[] = ['i.degree','=',$degree]; } if($status >= 0){ $map[] = ['ir.status','=',$status]; } $map[] = ['i.del','=',0]; $map[] = ['ir.org_id','=',$orgId]; $map[] = ['ir.user_id','=',$userId]; $ids = []; if($dep){ $ids1 = Db::name('important_user') ->alias('iu') ->join('dep d','d.id = iu.bus_id') ->where('iu.type',0) ->where('d.name','like','%'.$dep.'%') ->column('iu.important_id'); $ids1 = $ids1?$ids1:[]; $ids = array_merge($ids,$ids1); } if($user){ $ids2 = Db::name('important_user') ->alias('iu') ->join('user_info d','d.user_id = iu.bus_id') ->where('iu.type',2) ->where('d.name','like','%'.$user.'%') ->column('iu.important_id'); $ids2 = $ids2?$ids2:[]; $ids = array_merge($ids,$ids2); } $ids = array_unique($ids); if($ids){ $map[] = ['i.id','in',$ids]; } if($startTime && $endTime){ $map[] = ['ir.create_time','>=',$startTime.' 00:00:00']; $map[] = ['ir.create_time','<=',$endTime.' 23:59:59']; } $lists = Db::name('important_record') ->alias('ir') ->join('important i','i.id = ir.important_id') ->where($map) ->page($page,$size) ->order($orderby) ->field('ir.*,i.title,i.sn,i.source,i.proof,i.title,i.superior_opinion,i.degree,i.status as istatus, i.transfer,i.remark,i.transfer_id,i.cbusers,i.deps') ->select(); $lists = $lists?$lists:[]; foreach($lists as $k=>$v){ $cbusers = $v['cbusers']?json_decode($v['cbusers'],true):[]; $names = []; foreach ($cbusers as $kk=>$vv){ if($vv['type'] == 0){ // 部门 $names[] = Db::name('dep')->where('id',$vv['id'])->value('name'); }else{ // 用户 $names[] = Db::name('user_info')->where('user_id',$vv['id'])->value('name'); } } $lists[$k]['bus_name'] = implode(',',$names); $deps = $v['deps']?json_decode($v['deps'],true):[]; $dnames = []; foreach ($deps as $kk=>$vv){ if($vv['type'] == 0){ // 部门 $dnames[] = Db::name('dep')->where('id',$vv['id'])->value('name'); }else{ // 用户 $dnames[] = Db::name('user_info')->where('user_id',$vv['id'])->value('name'); } } $lists[$k]['deps_name'] = implode(',',$dnames); $child1 = Db::name('important_record')->where('pid',$v['id'])->where('status',2)->find(); if($child1){ $lists[$k]['cstatus'] = 2; }else{ $child2 = Db::name('important_record')->where('pid',$v['id'])->where('status','in',[0,1,2,5])->find(); if($child2){ $lists[$k]['cstatus'] = 1; }else{ $lists[$k]['cstatus'] = 0; } } } $total = Db::name('important_record') ->alias('ir') ->join('important i','i.id = ir.important_id') ->where($map)->count(); $data = [ 'total' => $total, 'list' => $lists ]; return $data; } // 获取事项某一人的下级 public function getNextList($importantId,$pid){ $lists = Db::name('important_record') ->where('important_id',$importantId) ->where('pid',$pid) ->order('id asc') ->select(); $lists = $lists?$lists:[]; $curTime = date('Y-m-d H:i:s'); foreach ($lists as $k=>$v){ $lists[$k]['end_status'] = 0; if(in_array($v['status'],[0,1]) && $curTime > $v['end_time']){ $lists[$k]['end_status'] = 1; } } return $lists; } // 获取事项某一人的所有下级 public function getNextAll($importantId,$pid){ $lists = []; $pids = [$pid]; while (true){ if(!$pids){ break; } $lists2 = Db::name('important_record') ->where('important_id',$importantId) ->where('pid','in',$pids) ->order('id asc') ->select(); $lists2 = $lists2?$lists2:[]; $pids = []; foreach ($lists2 as $k=>$v){ $pids[] = $v['id']; $lists2[$k]['user_name'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name'); $lists2[$k]['pname'] = Db::name('user_info') ->alias('ui') ->join('important_record ir','ir.user_id = ui.user_id') ->where('ir.id',$v['pid']) ->value('ui.name'); $lists2[$k]['annotations'] = model('ImportantRecordAnnotation')->lists($v['id']); } $lists = array_merge($lists,$lists2); } $lists = $lists?$lists:[]; $curTime = date('Y-m-d H:i:s'); foreach ($lists as $k=>$v){ $lists[$k]['end_status'] = 0; if(in_array($v['status'],[0,1]) && $curTime > $v['end_time']){ $lists[$k]['end_status'] = 1; } } return $lists; } // 撤销 public function backout($id){ $info = $this->info($id); if($info['status'] != 0){ HelpHander::error('此状态无法撤销'); } $ret = Db::name('important_record')->where('id',$id)->update(['status' => 4,'cancel_time' => date('Y-m-d H:i:s')]); if(!$ret){ HelpHander::error('操作失败'); } return true; } // 同意/拒绝办结 public function deal($id,$type,$userId){ $info = $this->info($id); if($info['status'] != 2 || $info['puser_id'] != $userId){ HelpHander::error('无权限操作'); } if($type == 1){ //同意 $ret = Db::name('important_record')->where('id',$id)->update(['status' => 5]); if(!$ret){ HelpHander::error('操作失败'); } }else{ // 拒绝 $ret = Db::name('important_record')->where('id',$id)->update(['status' => 1]); if(!$ret){ HelpHander::error('操作失败'); } // 发通知 model('Message')->add(3,$id,14,$info['user_id'],$info['org_id'],'您办结的重要事项被拒绝,请知晓。'); } return true; } // 接受/退回 public function confirm($id,$status){ $info = $this->info($id); // if($info['pid'] > 0 && $info['status'] != 0){ // HelpHander::error('此状态无法执行此操作'); // } // if($info['pid'] == 0 && $info['status'] != 1){ // HelpHander::error('此状态无法执行此操作'); // } if($info['status'] != 1){ HelpHander::error('此状态无法执行此操作'); } Db::startTrans(); try{ $ret = Db::name('important_record')->where('id',$id)->update(['status' => $status,'confirm_time' => date('Y-m-d H:i:s')]); if(!$ret){ \exception('操作失败'); } if($info['pid'] > 0 && $status == 3){ //推送给上级不同意 $precord = Db::name('important_record')->where('id',$info['pid'])->find(); if($precord){ $title = Db::name('important')->where('id',$precord['important_id'])->value('title'); model('Message')->add(3,$precord['id'],14,$precord['user_id'],$precord['org_id'],$info['user_name'].':重要事项['.$title.']已退回,请知晓。'); } }else if($info['pid'] > 0 && $status == 1){ //推送给上级同意 $precord = Db::name('important_record')->where('id',$info['pid'])->find(); if($precord){ $title = Db::name('important')->where('id',$precord['important_id'])->value('title'); model('Message')->add(3,$precord['id'],14,$precord['user_id'],$precord['org_id'],$info['user_name'].':重要事项['.$title.']已同意,请知晓。'); } } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error($e->getMessage()); } return true; } // 转交 public function tranfer($id,$userId,$toUserId){ $info = $this->info($id); if($info['user_id'] != $userId){ HelpHander::error('无权限操作'); } if($info['status'] != 0){ HelpHander::error('此状态无法执行此操作'); } Db::startTrans(); try{ $ret = Db::name('important_record')->where('id',$id)->update(['status' => 4,'cancel_time' => date('Y-m-d H:i:s')]); if(!$ret){ \exception('操作失败'); } $data = [ 'user_id' => $toUserId, 'content' => $info['content'], 'end_time' => $info['end_time'], 'org_id' => $info['org_id'], 'pid' => $info['pid'], 'important_id' => $info['important_id'], 'create_time' => date('Y-m-d H:i:s') ]; $recordId = Db::name('important_record')->insertGetId($data); if(!$recordId){ \exception('操作失败'); } model('Message')->add(3,$recordId,14,$data['user_id'],$data['org_id'],'有一项重要事项需要您办理.'); Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error('操作失败'); } return true; } // 办结 public function finish(){ $data = [ 'id' => input('id/d',0), 'user_id' => input('userId/d',0), // 'content' => input('content','','trim'), // 'files' => input('files','','trim'), 'org_id' => input('orgId/d',0), ]; if($data['id'] <= 0){ HelpHander::error('参数错误'); } // if(!$data['content']){ // HelpHander::error('未填写办理进展'); // } $info = $this->info($data['id']); if($info['user_id'] != $data['user_id']){ HelpHander::error('无权限操作'); } if($info['status'] != 1){ HelpHander::error('此记录已处理'); } // 检查是否有下级 $child = Db::name('important_record')->where('pid',$data['id'])->count(); if($child == 0 && empty($info['annotations'])){ // 无下级必须填写办理进度 HelpHander::error('未填写办理进度,不能办结'); } if($child > 0){ // 有下级,检查下级是否都已完成 $res = Db::name('important_record')->where('pid',$data['id'])->whereIn('status',[0,1,2])->count(); if($res){ HelpHander::error('下级任务还未完成,不能办结'); } } Db::startTrans(); try{ $status = 2; if($info['pid'] == 0){ //无上级办结无需审核,直接完成 $status = 5; } $ret = Db::name('important_record')->where('id',$data['id'])->update(['status' => $status,'progress' => 100,'finish_time' => date('Y-m-d H:i:s')]); if(!$ret){ \exception('操作失败'); } if($info['pid'] > 0){ //推送给上级已办结待审核 $precord = Db::name('important_record')->where('id',$info['pid'])->find(); if($precord){ $title = Db::name('important')->where('id',$precord['important_id'])->value('title'); model('Message')->add(3,$precord['id'],14,$precord['user_id'],$precord['org_id'],$info['user_name'].':重要事项['.$title.']已办结,请审核。'); } } /*$ann = Db::name('important_record_annotation') ->where('important_record_id',$data['id']) ->where('user_id',$data['user_id']) ->where('del',0) ->order('id asc') ->find(); if($ann){ $ret = Db::name('important_record_annotation') ->where('id',$ann['id']) ->update([ 'content' => $data['content'], 'files' => $data['files'], 'update_time' => date('Y-m-d H:i:s') ]); }else{ $ret = Db::name('important_record_annotation') ->insert([ 'important_record_id' => $data['id'], 'org_id' => $data['org_id'], 'user_id' => $data['user_id'], 'content' => $data['content'], 'files' => $data['files'], 'create_time' => date('Y-m-d H:i:s'), '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 progress($id,$progress){ $info = $this->info($id); if($info['status'] == 2){ HelpHander::error('已办结状态不能修改进度'); } $ret = Db::name('important_record')->where('id',$id)->update(['progress' => $progress]); if(!$ret){ HelpHander::error('操作失败'); } return true; } public function unapply($userId){ $lists = Db::name('important_record') ->alias('ir') ->join('important i','i.id = ir.important_id') ->where('ir.user_id',$userId) ->where('i.del',0) ->where('ir.status','in',[0,1]) ->field('ir.id,i.title,ir.create_time') ->select(); $lists = $lists?$lists:[]; foreach ($lists as $k=>$v){ $child1 = Db::name('important_record')->where('pid',$v['id'])->where('status',2)->find(); if($child1){ $lists[$k]['status'] = 2; $lists[$k]['status2'] = 3; // 办结确认 }else{ $child2 = Db::name('important_record')->where('pid',$v['id'])->where('status','in',[0,1,2,5])->find(); if($child2){ $lists[$k]['status'] = 1; $lists[$k]['status2'] = 2; // 已指派 }else{ $lists[$k]['status'] = 0; $lists[$k]['status2'] = 1; // 新收到 } } } return $lists; } }