123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538 |
- <?php
- namespace app\common\model;
- use app\hander\HelpHander;
- use think\Db;
- use think\Exception;
- use think\Model;
- class ImportantRecord extends Model
- {
- public function add(){
- $data = [
- 'id' => 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;
- }
- }
|