This commit is contained in:
LittleBoy 2019-06-27 17:36:42 +08:00
parent f0bba2a4c1
commit b98f273ed7
6 changed files with 152 additions and 37 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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]
);
}
}

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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;
/**
* 输入的密码不一致
*/