post(); $data['org_id'] =cur_org_id(); $result = validate($this->validateName)->check($data,[],''); if(true !== $result){ $this->error = validate($this->validateName)->getError(); return false; } if(!$data['user_ids']){ $this->error='检查人员不能为空'; return false; } $post['user_ids'] = explode(',',$data['user_ids']); $id = $data['id']; unset($data['id']); unset($data['user_ids']); $this->startTrans(); try{ if($id > 0){ $data['update_time'] = date('Y-m-d H:i:s'); $ret = $this->allowField(true)->save($data,['id'=>$id]); if(!$ret){ exception('保存失败'); } Db::name('daily_user') ->where('daily_id',$id)->delete(); //添加检查人员 $user = array(); $post['user_ids'] = array_unique($post['user_ids']); foreach ($post['user_ids'] as $k=>$v){ $user[] = array( 'daily_id' => $id, 'user_id' => $v ); } $taskUser=Db::name('daily_user')->insertAll($user); if(!$taskUser){ exception('工作人员保存失败'); } }else{ $data['create_time'] = date('Y-m-d H:i:s'); $ret = $this->insertGetId($data); $id = $ret; if(!$id){ exception('保存失败'); } //添加检查人员 $user = array(); $post['user_ids'] = array_unique($post['user_ids']); foreach ($post['user_ids'] as $k=>$v){ $user[] = array( 'daily_id' => $id, 'user_id' => $v ); } $taskUser=Db::name('daily_user')->insertAll($user); if(!$taskUser){ exception('工作人员保存失败'); } } $this->commit(); return true; }catch (\Exception $e){ // 回滚事务 $this->error = $e->getMessage(); $this->rollback(); return false; } } public function getRoles($roles){ $list = Db::name('roles') ->where('id','in',explode(',',$roles)) ->column('name'); return $list; } public function getRolesList($orgId){ $list = (new WorkTypeMode())->getRoles(9,$orgId); $arr = []; if(!empty($list)){ foreach ($list as $k=>$v){ $arr[] = [ 'id'=>$v['id'], 'title'=>$v['name'], ]; } } return $arr; } public function list(){ $list = $this ->where('del',0) ->where('enable',1) ->where('org_id',cur_org_id()) ->select() ->toArray(); return $list; } public function sweepCode($orgId,$code, $userId,$taskId=0,$dailyId=0) { $qrcode_arr = get_qrcode_arr($code); if(!$qrcode_arr){ $this->error = '该任务不存在'; return false; } if(!in_array($qrcode_arr['type'],['address','daily'])){ $this->error = '二维码不正确'; return false; } // if($qrcode_arr['type'] != 'daily'){ // $this->error = '该任务不存在'; // return false; // } if($qrcode_arr['ucode'] != config('app.ucode')){ $this->error = '该任务不存在'; return false; } if($qrcode_arr['type']=='address'){ $addressId = $qrcode_arr['id']; $qrcode_arr['id'] =Db::name('daily') ->where('address_id',$addressId) ->where('del',0) ->value('id'); if(empty($qrcode_arr['id'])){ $this->error = '当前地点未绑定日常工作'; return false; } } if($taskId > 0 ){ if($qrcode_arr['id'] != $dailyId){ $this->error = '地点不正确'; return false; } $task = Db::name('daily_task') ->where('id',$taskId) ->where('del',0) ->where('org_id',$orgId) ->find(); if($task['end_time'] < date('Y-m-d H:i:s') || $task['start_time'] > date('Y-m-d H:i:s')){ $this->error = '不在时间范围内'; return false; } // $taskAddr = Db::name('daily_task_addr') // ->where('task_id',$task['id']) // ->column('daily_id'); // if(!in_array($qrcode_arr['id'],$taskAddr)){ // $this->error = '此任务下没有该地点'; // return false; // } $workerAuth = 1; }else{ $daily =Db::name('daily_user') ->where('daily_id',$qrcode_arr['id']) ->where('user_id',$userId) ->find(); $workerAuth = $daily?1:0; } if($qrcode_arr['type']=='address'){ $map[] = ['org_id','=',$orgId]; $map[] = ['id','=',$addressId]; $map[] = ['del','=',0]; $map[] = ['enable','=',1]; // if($addressId != $ysid){ // $map[] = ['del','=',$addressId]; // $map[] = ['enable','=',$addressId]; // } $daily =Db::name('address')->where($map)->find(); }else{ $daily =Db::name('daily')->where([ 'org_id' => $orgId, 'id' => $qrcode_arr['id'], 'del' => 0, 'enable' => 1 ])->find(); } if (!$daily) { $this->error = '该任务不存在'; return false; } $lookAllAuth = (new Roles())->getAppAuth($userId,AppAuth::DAILY_LOOK_ALL_AUTH); $ret = [ 'daily_id' => $qrcode_arr['id'], 'worker_auth' => $workerAuth, 'look_all_auth' => $lookAllAuth?1:0 ]; return $ret; } //日常工作任务检查项 public function dailyInfo($id,$orgId){ $daily = $this ->where([ 'org_id' => $orgId, 'id' => $id, 'del' => 0, 'enable' => 1, ])->find(); if (!$daily) { $this->error = '该任务不存在'; return false; } $formId = empty($daily['daily_form']) ? [] : explode(',', $daily['daily_form']); $dailyForm = Db::name('daily_form') ->where(['del' => 0, 'enable' => 1]) ->where('id','in', $formId) ->select(); $daily['title'] = Db::name('address') ->where('id',$daily['address_id']) ->value('title'); $daily['daily_form'] = $dailyForm; return $daily; } public function taskAddrAll($taskId){ $info = Db::name('daily_task') ->field('id,start_time,end_time,title,status,create_time') ->where('id',$taskId) ->where('del',0) ->find(); $info['users'] = Db::name('user') ->alias('u') ->field('u.real_name') ->join('daily_task_user dtu','dtu.user_id=u.id') ->where('dtu.task_id',$info['id']) ->where('u.del',0) ->where('u.enable',1) ->select(); $info['daily'] = Db::name('daily') ->alias('d') ->field('d.id,d.title,d.address_id') ->join('daily_task_addr dta','dta.daily_id=d.id') ->where('dta.task_id',$info['id']) ->where('d.del',0) ->where('d.enable',1) ->select(); foreach ($info['daily'] as $k=>$v){ $record = Db::name('daily_record') ->where('task_id',$taskId) ->where('daily_id',$v['id']) ->find(); $info['daily'][$k]['title'] = Db::name('address') ->where('id',$v['address_id']) ->value('title'); $info['daily'][$k]['status'] = $record ? 1 : 0; $info['daily'][$k]['daily_record_id'] = $record ? $record['id'] : 0; } return $info; } public function myTaskRecord($page,$size,$userId,$orgId){ $record = Db::name('daily_task_user') ->alias('a') ->join('daily_task b','a.task_id = b.id') ->where('b.del',0) ->whereIn('b.status',[2,3]) ->where('a.user_id',$userId) ->where('b.org_id',$orgId) ->field('b.id,b.title,b.start_time,b.end_time,b.status') ->order('b.start_time desc,id desc') ->page($page,$size) ->select(); return $record?$record:[]; } /** *日常工作量统计 * * @author wst * @date 2021/4/13 8:38 */ public function DailyWork($orgId){ $list = $this ->field('id,title,address_id') ->where('enable',1) ->where('del',0) ->where('org_id',$orgId) ->select(); $list = $list?$list:array(); $count = $count1 = $count2 =$count3 = 0; foreach ($list as $k=>$v){ $list[$k]['title'] = ''; if($v['address_id'] >0){ $list[$k]['title'] = Db::name('address') ->where('id',$v['address_id']) ->value('title'); } $query = Db::name('daily_record') ->where('org_id',$orgId) ->where('daily_id',$v['id']); $list[$k]['count'] = $query ->count(); $count += $list[$k]['count']; //本月 $list[$k]['count1'] = $query ->where('create_yyyymm',date('Ym')) ->count(); $count1 += $list[$k]['count1']; //本周 $list[$k]['count2'] = $query ->whereIn('create_yyyymmdd',get_week_date()) ->count(); $count2 += $list[$k]['count2']; //今天 $list[$k]['count3'] = $query ->where('create_yyyymmdd',date('Ymd')) ->count(); $count3 += $list[$k]['count3']; } return array('list'=>$list,'count'=>$count,'count1'=>$count1,'count2'=>$count2,'count3'=>$count3); } // 获取网格化时间段 public function getTimeDaily($orgId){ $hour = model('Config')->getConfig('org_daily_hour',$orgId); $hour = $hour?$hour:24; // 默认24小时刷新一次 $cur = time(); $s = strtotime(date('Y-m-d')); $n = $s + 86400; $start = 0; $end = 0; while (true){ if($s > $cur){ $start = $s - $hour*60*60; $end = $s; if($s > $n){ $end = $n; } break; } $s = $s + $hour*60*60; } return ['start' => date('Y-m-d H:i:s',$start),'end' => date('Y-m-d H:i:s',$end)]; } }