| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 | 
							- <?php
 
- namespace app\common\model;
 
- use app\hander\HelpHander;
 
- use think\Db;
 
- use think\Exception;
 
- class AttendanceGroupUser extends Base{
 
-     public function userGroup($userId,$orgId,$day){
 
-         $reissue_count = config('reissue_count');
 
-         $reissue_day = config('reissue_day');
 
-         $rule = '每月最多补卡'.$reissue_count.'次,可补过去'.$reissue_day.'天内的缺卡';
 
-         if($day == date('Y-m-d')){ // 今日
 
-             $data = $this->userCurGroup($userId,$orgId,$rule);
 
-         }else{ // 历史
 
-             $device_sn = Db::name('user')->where('id',$userId)->value('device_sn');
 
-             $device_sn = $device_sn?$device_sn:"";
 
-             $info = Db::name('attendance_user_class')
 
-                 ->where('day',$day)
 
-                 ->where('user_id',$userId)
 
-                 ->find();
 
-             if($info){
 
-                 $record = Db::name('attendance_record')
 
-                     ->where('user_class_id',$info['id'])
 
-                     ->where('user_id',$userId)
 
-                     ->where('effective',1)
 
-                     ->field('id,lat,lng,address,type,from,create_time,kq_time,result,status,cate,remark')
 
-                     ->order('create_time asc')
 
-                     ->select();
 
-                 $group = Db::name('attendance_group')->where('id',$info['group_id'])->find();
 
-                 $addr = [];
 
-                 if($group['addr']){
 
-                     $addr = Db::name('attendance_addr')
 
-                         ->where('id','in',$group['addr'])
 
-                         ->where('enable',1)
 
-                         ->where('del',0)
 
-                         ->field('id,title,distance,lat,lng')
 
-                         ->select();
 
-                 }
 
-                 $dates = json_decode($info['content'],true);
 
-                 $newdate = [];
 
-                 foreach ($dates as $k=>$v){
 
-                     $newdate[] = [
 
-                         'stime' => date('H:i',strtotime($v['stime'])),
 
-                         'etime' => date('H:i',strtotime($v['etime']))
 
-                     ];
 
-                 }
 
-                 $data = [
 
-                     'group' => [
 
-                         'name' => $group['name'],
 
-                         'dates' => $newdate?$newdate:null,
 
-                         'rule' => $rule,
 
-                         'day' => $day,
 
-                         'cate' => $group['cate'],
 
-                         'addr' => $addr?$addr:[]
 
-                     ],
 
-                     'record' => $record?$record:[],
 
-                     'device_sn' => $device_sn
 
-                 ];
 
-             }else{ // 无考勤
 
-                 $record = Db::name('attendance_record')
 
-                     ->where('create_time','>=',date('Y-m-d').' 00:00:00')
 
-                     ->where('create_time','<=',date('Y-m-d').' 00:00:00')
 
-                     ->where('user_id',$userId)
 
-                     ->where('effective',1)
 
-                     ->field('id,lat,lng,address,type,from,create_time,kq_time,result,status,cate,remark')
 
-                     ->order('create_time asc')
 
-                     ->select();
 
-                 $data = [
 
-                     'group' => [
 
-                         'name' => '未设置考勤组',
 
-                         'dates' => null,
 
-                         'rule' => $rule,
 
-                         'day' => $day,
 
-                         'cate' => '',
 
-                         'addr' => []
 
-                     ],
 
-                     'record' => $record?$record:[],
 
-                     'device_sn' => $device_sn
 
-                 ];
 
-             }
 
-         }
 
-         return $data;
 
-     }
 
-     private function userCurGroup($userId,$orgId,$rule){
 
-         $device_sn = Db::name('user')->where('id',$userId)->value('device_sn');
 
-         $curTime = time();
 
-         $day = date('Y-m-d');
 
-         $yday = date('Y-m-d',time() - 86400);
 
-         $nday = date('Y-m-d',time() + 86400);
 
-         // 获取今天的考勤组
 
-         $info = Db::name('attendance_user_class')
 
-             ->where('day',$day)
 
-             ->where('user_id',$userId)
 
-             ->where('status',0)
 
-             ->find();
 
-         if($info){ // 今日班次
 
-             $record = Db::name('attendance_record')
 
-                 ->where('user_class_id',$info['id'])
 
-                 ->where('user_id',$userId)
 
-                 ->where('effective',1)
 
-                 ->field('id,lat,lng,address,type,from,create_time,kq_time,result,status,cate,remark')
 
-                 ->order('create_time asc')
 
-                 ->select();
 
-             $group = Db::name('attendance_group')->where('id',$info['group_id'])->find();
 
-             $addr = [];
 
-             if($group['addr']){
 
-                 $addr = Db::name('attendance_addr')
 
-                     ->where('id','in',$group['addr'])
 
-                     ->where('enable',1)
 
-                     ->where('del',0)
 
-                     ->field('id,title,distance,lat,lng')
 
-                     ->select();
 
-             }
 
-             $dates = json_decode($info['content'],true);
 
-             $newdate = [];
 
-             foreach ($dates as $k=>$v){
 
-                 $newdate[] = [
 
-                     'stime' => date('H:i',strtotime($v['stime'])),
 
-                     'etime' => date('H:i',strtotime($v['etime']))
 
-                 ];
 
-             }
 
-             $data = [
 
-                 'group' => [
 
-                     'name' => $group['name'],
 
-                     'dates' => $newdate,
 
-                     'rule' => $rule,
 
-                     'day' => $day,
 
-                     'cate' => $group['cate'],
 
-                     'addr' => $addr?$addr:[]
 
-                 ],
 
-                 'record' => $record?$record:[],
 
-                 'device_sn' => $device_sn
 
-             ];
 
-         }else{ // 今日班次不存在
 
-             // 昨日班次
 
-             $yinfo = Db::name('attendance_user_class')
 
-                 ->where('day',$yday)
 
-                 ->where('user_id',$userId)
 
-                 ->where('next',1)
 
-                 ->where('status',0)
 
-                 ->find();
 
-             // 今日班次
 
-             $class = model('AttendanceGroupClass')->getClassByDay($userId);
 
-             if(!$class && !$yinfo){
 
-                 $record = Db::name('attendance_record')
 
-                     ->where('create_time','>=',date('Y-m-d').' 00:00:00')
 
-                     ->where('user_id',$userId)
 
-                     ->where('effective',1)
 
-                     ->field('id,lat,lng,address,type,from,create_time,kq_time,result,status,cate,remark')
 
-                     ->order('create_time asc')
 
-                     ->select();
 
-                 $data = [
 
-                     'group' => [
 
-                         'name' => '未设置考勤组',
 
-                         'dates' => [],
 
-                         'rule' => $rule,
 
-                         'day' => $day,
 
-                         'cate' => '',
 
-                         'addr' => []
 
-                     ],
 
-                     'record' => $record?$record:[],
 
-                     'device_sn' => $device_sn
 
-                 ];
 
-             }else if($yinfo && !$class){ // 昨天班次
 
-                 $group = Db::name('attendance_group')->where('id',$yinfo['group_id'])->find();
 
-                 $record = Db::name('attendance_record')
 
-                     ->where('user_class_id',$yinfo['id'])
 
-                     ->where('user_id',$userId)
 
-                     ->where('effective',1)
 
-                     ->field('id,lat,lng,address,type,from,create_time,kq_time,result,status,cate,remark')
 
-                     ->order('create_time asc')
 
-                     ->select();
 
-                 $addr = [];
 
-                 if($group['addr']){
 
-                     $addr = Db::name('attendance_addr')
 
-                         ->where('id','in',$group['addr'])
 
-                         ->where('enable',1)
 
-                         ->where('del',0)
 
-                         ->field('id,title,distance,lat,lng')
 
-                         ->select();
 
-                 }
 
-                 $dates = json_decode($yinfo['content'],true);
 
-                 $newdate = [];
 
-                 foreach ($dates as $k=>$v){
 
-                     $newdate[] = [
 
-                         'stime' => date('H:i',strtotime($v['stime'])),
 
-                         'etime' => date('H:i',strtotime($v['etime']))
 
-                     ];
 
-                 }
 
-                 $data = [
 
-                     'group' => [
 
-                         'name' => $group['name'],
 
-                         'dates' => $newdate,
 
-                         'rule' => $rule,
 
-                         'day' => $day,
 
-                         'cate' => $group['cate'],
 
-                         'addr' => $addr?$addr:[]
 
-                     ],
 
-                     'record' => $record?$record:[],
 
-                     'device_sn' => $device_sn
 
-                 ];
 
-             }else if(!$info && $class){ // 今日班次不为空
 
-                 $nday = date('Y-m-d',time() + 86400);
 
-                 $content = json_decode($class['content'],true);
 
-                 $dates = $content['dates'];
 
-                 $newdates = [];
 
-                 $newdates2 = [];
 
-                 foreach ($dates as $k=>$v) {
 
-                     $newdates[] = [
 
-                         "stime" => $v['snext'] > 0 ? $nday . ' ' . $v['stime'] . ':00' : $day . ' ' . $v['stime'] . ':00',
 
-                         "etime" => $v['enext'] > 0 ? $nday . ' ' . $v['etime'] . ':00' : $day . ' ' . $v['etime'] . ':00',
 
-                         "sstatus" => 0,
 
-                         "estatus" => 0,
 
-                     ];
 
-                     $newdates2[] = [
 
-                         "stime" => $v['stime'],
 
-                         "etime" => $v['etime'],
 
-                     ];
 
-                 }
 
-                 $addr = [];
 
-                 if($class['addr']){
 
-                     $addr = Db::name('attendance_addr')
 
-                         ->where('id','in',$class['addr'])
 
-                         ->where('enable',1)
 
-                         ->where('del',0)
 
-                         ->field('id,title,distance,lat,lng')
 
-                         ->select();
 
-                 }
 
-                 $data = [
 
-                     'group' => [
 
-                         'name' => $class['group_name'],
 
-                         'dates' => $newdates2,
 
-                         'rule' => $rule,
 
-                         'day' => $day,
 
-                         'cate' => $yinfo['cate'],
 
-                         'addr' => $addr?$addr:[]
 
-                     ],
 
-                     'record' => [],
 
-                     'device_sn' => $device_sn
 
-                 ];
 
-             }else{
 
-                 $nday = date('Y-m-d',time() + 86400);
 
-                 $content = json_decode($class['content'],true);
 
-                 $dates = $content['dates'];
 
-                 $newdates = [];
 
-                 $newdates2 = [];
 
-                 foreach ($dates as $k=>$v) {
 
-                     $newdates[] = [
 
-                         "stime" => $v['snext'] > 0 ? $nday . ' ' . $v['stime'] . ':00' : $day . ' ' . $v['stime'] . ':00',
 
-                         "etime" => $v['enext'] > 0 ? $nday . ' ' . $v['etime'] . ':00' : $day . ' ' . $v['etime'] . ':00',
 
-                         "sstatus" => 0,
 
-                         "estatus" => 0,
 
-                     ];
 
-                     $newdates2[] = [
 
-                         "stime" => $v['stime'],
 
-                         "etime" => $v['etime'],
 
-                     ];
 
-                 }
 
-                 if($curTime >= strtotime($newdates[0]['stime']) - 2*60){ // 显示今日
 
-                     $nday = date('Y-m-d',time() + 86400);
 
-                     $content = json_decode($class['content'],true);
 
-                     $dates = $content['dates'];
 
-                     $newdates = [];
 
-                     $newdates2 = [];
 
-                     foreach ($dates as $k=>$v) {
 
-                         $newdates[] = [
 
-                             "stime" => $v['snext'] > 0 ? $nday . ' ' . $v['stime'] . ':00' : $day . ' ' . $v['stime'] . ':00',
 
-                             "etime" => $v['enext'] > 0 ? $nday . ' ' . $v['etime'] . ':00' : $day . ' ' . $v['etime'] . ':00',
 
-                             "sstatus" => 0,
 
-                             "estatus" => 0,
 
-                         ];
 
-                         $newdates2[] = [
 
-                             "stime" => $v['stime'],
 
-                             "etime" => $v['etime'],
 
-                         ];
 
-                     }
 
-                     $addr = [];
 
-                     if($class['addr']){
 
-                         $addr = Db::name('attendance_addr')
 
-                             ->where('id','in',$class['addr'])
 
-                             ->where('enable',1)
 
-                             ->where('del',0)
 
-                             ->field('id,title,distance,lat,lng')
 
-                             ->select();
 
-                     }
 
-                     $data = [
 
-                         'group' => [
 
-                             'name' => $class['group_name'],
 
-                             'dates' => $newdates2,
 
-                             'rule' => $rule,
 
-                             'day' => $day,
 
-                             'cate' => $yinfo['cate'],
 
-                             'addr' => $addr?$addr:[]
 
-                         ],
 
-                         'record' => [],
 
-                         'device_sn' => $device_sn
 
-                     ];
 
-                 }else{ // 显示昨日
 
-                     $group_name = Db::name('attendance_group')->where('id',$yinfo['group_id'])->value('name');
 
-                     $record = Db::name('attendance_record')
 
-                         ->where('user_class_id',$yinfo['id'])
 
-                         ->where('user_id',$userId)
 
-                         ->where('effective',1)
 
-                         ->field('id,lat,lng,address,type,from,create_time,kq_time,result,status,cate,remark')
 
-                         ->order('create_time asc')
 
-                         ->select();
 
-                     $dates = json_decode($yinfo['content'],true);
 
-                     $newdate = [];
 
-                     foreach ($dates as $k=>$v){
 
-                         $newdate[] = [
 
-                             'stime' => date('H:i',strtotime($v['stime'])),
 
-                             'etime' => date('H:i',strtotime($v['etime']))
 
-                         ];
 
-                     }
 
-                     $addr = [];
 
-                     if($yinfo['addr']){
 
-                         $addr = Db::name('attendance_addr')
 
-                             ->where('id','in',$yinfo['addr'])
 
-                             ->where('enable',1)
 
-                             ->where('del',0)
 
-                             ->field('id,title,distance,lat,lng')
 
-                             ->select();
 
-                     }
 
-                     $data = [
 
-                         'group' => [
 
-                             'name' => $group_name,
 
-                             'dates' => $newdate,
 
-                             'rule' => $rule,
 
-                             'day' => $day,
 
-                             'cate' => $yinfo['cate'],
 
-                             'addr' => $addr?$addr:[]
 
-                         ],
 
-                         'record' => $record?$record:[],
 
-                         'device_sn' => $device_sn
 
-                     ];
 
-                 }
 
-             }
 
-         }
 
-         return $data;
 
-     }
 
- }
 
 
  |