post(); $data['org_id'] = cur_org_id(); $result = validate('AttendanceClass')->check($data,[],''); if(true !== $result){ $this->error = validate('AttendanceClass')->getError(); return false; } $id = $data['id']; $users = $data['users']; $data['class_id'] = $data['classId']; unset($data['users'],$data['id'],$data['classId']); Db::startTrans(); try { if($id > 0){ $data['update_time'] = date('Y-m-d H:i:s'); $this->allowField(true)->save($data,['id'=>$id]); $groupId = $id; }else{ $data['create_time'] = date('Y-m-d H:i:s'); $groupId = db('attendance_group')->insertGetId($data); } // 更新考勤组用户 $userids = $users?explode(',',$users):[]; if($userids){ // 删除已在其他组的人 Db::name('attendance_group_user')->whereIn('user_id',$userids)->delete(); Db::name('attendance_group_user')->whereNotIn('user_id',$userids)->where('group_id',$groupId)->delete(); // TODO::删除人员分组 $arr = []; foreach ($userids as $k=>$v){ $arr[] = [ 'org_id' => $data['org_id'], 'group_id' => $groupId, 'user_id' => $v ]; if(count($arr) == 50){ $count = Db::name('attendance_group_user')->insertAll($arr); if($count != count($arr)){ exception('操作失败'); }else{ $arr = []; } } } if(count($arr) > 0){ $count = Db::name('attendance_group_user')->insertAll($arr); if($count != count($arr)){ exception('操作失败'); } } }else{ $del = Db::name('attendance_group_user')->where('group_id',$groupId)->delete(); if(!$del){ exception('操作失败'); } } Db::commit(); return true; } catch (Exception $e) { $this->error = $e->getMessage(); Db::rollback(); return false; } } public function info($id){ $info = Db::name('attendance_group')->where('id',$id)->find(); if(!$info){ return false; } $data = $info; $data['content'] = $data?json_decode($data['content'],true):''; if($data['type'] == 1 && $data['content']){ foreach ($data['content']['week'] as $k=>$v){ if(!empty($v['class_id'])){ $data['content']['week'][$k]['class_name'] = $this->getNameById($v['class_id']); } } foreach ($data['content']['sign'] as $k=>$v){ if(!empty($v['class_id'])){ $data['content']['sign'][$k]['class_name'] = $this->getNameById($v['class_id']); } } }else if($data['type'] == 2 && $data['content'] && isset($data['content']['circle'])){ foreach ($data['content']['circle']['class'] as $k=>$v){ if(!empty($v['class_id'])){ $data['content']['circle']['class'][$k]['name'] = $this->getNameById($v['class_id'],2); $data['content']['circle']['class'][$k]['tname'] = $this->getNameById($v['class_id']); } } } if($data['content']){ $data['content'] = json_encode($data['content']); } $userids = []; $users = Db::name('attendance_group_user')->field('user_id')->where('group_id',$data['id'])->select(); $users = $users?$users:[]; foreach ($users as $k=>$v){ $userids[] = $v['user_id']; } if($data['class_id']){ $classList = Db('attendance_class') ->whereIn('id',$data['class_id'])->select(); foreach ($classList as $k=>$v){ $classList[$k]['tname'] = $this->formatClassName($v); } $data['class_list'] = $classList?$classList:[]; }else{ $data['class_list'] = []; } $data['userIds'] = $userids?$userids:[]; return $data; } public function getNameById($id,$type=1){ $info = Db::name('attendance_class')->where('id',$id)->find(); if(!$info){ return false; } return $type==1?$this->formatClassName($info):$info['name']; } public function formatClassName($info){ $info['content'] = json_decode($info['content'],true); $names = []; foreach ($info['content']['dates'] as $k=>$v){ $str = ''; if ($v['snext'] == 1) { $str .= '次日'.$v['stime']; } else { $str .= $v['stime']; } $str .= '-'; if ($v['enext'] === 1) { $str .= '次日'.$v['etime']; } else { $str .= $v['etime']; } $names[] = $str; } return $info['name'].' '.implode(',',$names); } public function showOne($id){ $info = Db::name('attendance_group')->where('id',$id)->find(); return $info; } public function groupUpdates(){ $data = request()->post(); $gid = $data['gid']; $info = $this->showOne($gid); if(!$info){ $this->error = '记录不存在'; return false; } $content = json_decode($info['content'],true); $circle = $content['circle']; if($data['type'] == 1){ if($data['class_id'] == 0){ Db::name('attendance_group_class')->where('group_id',$gid)->where('day',$data['day'])->delete(); }else{ $info = Db::name('attendance_group_class')->where('group_id',$gid)->where('day',$data['day'])->find(); if($info){ if($info['day'] == $data['day']){ Db::name('attendance_group_class')->where('id',$info['id'])->update(['class_id'=>$data['class_id']]); } }else{ Db::name('attendance_group_class')->where('id',$info['id'])->insert([ 'org_id' => cur_org_id(), 'group_id' => $gid, 'class_id' => $data['class_id'], 'day' => $data['day'] ]); } } }else{ if(!$data['week']){ Db::name('attendance_group_class')->where('group_id',$gid)->where('day','>=',$data['day'])->delete(); }else{ $class = $circle['class']; $curmonth = date('Y-m',strtotime($data['day'])); $days = [$data['day']]; $i = 1; while (true){ $tt = strtotime($data['day']) + $i*24*60*60; $month = date('Y-m',$tt); if($month == $curmonth){ $days[] = date('Y-m-d',$tt); $i++; }else{ break; } } $i = 0; $max = $circle['days'] - 1; foreach ($days as $k=>$v){ if($class[$i]['class_id'] == 0) { Db::name('attendance_group_class')->where('group_id',$gid)->where('day',$v)->delete(); }else { $info = Db::name('attendance_group_class')->where('group_id',$gid)->where('day',$v)->find(); if($info){ if($info['day'] != $v){ Db::name('attendance_group_class')->where('id',$info['id'])->update(['class_id'=>$data[$i]['class_id']]); } }else{ Db::name('attendance_group_class')->where('id',$info['id'])->insert([ 'org_id' => cur_org_id(), 'group_id' => $gid, 'class_id' => $class[$i]['class_id'], 'day' => $v ]); } } if($i == $max) { $i=0; }else{ $i++; } } } } return true; } }