diff --git a/app/controller/Admin.php b/app/controller/Admin.php index be4b5b7..7a01a40 100644 --- a/app/controller/Admin.php +++ b/app/controller/Admin.php @@ -37,29 +37,36 @@ class Admin extends BaseController if (empty($username) || empty($password)) { return ErrorResponse::createError(ErrorCode::ERROR_PARAM_REQUIRED, '请提交正确的参数'); } - usleep(500000); +// usleep(500000); $user = AdminInfo::where('username', $username)->find(); if (empty($user) || $user->isEmpty()) { return ErrorResponse::createError(ErrorCode::ERROR_ADMIN_LOGIN_PWD, '用户名或者密码错误(1)'); } - if ($user->password != md5($username . $password . $user->salt)) { + if (!$this->passwordIsCorrect($user,$password)) { return ErrorResponse::createError(ErrorCode::ERROR_ADMIN_LOGIN_PWD, '用户名或者密码错误(2)');; } $data = $user->getPartData(['id', 'username', 'email', 'avatar', 'last_login', 'sex']); $user->save(['last_login' => time()]); // 登录的token $token = AdminService::createAdminToken($user); +// return \json(['code'=>1,'message'=>'asdfasdf','data'=>$token]); $data['token'] = $token->token; return Json::create($data); } public function updatePwd() { + usleep(10000); $originPwd = $this->request->post('origin'); $newPwd = $this->request->post('new_pwd'); $newPwd2 = $this->request->post('new_pwd2'); + if ($originPwd == $newPwd) { + return ErrorResponse::createError( + ErrorCode::ADMIN_PWD_EQUAL, '新密码和原始密码一致' + ); + } if ($newPwd != $newPwd2) { return ErrorResponse::createError( ErrorCode::ERROR_ADMIN_LOGIN_PWD, '输入密码不一致' @@ -73,16 +80,21 @@ class Admin extends BaseController } $salt = StringUtil::generateRandom(6); $admin->save([ - 'password' => StringUtil::getEncryptPassword($originPwd, $salt), + 'password' => StringUtil::getEncryptPassword($newPwd, $salt), 'salt' => $salt ]); - return \json(['code' => 0]); + return SuccessResponse::create(); } - + /** + * 验证密码是否正确 + * @param AdminInfo $admin + * @param string $originPwd + * @return bool + */ private function passwordIsCorrect(AdminInfo $admin, string $originPwd) { - return $admin->password == md5($originPwd . $admin->salt); + return $admin->password == StringUtil::getEncryptPassword($originPwd, $admin->salt); } /** @@ -124,34 +136,48 @@ class Admin extends BaseController { $resultType = $this->request->get('resultType'); if ($resultType == null) $resultType = EvaluationService::ResultAll; + list($page, $size) = $this->getPageParam(); + $searchName = $this->request->get('name'); + $data = EvaluationService::search( intval($resultType), - $this->request->get('name'), + $searchName, $this->request->get('sort', EvaluationService::SortByTime), $page, $size ); - return SuccessResponse::create($data->toArray()); + $data = $data->toArray(); + $data['allCount'] = EvaluationService::allCount(); + return SuccessResponse::create($data); } public function downloadEvaluation() { + //no limit + @@set_time_limit(0); $resultType = $this->request->get('resultType'); if ($resultType == null) $resultType = EvaluationService::ResultAll; list($page, $size) = $this->getPageParam(); + $searchName = $this->request->get('name'); + if ($this->request->get('dataCount') == 'all') { // download all data 有点危险有 + // 查询所有数据 所以重置所有查询条件 + $resultType = EvaluationService::ResultAll; + $searchName = null; + } + $data = EvaluationService::search( intval($resultType), - $this->request->get('name'), + $searchName, $this->request->get('sort', EvaluationService::SortByTime), - $page, $size); + $page, $size, true); - - $dataType = $this->request->post('type'); + $downLoadFields = $this->request->get('fields'); $excel = new Spreadsheet(); $sheet = $excel->getActiveSheet(); $rowNumber = 1; + $titles = [ 'A' => ['text' => '自评时间', 'key' => 'create_time'], 'B' => ['text' => '姓名', 'key' => 'realname'], @@ -164,28 +190,54 @@ class Admin extends BaseController 'I' => ['text' => '性别', 'key' => 'gender'], 'J' => ['text' => '年龄', 'key' => 'age'] ]; - $fields = explode(',', 'A,B,C,D,E,F,G.H'); - foreach ($fields as $f) { - $sheet->setCellValue($f . $rowNumber, $titles[$f]); + $fields = explode(',', 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T'); + $titles = [ + 'create_time' => '自评时间', + 'realname' => '姓名', + 'headache' => '头痛症状', + 'gastrointestinal' => '胃肠道症状', + 'tired' => '劳累或疲劳', + 'dizzy' => '头晕或眩晕', + 'score' => '总分', + 'resultType' => '评估结果', + 'gender' => '性别', + 'age' => '年龄', + 'height' => '年龄', + 'weight' => '体重', + 'address' => '久居地', + 'smoke' => '抽烟量', + 'drink' => '饮酒量', + 'is_first_to_tibet' => '首次进藏', + 'medical_history' => '既往病史', + 'result' => '评估结果' + ]; + + foreach ($downLoadFields as $index => $f) { + $sheet->setCellValue($fields[$index] . $rowNumber, + $titles[$f]); } foreach ($data->dataList as $item) { $rowNumber++; - foreach ($fields as $f) { - $sheet->setCellValue($f . $rowNumber, $item[$f]); + foreach ($downLoadFields as $index => $f) { + $sheet->setCellValue($fields[$index] . $rowNumber, $item[$f]); } } + $dataType = $this->request->get('format'); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); $filename = urlencode("评估记录_") . date('mdHi'); $writer = new Csv($excel); - if ($dataType == 'xlsx') { + if ($dataType == 'csv') { + $filename .= '.csv'; + } else { $writer = new Xlsx($excel); $filename .= '.xlsx'; - } else { - $filename .= '.csv'; } header('Content-Disposition: attachment;filename=' . $filename); $writer->save('php://output'); + + $sheet->disconnectCells(); + unset($sheet); exit; } diff --git a/app/middleware/AdminApiCheck.php b/app/middleware/AdminApiCheck.php index 7112beb..41866f4 100644 --- a/app/middleware/AdminApiCheck.php +++ b/app/middleware/AdminApiCheck.php @@ -9,8 +9,11 @@ namespace app\middleware; +use app\controller\Admin; +use app\service\AdminService; use app\util\ErrorCode; use app\util\ErrorResponse; +use think\facade\Config; use think\Request; class AdminApiCheck @@ -19,13 +22,20 @@ class AdminApiCheck public function handle(Request $request, \Closure $next) { $token = $request->param('token');//'wxaffadsf31Dfaf93'; + $loginExpired = Config::get("app.admin.expired", 1800); if (empty($token)) { return ErrorResponse::createError( ErrorCode::ERROR_OPENID_REQUIRED, '缺失参数token' ); } - + $token = AdminService::queryToken($token,$loginExpired); + if(empty($token)){ + return ErrorResponse::createError( + ErrorCode::USER_NOT_LOGIN, 'user token not exists or not login' + ); + } + AdminService::updateToken($token,$loginExpired); //对于 admin -> token //对于 user -> open_id $response = $next($request); diff --git a/app/service/AdminService.php b/app/service/AdminService.php index a6c6b00..4caec9f 100644 --- a/app/service/AdminService.php +++ b/app/service/AdminService.php @@ -40,8 +40,28 @@ class AdminService if (empty($token)) { return AdminToken::create($data); } - $data['updated_at'] = date('Y-m-d H:i:s', time()); - return AdminToken::update($data, ['admin_id' => $adminInfo->id]); +// $data['updated_at'] = date('Y-m-d H:i:s', time()); + + $token->db() + ->where('admin_id',$token->admin_id) + ->where('device_type',$token->device_type) + ->where('token',$token->token) + ->update($data); + return AdminToken::find($data['token']); } } + + public static function queryToken(string $token, int $expired = 1800) + { + return AdminToken::where('token', $token) + ->where('expired_at', '>', date('Y-m-d H:i:s', time()))->find(); + } + + public static function updateToken(string $token, int $expired = 1800) + { + return AdminToken::update( + ['expired_at' => date('Y-m-d H:i:s', time() + $expired)], + ['token' => $token] + ); + } } \ No newline at end of file diff --git a/app/service/EvaluationService.php b/app/service/EvaluationService.php index c79953d..293c323 100644 --- a/app/service/EvaluationService.php +++ b/app/service/EvaluationService.php @@ -96,8 +96,20 @@ class EvaluationService const SortByTime = 'create_time'; const SortByScore = 'score'; + /** + * @param int $result + * @param string|null $username + * @param string|null $sort + * @param int $page + * @param int $pageSize + * @param null $fieldAll + * @return ListCountData + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\ModelNotFoundException + * @throws \think\exception\DbException + */ public static function search(int $result = self::ResultAll, string $username = null, - string $sort = null, $page = 1, $pageSize = 20) + string $sort = null, $page = 1, $pageSize = 20,$fieldAll = null) { if (empty($sort) || !in_array($sort, [self::SortByTime, self::SortByScore])) { $sort = self::SortByTime; @@ -129,11 +141,18 @@ class EvaluationService if ($username) { // 名字模糊查询 $model->whereLike('realname', "%{$username}%"); } - $dataArray = $model->limit(($page - 1) & $pageSize, $pageSize) // 分页 - ->order('e.' . $sort, 'desc') // 排序 - ->field('d.realname,e.*') // 查询字段 + if($pageSize > 0){ + $model->limit(($page - 1) * $pageSize, $pageSize); // 分页 + } + $searchField = 'd.realname,e.*'; + if($fieldAll){ +// $searchField .= 'd.address,d.gender,d.age,d.height,d.weight,d.smoke,d.drink,d.is_first_to_tibet,d.medical_history'; + $searchField = 'd.*,e.*'; + } + $dataArray = $model->order('e.' . $sort, 'desc') // 排序 + ->field($searchField) // 查询字段 ->select()->toArray(); // 获取结果 - $count = $evaluation->count(); // 查询总页数 + $count = $model->limit(0,1)->count(); // 查询总页数 foreach ($dataArray as $k => $v) { $dataArray[$k] = array_merge($v, self::parseAdminEvaluation($v)); @@ -143,6 +162,11 @@ class EvaluationService // return EvaluationHistory } + public static function allCount() + { + return EvaluationHistory::count(); + } + private static function parseAdminEvaluation($item) { diff --git a/app/service/UserService.php b/app/service/UserService.php index bd1c20a..196acfe 100644 --- a/app/service/UserService.php +++ b/app/service/UserService.php @@ -15,6 +15,7 @@ use app\util\ErrorCode; use app\util\ListCountData; use app\util\WechatUtil; use think\facade\Config; +use think\facade\Log; class UserService { @@ -22,7 +23,8 @@ class UserService public static function search( - int $isFirst = -1, int $gender = -1, int $province = -1, int $city = -1, string $name = null, int $page = 1, int $pageSize = 20 + int $isFirst = -1, int $gender = -1, int $province = -1, + int $city = -1, string $name = null, int $page = 1, int $pageSize = 20 ) { $userDetail = new UserDetail(); @@ -51,15 +53,17 @@ class UserService //, ['name' => ""] $model->where("(u.nickname LIKE '%{$name}%' OR d.realname LIKE '%{$name}%')"); } - - $dataArray = $model->limit(($page - 1) & $pageSize, $pageSize)// 分页 - ->field('u.nickname,u.open_id,u.avatarUrl,d.*')// 查询字段 - ->select()->toArray(); // 获取结果 - $count = $userInfo->count(); // 查询总数 + $dataArray = $model->limit(($page - 1) * $pageSize, $pageSize)// 分页 + ->field('u.nickname,u.open_id,u.avatarUrl,d.*')// 查询字段 + ->select()->toArray(); // 获取结果 + $count = $model->limit(0,1)->count(); // 查询总数 self::parseArray($dataArray); return ListCountData::Create($count, $dataArray); } + public function getSearchModel(){ + + } private static function parseArray(&$dataArray) { @@ -74,10 +78,10 @@ class UserService } } - private static function getDataFromArray(array $datas, array $keys) + private static function getDataFromArray(array $data, array $keys) { foreach ($keys as $key => $v) { - $keys[$key] = $datas[$v]; + $keys[$key] = $data[$v]; } return $keys; } @@ -108,7 +112,7 @@ class UserService if (empty($detail)) { $detail = UserDetail::create($data); } else { - $detail = UserDetail::update($data, ['uid' => $userInfo->id]); + $detail = UserDetail::update($data, ['uid' => $userInfo->id]); } return $detail; } diff --git a/app/util/ErrorCode.php b/app/util/ErrorCode.php index e330487..d4b7cb4 100644 --- a/app/util/ErrorCode.php +++ b/app/util/ErrorCode.php @@ -10,6 +10,10 @@ namespace app\util; class ErrorCode { + /** + * 用户没有登录 + */ + const USER_NOT_LOGIN = 401; /** * 参数不足 */ @@ -31,6 +35,7 @@ class ErrorCode * 原始密码不正确 */ const ERROR_ADMIN_PWD_ERROR = 21010; + const ADMIN_PWD_EQUAL = 21011; /** * 输入的密码不一致 */