UserService.scala 16.3 KB
Newer Older
梦境迷离's avatar
重构  
梦境迷离 已提交
1 2 3
package io.github.dreamylost.service

import io.github.dreamylost.constant.SystemConstant
梦境迷离's avatar
梦境迷离 已提交
4 5
import org.bitlap.tools.log
import org.bitlap.tools.logs.LogType
梦境迷离's avatar
梦境迷离 已提交
6 7
import io.github.dreamylost.model.domains._
import io.github.dreamylost.model.entities._
梦境迷离's avatar
重构  
梦境迷离 已提交
8 9 10 11 12
import io.github.dreamylost.repository.UserRepository
import io.github.dreamylost.util.DateUtil
import io.github.dreamylost.util.SecurityUtil
import io.github.dreamylost.util.UUIDUtil
import io.github.dreamylost.util.WebUtil
13
import io.github.dreamylost.websocket.WebSocketService
梦境迷离's avatar
梦境迷离 已提交
14
import org.springframework.beans.factory.annotation.Autowired
梦境迷离's avatar
梦境迷离 已提交
15
import org.springframework.cache.annotation.CacheEvict
梦境迷离's avatar
重构  
梦境迷离 已提交
16
import org.springframework.cache.annotation.Cacheable
梦境迷离's avatar
梦境迷离 已提交
17 18
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
19

梦境迷离's avatar
重构  
梦境迷离 已提交
20
import java.util
21
import java.util.logging.{ Logger => _ }
梦境迷离's avatar
重构  
梦境迷离 已提交
22
import javax.servlet.http.HttpServletRequest
23
import scala.jdk.CollectionConverters._
梦境迷离's avatar
梦境迷离 已提交
24

梦境迷离's avatar
重构  
梦境迷离 已提交
25
/** 用户信息相关操作
梦境迷离's avatar
梦境迷离 已提交
26
  *
梦境迷离's avatar
重构  
梦境迷离 已提交
27
  * @since 2018年9月9日
梦境迷离's avatar
梦境迷离 已提交
28
  * @author 梦境迷离
梦境迷离's avatar
重构  
梦境迷离 已提交
29
  */
梦境迷离's avatar
梦境迷离 已提交
30
@Service
31
@log(logType = LogType.Slf4j)
梦境迷离's avatar
梦境迷离 已提交
32
class UserService @Autowired() (userRepository: UserRepository, mailService: MailService) {
梦境迷离's avatar
梦境迷离 已提交
33

34 35 36
  @Autowired
  private var wsService: WebSocketService = _

梦境迷离's avatar
重构  
梦境迷离 已提交
37
  /** 退出群
梦境迷离's avatar
梦境迷离 已提交
38
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
39
    * @param gid 群组id
梦境迷离's avatar
梦境迷离 已提交
40 41 42 43
    * @param uid 用户
    * @return Boolean
    */
  @CacheEvict(
44
    value = Array("findUserById", "findGroupsById", "findUserByGroupId", "findGroupById"),
梦境迷离's avatar
梦境迷离 已提交
45 46
    allEntries = true
  )
梦境迷离's avatar
梦境迷离 已提交
47 48 49 50 51
  @Transactional
  def leaveOutGroup(gid: Int, uid: Int): Boolean = {
    //创建者退群,直接解散群,此处逻辑可自行调整
    val group = userRepository.findGroupById(gid)
    if (group == null) return false
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
    if (group.createId.equals(uid)) {
      // 群主退出
      val users = userRepository.findGroupMembers(gid)
      val master = findUserById(group.createId)
      users.asScala.foreach { uid =>
        wsService.deleteGroup(master, group.groupname, gid, uid)
        userRepository.leaveOutGroup(GroupMember(gid, uid))
      }
      userRepository.deleteGroup(gid) == 1
    } else {
      userRepository.leaveOutGroup(GroupMember(gid, uid)) == 1
    }
  }

  /** 根据ID查找群
    *
    * @param gid
    * @return
    */
  @Cacheable(value = Array("findGroupById"), keyGenerator = "wiselyKeyGenerator")
  def findGroupById(gid: Int): GroupList = {
    userRepository.findGroupById(gid)
梦境迷离's avatar
梦境迷离 已提交
74 75
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
76
  /** 添加群成员
梦境迷离's avatar
梦境迷离 已提交
77
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
78
    * @param gid          群组id
梦境迷离's avatar
梦境迷离 已提交
79 80 81 82
    * @param uid          用户id
    * @param messageBoxId 消息盒子Id
    * @return Boolean
    */
梦境迷离's avatar
梦境迷离 已提交
83 84 85 86
  @Transactional
  @CacheEvict(value = Array("findUserByGroupId", "findGroupsById"), allEntries = true)
  def addGroupMember(gid: Int, uid: Int, messageBoxId: Int): Boolean = {
    val group = userRepository.findGroupById(gid)
87
    if (group == null) return false
梦境迷离's avatar
重构  
梦境迷离 已提交
88
    if (group != null && group.createId.equals(uid)) {
梦境迷离's avatar
梦境迷离 已提交
89 90 91 92
      //自己加自己的群,默认同意
      updateAddMessage(messageBoxId, 1)
      true
    } else {
93
      userRepository.addGroupMember(GroupMember(gid, uid)) == 1
梦境迷离's avatar
梦境迷离 已提交
94 95 96 97
      updateAddMessage(messageBoxId, 1)
    }
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
98
  /** 用户创建群时,将自己加入群组,不需要提示
梦境迷离's avatar
梦境迷离 已提交
99
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
100
    * @param gid 群组id
梦境迷离's avatar
梦境迷离 已提交
101 102 103
    * @param uid 用户id
    * @return Boolean
    */
梦境迷离's avatar
梦境迷离 已提交
104 105 106 107 108 109
  @CacheEvict(value = Array("findGroupsById", "findUserByGroupId"), allEntries = true)
  @Transactional
  def addGroupMember(gid: Int, uid: Int): Boolean = {
    userRepository.addGroupMember(new GroupMember(gid, uid)) == 1
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
110
  /** 删除好友
梦境迷离's avatar
梦境迷离 已提交
111
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
112
    * @param friendId 好友id
梦境迷离's avatar
梦境迷离 已提交
113 114 115 116 117 118 119
    * @param uId      个人/用户id
    * @return Boolean
    */
  @CacheEvict(
    value = Array("findUserById", "findFriendGroupsById", "findUserByGroupId"),
    allEntries = true
  )
梦境迷离's avatar
梦境迷离 已提交
120 121 122 123 124
  @Transactional
  def removeFriend(friendId: Int, uId: Int): Boolean = {
    userRepository.removeFriend(friendId, uId) == 1
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
125
  /** 更新用户头像
梦境迷离's avatar
梦境迷离 已提交
126
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
127
    * @param userId 个人id
梦境迷离's avatar
梦境迷离 已提交
128 129 130
    * @param avatar 头像
    * @return Boolean
    */
梦境迷离's avatar
梦境迷离 已提交
131 132 133 134 135 136
  @CacheEvict(value = Array("findUserById"), allEntries = true)
  @Transactional
  def updateAvatar(userId: Int, avatar: String): Boolean = {
    userRepository.updateAvatar(userId, avatar) == 1
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
137
  /** 更新用户信息
梦境迷离's avatar
梦境迷离 已提交
138
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
139
    * @param user 个人信息
梦境迷离's avatar
梦境迷离 已提交
140 141 142 143 144 145
    * @return Boolean
    */
  @CacheEvict(
    value = Array("findUserById", "findUserByGroupId", "findFriendGroupsById"),
    allEntries = true
  )
梦境迷离's avatar
梦境迷离 已提交
146
  @Transactional
147
  def updateUserInfo(user: User): Boolean = {
梦境迷离's avatar
梦境迷离 已提交
148 149 150
    userRepository.updateUserInfo(user) == 1
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
151
  /** 更新用户状态
152
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
153
    * @param user 个人信息
154 155 156 157 158 159 160 161 162 163 164
    * @return Boolean
    */
  @CacheEvict(
    value = Array("findUserById", "findUserByGroupId", "findFriendGroupsById"),
    allEntries = true
  )
  @Transactional
  def updateUserStatus(user: User): Boolean = {
    userRepository.updateUserStatus(user) == 1
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
165
  /** 移动好友分组
梦境迷离's avatar
梦境迷离 已提交
166
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
167
    * @param groupId 新的分组id
梦境迷离's avatar
梦境迷离 已提交
168 169 170 171
    * @param uId     被移动的好友id
    * @param mId     我的id
    * @return Boolean
    */
梦境迷离's avatar
梦境迷离 已提交
172
  //清除缓存
梦境迷离's avatar
梦境迷离 已提交
173 174 175 176
  @CacheEvict(
    value = Array("findUserById", "findFriendGroupsById", "findUserByGroupId"),
    allEntries = true
  )
梦境迷离's avatar
梦境迷离 已提交
177 178
  @Transactional
  def changeGroup(groupId: Int, uId: Int, mId: Int): Boolean = {
179 180 181 182
    val originRecordId = userRepository.findUserGroup(uId, mId)
    if (originRecordId != null) {
      userRepository.changeGroup(groupId, originRecordId) == 1
    } else false
梦境迷离's avatar
梦境迷离 已提交
183 184
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
185
  /** 添加好友操作
梦境迷离's avatar
梦境迷离 已提交
186
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
187
    * @param mid          我的id
梦境迷离's avatar
梦境迷离 已提交
188 189 190 191 192 193
    * @param mgid         我设定的分组
    * @param tid          对方的id
    * @param tgid         对方设定的分组
    * @param messageBoxId 消息盒子的消息id
    * @return Boolean
    */
梦境迷离's avatar
梦境迷离 已提交
194
  @Transactional
梦境迷离's avatar
梦境迷离 已提交
195 196 197 198
  @CacheEvict(
    value = Array("findUserById", "findFriendGroupsById", "findUserByGroupId"),
    allEntries = true
  )
梦境迷离's avatar
梦境迷离 已提交
199
  def addFriend(mid: Int, mgid: Int, tid: Int, tgid: Int, messageBoxId: Int): Boolean = {
梦境迷离's avatar
重构  
梦境迷离 已提交
200
    val add = AddFriends(mid, mgid, tid, tgid)
梦境迷离's avatar
梦境迷离 已提交
201 202 203 204
    try {
      if (userRepository.addFriend(add) != 0) updateAddMessage(messageBoxId, 1)
      else false
    } catch {
205 206
      case ex: Exception =>
        log.error("重复添好友", ex)
梦境迷离's avatar
梦境迷离 已提交
207 208 209 210
        false
    }
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
211
  /** 创建好友分组列表
梦境迷离's avatar
梦境迷离 已提交
212
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
213
    * @param uid       个人id
梦境迷离's avatar
梦境迷离 已提交
214 215
    * @param groupname 群组id
    * @return Boolean FriendGroup
梦境迷离's avatar
梦境迷离 已提交
216
    */
梦境迷离's avatar
梦境迷离 已提交
217 218
  @CacheEvict(value = Array("findFriendGroupsById"), allEntries = true)
  @Transactional
219 220
  def createFriendGroup(groupname: String, uid: Int): Int = {
    userRepository.createFriendGroup(FriendGroup(0, uid, groupname))
梦境迷离's avatar
梦境迷离 已提交
221 222
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
223
  /** 创建群组
梦境迷离's avatar
梦境迷离 已提交
224
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
225
    * @param groupList 群
梦境迷离's avatar
梦境迷离 已提交
226 227
    * @return Boolean
    */
梦境迷离's avatar
梦境迷离 已提交
228 229 230
  @CacheEvict(value = Array("findGroupsById"), allEntries = true)
  @Transactional
  def createGroup(groupList: GroupList): Int = {
梦境迷离's avatar
梦境迷离 已提交
231 232
    if (groupList == null) -1
    else {
梦境迷离's avatar
梦境迷离 已提交
233
      userRepository.createGroupList(groupList)
梦境迷离's avatar
重构  
梦境迷离 已提交
234
      val id = groupList.id
梦境迷离's avatar
梦境迷离 已提交
235 236 237 238
      if (id > 0) id else -1
    }
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
239
  /** 统计未处理消息
梦境迷离's avatar
梦境迷离 已提交
240
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
241
    * @param uid   个人id
梦境迷离's avatar
梦境迷离 已提交
242 243 244 245 246
    * @param agree 0未处理,1同意,2拒绝
    * @return Int
    */
  def countUnHandMessage(uid: Int, agree: Integer): Int =
    userRepository.countUnHandMessage(uid, agree)
梦境迷离's avatar
梦境迷离 已提交
247

梦境迷离's avatar
重构  
梦境迷离 已提交
248
  /** 查询添加好友、群组信息
梦境迷离's avatar
梦境迷离 已提交
249
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
250
    * @param uid 个人id
梦境迷离's avatar
梦境迷离 已提交
251 252
    * @return List[AddInfo]
    */
梦境迷离's avatar
梦境迷离 已提交
253
  def findAddInfo(uid: Int): util.List[AddInfo] = {
梦境迷离's avatar
梦境迷离 已提交
254
    val list = userRepository.findAddInfo(uid)
梦境迷离's avatar
重构  
梦境迷离 已提交
255 256
    val ret = new util.ArrayList[AddInfo](list.size())
    list.asScala.foreach { info =>
梦境迷离's avatar
梦境迷离 已提交
257 258 259 260 261 262 263
      val infoCopy = if (info.`type` == 0) {
        info.copy(content = "申请添加你为好友")
      } else {
        val group: GroupList = userRepository.findGroupById(info.from_group)
        if (group != null) {
          info.copy(content = "申请加入 '" + group.groupname + "' 群聊中!")
        } else info
梦境迷离's avatar
梦境迷离 已提交
264
      }
265
      log.info(infoCopy.toString)
梦境迷离's avatar
梦境迷离 已提交
266
      ret.add(infoCopy.copy(href = null, user = findUserById(infoCopy.from)))
梦境迷离's avatar
重构  
梦境迷离 已提交
267 268
    }
    ret
梦境迷离's avatar
梦境迷离 已提交
269 270
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
271
  /** 更新好友、群组信息请求
梦境迷离's avatar
梦境迷离 已提交
272
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
273
    * @param messageBoxId 消息盒子id
梦境迷离's avatar
梦境迷离 已提交
274 275 276
    * @param agree        0未处理,1同意,2拒绝
    * @return Boolean
    */
梦境迷离's avatar
梦境迷离 已提交
277 278
  @Transactional
  def updateAddMessage(messageBoxId: Int, agree: Int): Boolean = {
梦境迷离's avatar
重构  
梦境迷离 已提交
279
    userRepository.updateAddMessage(AddMessage(agree = agree, id = messageBoxId)) == 1
梦境迷离's avatar
梦境迷离 已提交
280 281
  }

282 283 284 285 286 287 288 289 290 291 292
  @Transactional
  def refuseAddFriend(messageBoxId: Int, user: User, to: Int): Boolean = {
    wsService.refuseAddFriend(messageBoxId, user, to)
  }

  /** 好友消息已读
    *
    * @param mine
    * @param to
    * @return
    */
293 294
  @Transactional
  def readFriendMessage(mine: Int, to: Int): Boolean = {
295
    userRepository.readMessage(mine, to, SystemConstant.FRIEND_TYPE) == 1
296 297
  }

298
  /** 将本群中的所有消息对我标记为已读
299
    *
300 301 302 303 304 305
    * @param gId
    * @param to 群离线消息的接收人to就是群的ID
    * @return
    */
  @Transactional
  def readGroupMessage(gId: Int, to: Int): Boolean = {
306
    userRepository.readMessage(gId, to, SystemConstant.GROUP_TYPE) == 1
307 308
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
309
  /** 添加好友、群组信息请求
梦境迷离's avatar
梦境迷离 已提交
310
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
311
    * @param addMessage 添加好友、群组信息对象
梦境迷离's avatar
梦境迷离 已提交
312 313 314
    * @see AddMessage.scala
    * @return Int
    */
梦境迷离's avatar
梦境迷离 已提交
315
  @Transactional
316 317 318
  def saveAddMessage(addMessage: AddMessage): Int = {
    userRepository.saveAddMessage(addMessage)
  }
梦境迷离's avatar
梦境迷离 已提交
319

梦境迷离's avatar
重构  
梦境迷离 已提交
320
  /** 根据群名模糊统计
梦境迷离's avatar
梦境迷离 已提交
321
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
322
    * @param groupName 群组名称
梦境迷离's avatar
梦境迷离 已提交
323 324
    * @return Int
    */
梦境迷离's avatar
梦境迷离 已提交
325 326
  def countGroup(groupName: String): Int = userRepository.countGroup(groupName)

梦境迷离's avatar
重构  
梦境迷离 已提交
327
  /** 根据群名模糊查询群
梦境迷离's avatar
梦境迷离 已提交
328
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
329
    * @param groupName 群组名称
梦境迷离's avatar
梦境迷离 已提交
330 331
    * @return List[GroupList]
    */
梦境迷离's avatar
梦境迷离 已提交
332
  def findGroup(groupName: String): util.List[GroupList] = userRepository.findGroup(groupName)
梦境迷离's avatar
梦境迷离 已提交
333

梦境迷离's avatar
重构  
梦境迷离 已提交
334
  /** 根据用户名和性别统计用户
梦境迷离's avatar
梦境迷离 已提交
335
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
336
    * @param username 用户名
梦境迷离's avatar
梦境迷离 已提交
337 338 339
    * @param sex      性别
    * @return Int
    */
梦境迷离's avatar
梦境迷离 已提交
340 341
  def countUsers(username: String, sex: Integer): Int = userRepository.countUser(username, sex)

梦境迷离's avatar
重构  
梦境迷离 已提交
342
  /** 根据用户名和性别查询用户
梦境迷离's avatar
梦境迷离 已提交
343
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
344
    * @param username 用户名
梦境迷离's avatar
梦境迷离 已提交
345 346 347 348 349
    * @param sex      性别
    * @return List[User]
    */
  def findUsers(username: String, sex: Integer): util.List[User] =
    userRepository.findUsers(username, sex)
梦境迷离's avatar
梦境迷离 已提交
350

梦境迷离's avatar
重构  
梦境迷离 已提交
351
  /** 统计查询消息
梦境迷离's avatar
梦境迷离 已提交
352
    *
353 354
    * @param uid    消息所属用户id、用户个人id
    * @param mid    来自哪个用户
梦境迷离's avatar
重构  
梦境迷离 已提交
355
    * @param `type` 消息类型,可能来自friend或者group
梦境迷离's avatar
梦境迷离 已提交
356 357
    * @return Int
    */
梦境迷离's avatar
重构  
梦境迷离 已提交
358 359
  def countHistoryMessage(uid: Int, mid: Int, `type`: String): Int = {
    `type` match {
360 361
      case SystemConstant.FRIEND_TYPE => userRepository.countHistoryMessage(uid, mid, `type`)
      case SystemConstant.GROUP_TYPE => userRepository.countHistoryMessage(null, mid, `type`)
梦境迷离's avatar
梦境迷离 已提交
362 363 364
    }
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
365
  /** 查询历史消息
梦境迷离's avatar
梦境迷离 已提交
366
    *
367 368
    * @param user   所属用户、用户个人
    * @param mid    来自哪个用户
梦境迷离's avatar
重构  
梦境迷离 已提交
369
    * @param `type` 消息类型,可能来自friend或者group
梦境迷离's avatar
梦境迷离 已提交
370 371 372
    * @see User.scala
    * @return List[ChatHistory]
    */
梦境迷离's avatar
重构  
梦境迷离 已提交
373
  def findHistoryMessage(user: User, mid: Int, `type`: String): util.List[ChatHistory] = {
梦境迷离's avatar
梦境迷离 已提交
374
    //单人聊天记录
375
    val list = if (SystemConstant.FRIEND_TYPE.equals(`type`)) {
梦境迷离's avatar
梦境迷离 已提交
376
      //查找聊天记录
梦境迷离's avatar
重构  
梦境迷离 已提交
377
      val historys: util.List[Receive] = userRepository.findHistoryMessage(user.id, mid, `type`)
梦境迷离's avatar
梦境迷离 已提交
378
      val toUser = findUserById(mid)
梦境迷离's avatar
重构  
梦境迷离 已提交
379
      historys.asScala.map { history =>
梦境迷离's avatar
重构  
梦境迷离 已提交
380 381 382 383 384 385 386 387 388 389 390
        if (history.id == mid) {
          ChatHistory(
            history.id,
            toUser.username,
            toUser.avatar,
            history.content,
            history.timestamp
          )
        } else {
          ChatHistory(history.id, user.username, user.avatar, history.content, history.timestamp)
        }
梦境迷离's avatar
梦境迷离 已提交
391
      }
392
    } else if (SystemConstant.GROUP_TYPE.equals(`type`)) {
梦境迷离's avatar
重构  
梦境迷离 已提交
393
      //群聊天记录
梦境迷离's avatar
梦境迷离 已提交
394
      //查找聊天记录
梦境迷离's avatar
重构  
梦境迷离 已提交
395
      val historys = userRepository.findHistoryMessage(null, mid, `type`)
梦境迷离's avatar
重构  
梦境迷离 已提交
396
      historys.asScala.map { history =>
梦境迷离's avatar
重构  
梦境迷离 已提交
397 398 399 400 401
        val u = findUserById(history.fromid)
        if (history.fromid.equals(user.id)) {
          ChatHistory(user.id, user.username, user.avatar, history.content, history.timestamp)
        } else {
          ChatHistory(history.id, u.username, u.avatar, history.content, history.timestamp)
梦境迷离's avatar
梦境迷离 已提交
402 403
        }
      }
梦境迷离's avatar
重构  
梦境迷离 已提交
404
    } else Nil
梦境迷离's avatar
重构  
梦境迷离 已提交
405 406 407 408

    val ret = new util.ArrayList[ChatHistory]()
    list.foreach(f => ret.add(f))
    ret
梦境迷离's avatar
梦境迷离 已提交
409 410
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
411
  /** 查询离线消息
梦境迷离's avatar
梦境迷离 已提交
412
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
413
    * @param uid    消息所属用户id、用户个人id
梦境迷离's avatar
梦境迷离 已提交
414 415 416 417 418
    * @param status 历史消息还是离线消息 0代表离线 1表示已读
    * @return List[Receive]
    */
  def findOffLineMessage(uid: Int, status: Int): util.List[Receive] =
    userRepository.findOffLineMessage(uid, status)
梦境迷离's avatar
梦境迷离 已提交
419

梦境迷离's avatar
重构  
梦境迷离 已提交
420
  /** 保存用户聊天记录
梦境迷离's avatar
梦境迷离 已提交
421
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
422
    * @param receive 聊天记录信息
梦境迷离's avatar
梦境迷离 已提交
423 424 425
    * @see Receive.scala
    * @return Int
    */
梦境迷离's avatar
梦境迷离 已提交
426 427 428
  @Transactional
  def saveMessage(receive: Receive): Int = userRepository.saveMessage(receive)

梦境迷离's avatar
重构  
梦境迷离 已提交
429
  /** 用户更新签名
梦境迷离's avatar
梦境迷离 已提交
430
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
431
    * @param user 消息所属用户、用户个人
梦境迷离's avatar
梦境迷离 已提交
432 433 434
    * @see User.scala
    * @return Boolean
    */
梦境迷离's avatar
梦境迷离 已提交
435 436
  @Transactional
  def updateSing(user: User): Boolean = {
梦境迷离's avatar
重构  
梦境迷离 已提交
437 438
    if (user == null || user.sign == null) false
    else userRepository.updateSign(user.sign, user.id) == 1
梦境迷离's avatar
梦境迷离 已提交
439 440
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
441
  /** 激活码激活用户
梦境迷离's avatar
梦境迷离 已提交
442
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
443
    * @param activeCode 激活码
梦境迷离's avatar
梦境迷离 已提交
444 445
    * @return Int
    */
梦境迷离's avatar
梦境迷离 已提交
446
  def activeUser(activeCode: String): Int = {
梦境迷离's avatar
梦境迷离 已提交
447
    if (activeCode == null || "".equals(activeCode)) 0
梦境迷离's avatar
重构  
梦境迷离 已提交
448
    else userRepository.activeUser(activeCode)
梦境迷离's avatar
梦境迷离 已提交
449 450
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
451
  /** 判断邮件是否存在
梦境迷离's avatar
梦境迷离 已提交
452
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
453
    * @param email 邮箱
梦境迷离's avatar
梦境迷离 已提交
454 455
    * @return Boolean
    */
梦境迷离's avatar
梦境迷离 已提交
456 457 458 459 460
  def existEmail(email: String): Boolean = {
    if (email == null || "".equals(email)) false
    else userRepository.matchUser(email) != null
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
461
  /** 用户邮件和密码是否匹配
梦境迷离's avatar
梦境迷离 已提交
462
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
463
    * @param user 用户
梦境迷离's avatar
梦境迷离 已提交
464 465 466
    * @see User.scala
    * @return User
    */
梦境迷离's avatar
梦境迷离 已提交
467
  def matchUser(user: User): User = {
梦境迷离's avatar
梦境迷离 已提交
468
    if (user == null || user.email == null) {
梦境迷离's avatar
梦境迷离 已提交
469
      null
梦境迷离's avatar
梦境迷离 已提交
470
    } else {
梦境迷离's avatar
重构  
梦境迷离 已提交
471
      val u: User = userRepository.matchUser(user.email)
梦境迷离's avatar
梦境迷离 已提交
472
      //密码不匹配
473
      if (u == null || !SecurityUtil.matched(user.password, u.password)) {
梦境迷离's avatar
梦境迷离 已提交
474 475 476 477 478
        null
      } else u
    }
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
479
  /** 根据群组ID查询群里用户的信息
梦境迷离's avatar
梦境迷离 已提交
480
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
481
    * @param gid 群组id
梦境迷离's avatar
梦境迷离 已提交
482 483
    * @return List[User]
    */
梦境迷离's avatar
梦境迷离 已提交
484
  @Cacheable(value = Array("findUserByGroupId"), keyGenerator = "wiselyKeyGenerator")
梦境迷离's avatar
梦境迷离 已提交
485
  def findUserByGroupId(gid: Int): util.List[User] = userRepository.findUserByGroupId(gid)
梦境迷离's avatar
梦境迷离 已提交
486

梦境迷离's avatar
重构  
梦境迷离 已提交
487
  /** 根据ID查询用户的好友分组的列表信息
梦境迷离's avatar
梦境迷离 已提交
488
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
489
    * FriendList表示一个好友列表,一个用户可以有多个FriendList
梦境迷离's avatar
梦境迷离 已提交
490
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
491
    * @param uid 用户ID
梦境迷离's avatar
梦境迷离 已提交
492 493
    * @return List[FriendList]
    */
梦境迷离's avatar
梦境迷离 已提交
494
  @Cacheable(value = Array("findFriendGroupsById"), keyGenerator = "wiselyKeyGenerator")
梦境迷离's avatar
梦境迷离 已提交
495
  def findFriendGroupsById(uid: Int): util.List[FriendList] = {
梦境迷离's avatar
梦境迷离 已提交
496
    val friends = userRepository.findFriendGroupsById(uid)
梦境迷离's avatar
重构  
梦境迷离 已提交
497
    val ret = new util.ArrayList[FriendList](friends.size())
梦境迷离's avatar
梦境迷离 已提交
498
    //封装分组列表下的好友信息
梦境迷离's avatar
重构  
梦境迷离 已提交
499
    friends.asScala
梦境迷离's avatar
重构  
梦境迷离 已提交
500 501
      .foreach { friend: FriendList =>
        ret.add(friend.copy(list = userRepository.findUsersByFriendGroupIds(friend.id)))
梦境迷离's avatar
梦境迷离 已提交
502
      }
梦境迷离's avatar
重构  
梦境迷离 已提交
503
    ret
梦境迷离's avatar
梦境迷离 已提交
504 505
  }

梦境迷离's avatar
重构  
梦境迷离 已提交
506
  /** 根据ID查询用户信息
梦境迷离's avatar
梦境迷离 已提交
507
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
508
    * @param id 用户id
梦境迷离's avatar
梦境迷离 已提交
509 510
    * @return User
    */
梦境迷离's avatar
梦境迷离 已提交
511
  @Cacheable(value = Array("findUserById"), keyGenerator = "wiselyKeyGenerator")
梦境迷离's avatar
梦境迷离 已提交
512
  def findUserById(id: Int): User = userRepository.findUserById(id)
梦境迷离's avatar
梦境迷离 已提交
513

梦境迷离's avatar
重构  
梦境迷离 已提交
514
  /** 根据用户ID查询用户的群组列表
梦境迷离's avatar
梦境迷离 已提交
515
    *
516
    * @param id 用户id
梦境迷离's avatar
梦境迷离 已提交
517 518
    * @return List[GroupList]
    */
梦境迷离's avatar
梦境迷离 已提交
519
  @Cacheable(value = Array("findGroupsById"), keyGenerator = "wiselyKeyGenerator")
梦境迷离's avatar
梦境迷离 已提交
520
  def findGroupsById(id: Int): util.List[GroupList] = userRepository.findGroupsById(id)
梦境迷离's avatar
梦境迷离 已提交
521

梦境迷离's avatar
重构  
梦境迷离 已提交
522
  /** 保存用户信息
梦境迷离's avatar
梦境迷离 已提交
523
    *
梦境迷离's avatar
重构  
梦境迷离 已提交
524
    * @param user 用户
梦境迷离's avatar
梦境迷离 已提交
525 526 527
    * @see User.scala
    * @return Boolean
    */
梦境迷离's avatar
梦境迷离 已提交
528
  //清除缓存
梦境迷离's avatar
梦境迷离 已提交
529 530 531 532
  @CacheEvict(
    value = Array("findUserById", "findFriendGroupsById", "findUserByGroupId"),
    allEntries = true
  )
梦境迷离's avatar
梦境迷离 已提交
533 534
  @Transactional
  def saveUser(user: User, request: HttpServletRequest): Boolean = {
梦境迷离's avatar
梦境迷离 已提交
535 536 537
    if (user == null || user.username == null || user.password == null || user.email == null) {
      false
    } else {
梦境迷离's avatar
梦境迷离 已提交
538 539
      //激活码
      val activeCode = UUIDUtil.getUUID64String()
梦境迷离's avatar
重构  
梦境迷离 已提交
540 541 542 543 544 545
      val userCopy = user.copy(
        active = activeCode,
        createDate = DateUtil.getDate,
        password = SecurityUtil.encrypt(user.password)
      )
      userRepository.saveUser(userCopy)
546
      log.info("userid = " + userCopy.id)
梦境迷离's avatar
梦境迷离 已提交
547
      //创建默认的好友分组
梦境迷离's avatar
重构  
梦境迷离 已提交
548
      createFriendGroup(SystemConstant.DEFAULT_GROUP_NAME, userCopy.id)
梦境迷离's avatar
梦境迷离 已提交
549
      //发送激活电子邮件
梦境迷离's avatar
梦境迷离 已提交
550
      mailService.sendHtmlMail(
梦境迷离's avatar
重构  
梦境迷离 已提交
551
        userCopy.email,
梦境迷离's avatar
梦境迷离 已提交
552
        SystemConstant.SUBJECT,
梦境迷离's avatar
重构  
梦境迷离 已提交
553
        userCopy.username + ",请确定这是你本人注册的账号   " + ", " + WebUtil.getServerIpAdder(
梦境迷离's avatar
梦境迷离 已提交
554 555 556
          request
        ) + "/user/active/" + activeCode
      )
梦境迷离's avatar
梦境迷离 已提交
557 558 559 560
      true
    }
  }

梦境迷离's avatar
梦境迷离 已提交
561
}