You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
csamsserver/src/AccountService.kt

101 lines
3.3 KiB

package com.gyf.csams
import org.jetbrains.exposed.sql.deleteWhere
import org.jetbrains.exposed.sql.transactions.transaction
import org.slf4j.LoggerFactory
import java.time.ZoneOffset
object AccountService {
private val logger = LoggerFactory.getLogger(AccountService::class.java)
/**
* 检查学号是否已注册,true=已注册
*/
fun registered(selectId: String): Boolean {
return transaction {
return@transaction !User.find { Users.studentId eq selectId }.empty()
}
}
/**
* 注册
*/
fun register(userVo: UserVo): UserResDto? {
try {
return transaction {
val _pwd = randomNum(8)
User.new {
studentId=userVo.studentId
name=userVo.name
password=_pwd.md5()
}
return@transaction UserResDto(password=_pwd)
}
} catch (e: Exception) {
logger.error("注册失败,发生异常:$e")
return null
}
}
/**
* 登录
*
* @param userLoginVo 登陆表单
*/
fun login(userLoginVo: UserLoginVo,_ip:String):TokenResDto{
return transaction {
val user=User.find { Users.studentId eq userLoginVo.studentId }.firstOrNull()
when {
user==null -> {
logger.warn("学号:${userLoginVo.studentId}不存在")
return@transaction TokenResDto(isValid = false)
}
userLoginVo.password.md5() != user.password -> {
logger.warn("密码:${userLoginVo.password}错误")
return@transaction TokenResDto(isValid = false)
}
else -> {
val token=UserToken.new{
studentId=userLoginVo.studentId
ip=_ip
device=userLoginVo.device
token=listOf(studentId,ip,device).joinToString(separator = ('a' .. 'z').random().toString()).md5()
}
return@transaction TokenResDto(isValid = true,token = Token(token = token.token,createTime = token.createTime.toEpochSecond(
ZoneOffset.of("+8")),studentId = token.studentId))
}
}
}
}
/**
* 令牌校验
*
* @param tokenVo
* @return
*/
fun validToken(tokenVo: TokenVo):Boolean{
return transaction {
!UserToken.find {
UserTokens.studentId eq tokenVo.studentId
UserTokens.token eq tokenVo.token
}.empty()
}
}
fun logout(studentId:String):Boolean{
return transaction {
UserTokens.deleteWhere { UserTokens.studentId eq studentId }>0
}
}
fun test(){
logger.info("开始测试")
transaction {
logger.info("查询到个${User.count()}用户")
}
logger.info("结束测试")
}
}