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):Token?{ return transaction { val user=User.find { Users.studentId eq userLoginVo.studentId }.firstOrNull() when { user==null -> { logger.warn("学号:${userLoginVo.studentId}不存在") return@transaction null } userLoginVo.password.md5() != user.password -> { logger.warn("密码:${userLoginVo.password}错误") return@transaction null } 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() } token.flush() return@transaction Token(studentId = userLoginVo.studentId,token = token.token, createTime = token.createTime.toEpochSecond( ZoneOffset.of("+8")),name=user.name) } } } } fun validToken(token: Token):Boolean{ return validToken(TokenVo(token = token.token,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("结束测试") } } object MainService{ private val logger = LoggerFactory.getLogger(MainService::class.java) var maxSize:Int=20 fun register(maxSize:Int){ this.maxSize=maxSize } /** * 创建留言信息 * * @param leaveMessageVo * @return */ fun createMessage(leaveMessageVo: LeaveMessageVo):Boolean{ return if(leaveMessageVo.message.isNotEmpty()){ return transaction { val count=LeaveMessage.count().toInt() logger.info("系统留言数:$count,限制数:$maxSize") if(count>= maxSize){ LeaveMessage.all().sortedBy { it.createTime }.subList(0, count-maxSize).forEach { it.delete() } } logger.info("保存留言:${leaveMessageVo.message}") LeaveMessage.new { studentId = leaveMessageVo.token.studentId message = leaveMessageVo.message } logger.info("留言保存成功") return@transaction true } }else{ logger.info("留言不能为空") false } } fun getAllLeaveMessage():List{ return transaction { logger.info("获取所有留言") return@transaction LeaveMessage.all().toList().map { LeaveMessageFormatVo(message = "${User.find { Users.studentId eq it.studentId }.first().name}说:${it.message}",studentId = it.studentId) } } } }