|
|
|
|
@ -1,45 +1,13 @@
|
|
|
|
|
package com.mindskip.xzs.controller.wx.student;
|
|
|
|
|
|
|
|
|
|
import com.mindskip.xzs.base.RestResponse;
|
|
|
|
|
import com.mindskip.xzs.controller.wx.BaseWXApiController;
|
|
|
|
|
import com.mindskip.xzs.domain.Message;
|
|
|
|
|
import com.mindskip.xzs.domain.MessageUser;
|
|
|
|
|
import com.mindskip.xzs.domain.User;
|
|
|
|
|
import com.mindskip.xzs.domain.UserEventLog;
|
|
|
|
|
import com.mindskip.xzs.domain.enums.RoleEnum;
|
|
|
|
|
import com.mindskip.xzs.domain.enums.UserStatusEnum;
|
|
|
|
|
import com.mindskip.xzs.event.UserEvent;
|
|
|
|
|
import com.mindskip.xzs.service.AuthenticationService;
|
|
|
|
|
import com.mindskip.xzs.service.MessageService;
|
|
|
|
|
import com.mindskip.xzs.service.UserEventLogService;
|
|
|
|
|
import com.mindskip.xzs.service.UserService;
|
|
|
|
|
import com.mindskip.xzs.utility.DateTimeUtil;
|
|
|
|
|
import com.mindskip.xzs.utility.PageInfoHelper;
|
|
|
|
|
import com.mindskip.xzs.viewmodel.student.user.*;
|
|
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.context.ApplicationEventPublisher;
|
|
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
|
|
|
|
import javax.validation.Valid;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Controller("WXStudentUserController")
|
|
|
|
|
@RequestMapping(value = "/api/wx/student/user")
|
|
|
|
|
@ResponseBody
|
|
|
|
|
@Controller("WXStudentUserController") // 控制器类,处理学生用户相关请求
|
|
|
|
|
@RequestMapping(value = "/api/wx/student/user") // 定义路径,指定该控制器处理的请求URL
|
|
|
|
|
@ResponseBody // 返回结果会自动转换为JSON格式
|
|
|
|
|
public class UserController extends BaseWXApiController {
|
|
|
|
|
|
|
|
|
|
private final UserService userService;
|
|
|
|
|
private final UserEventLogService userEventLogService;
|
|
|
|
|
private final MessageService messageService;
|
|
|
|
|
private final AuthenticationService authenticationService;
|
|
|
|
|
private final ApplicationEventPublisher eventPublisher;
|
|
|
|
|
private final UserService userService; // 用户服务,用于处理用户相关操作
|
|
|
|
|
private final UserEventLogService userEventLogService; // 用户事件日志服务
|
|
|
|
|
private final MessageService messageService; // 消息服务,用于处理消息相关操作
|
|
|
|
|
private final AuthenticationService authenticationService; // 身份验证服务,用于密码加密等操作
|
|
|
|
|
private final ApplicationEventPublisher eventPublisher; // 事件发布器,用于发布用户事件
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
public UserController(UserService userService, UserEventLogService userEventLogService, MessageService messageService, AuthenticationService authenticationService, ApplicationEventPublisher eventPublisher) {
|
|
|
|
|
@ -50,100 +18,107 @@ public class UserController extends BaseWXApiController {
|
|
|
|
|
this.eventPublisher = eventPublisher;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取当前用户信息
|
|
|
|
|
@RequestMapping(value = "/current", method = RequestMethod.POST)
|
|
|
|
|
public RestResponse<UserResponseVM> current() {
|
|
|
|
|
User user = getCurrentUser();
|
|
|
|
|
UserResponseVM userVm = UserResponseVM.from(user);
|
|
|
|
|
userVm.setBirthDay(DateTimeUtil.dateShortFormat(user.getBirthDay()));
|
|
|
|
|
return RestResponse.ok(userVm);
|
|
|
|
|
User user = getCurrentUser(); // 获取当前登录用户
|
|
|
|
|
UserResponseVM userVm = UserResponseVM.from(user); // 将用户信息转为UserResponseVM对象
|
|
|
|
|
userVm.setBirthDay(DateTimeUtil.dateShortFormat(user.getBirthDay())); // 格式化出生日期
|
|
|
|
|
return RestResponse.ok(userVm); // 返回用户信息
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 用户注册
|
|
|
|
|
@RequestMapping(value = "/register", method = RequestMethod.POST)
|
|
|
|
|
public RestResponse register(@Valid UserRegisterVM model) {
|
|
|
|
|
// 检查用户名是否已存在
|
|
|
|
|
User existUser = userService.getUserByUserName(model.getUserName());
|
|
|
|
|
if (null != existUser) {
|
|
|
|
|
return new RestResponse<>(2, "用户已存在");
|
|
|
|
|
}
|
|
|
|
|
User user = modelMapper.map(model, User.class);
|
|
|
|
|
String encodePwd = authenticationService.pwdEncode(model.getPassword());
|
|
|
|
|
user.setUserUuid(UUID.randomUUID().toString());
|
|
|
|
|
User user = modelMapper.map(model, User.class); // 将注册信息映射为用户对象
|
|
|
|
|
String encodePwd = authenticationService.pwdEncode(model.getPassword()); // 加密密码
|
|
|
|
|
user.setUserUuid(UUID.randomUUID().toString()); // 生成UUID
|
|
|
|
|
user.setPassword(encodePwd);
|
|
|
|
|
user.setRole(RoleEnum.STUDENT.getCode());
|
|
|
|
|
user.setStatus(UserStatusEnum.Enable.getCode());
|
|
|
|
|
user.setRole(RoleEnum.STUDENT.getCode()); // 设置角色为学生
|
|
|
|
|
user.setStatus(UserStatusEnum.Enable.getCode()); // 设置用户状态为启用
|
|
|
|
|
user.setLastActiveTime(new Date());
|
|
|
|
|
user.setCreateTime(new Date());
|
|
|
|
|
user.setDeleted(false);
|
|
|
|
|
userService.insertByFilter(user);
|
|
|
|
|
userService.insertByFilter(user); // 插入用户信息
|
|
|
|
|
UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date());
|
|
|
|
|
userEventLog.setContent("欢迎 " + user.getUserName() + " 注册来到学之思开源考试系统");
|
|
|
|
|
eventPublisher.publishEvent(new UserEvent(userEventLog));
|
|
|
|
|
return RestResponse.ok();
|
|
|
|
|
eventPublisher.publishEvent(new UserEvent(userEventLog)); // 发布用户注册事件
|
|
|
|
|
return RestResponse.ok(); // 返回注册成功响应
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更新用户信息
|
|
|
|
|
@RequestMapping(value = "/update", method = RequestMethod.POST)
|
|
|
|
|
public RestResponse<UserResponseVM> update(@Valid UserUpdateVM model) {
|
|
|
|
|
if (StringUtils.isBlank(model.getBirthDay())) {
|
|
|
|
|
model.setBirthDay(null);
|
|
|
|
|
model.setBirthDay(null); // 如果生日为空,则设置为null
|
|
|
|
|
}
|
|
|
|
|
User user = userService.selectById(getCurrentUser().getId());
|
|
|
|
|
modelMapper.map(model, user);
|
|
|
|
|
user.setModifyTime(new Date());
|
|
|
|
|
userService.updateByIdFilter(user);
|
|
|
|
|
User user = userService.selectById(getCurrentUser().getId()); // 获取当前用户信息
|
|
|
|
|
modelMapper.map(model, user); // 将更新的信息映射到用户对象
|
|
|
|
|
user.setModifyTime(new Date()); // 设置修改时间
|
|
|
|
|
userService.updateByIdFilter(user); // 更新用户信息
|
|
|
|
|
UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date());
|
|
|
|
|
userEventLog.setContent(user.getUserName() + " 更新了个人资料");
|
|
|
|
|
eventPublisher.publishEvent(new UserEvent(userEventLog));
|
|
|
|
|
UserResponseVM userVm = UserResponseVM.from(user);
|
|
|
|
|
return RestResponse.ok(userVm);
|
|
|
|
|
eventPublisher.publishEvent(new UserEvent(userEventLog)); // 发布用户信息更新事件
|
|
|
|
|
UserResponseVM userVm = UserResponseVM.from(user); // 转换成返回对象
|
|
|
|
|
return RestResponse.ok(userVm); // 返回更新后的用户信息
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取用户事件日志
|
|
|
|
|
@RequestMapping(value = "/log", method = RequestMethod.POST)
|
|
|
|
|
public RestResponse<List<UserEventLogVM>> log() {
|
|
|
|
|
User user = getCurrentUser();
|
|
|
|
|
List<UserEventLog> userEventLogs = userEventLogService.getUserEventLogByUserId(user.getId());
|
|
|
|
|
User user = getCurrentUser(); // 获取当前用户
|
|
|
|
|
List<UserEventLog> userEventLogs = userEventLogService.getUserEventLogByUserId(user.getId()); // 获取用户的事件日志
|
|
|
|
|
List<UserEventLogVM> userEventLogVMS = userEventLogs.stream().map(d -> {
|
|
|
|
|
UserEventLogVM vm = modelMapper.map(d, UserEventLogVM.class);
|
|
|
|
|
vm.setCreateTime(DateTimeUtil.dateFormat(d.getCreateTime()));
|
|
|
|
|
vm.setCreateTime(DateTimeUtil.dateFormat(d.getCreateTime())); // 格式化事件时间
|
|
|
|
|
return vm;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
return RestResponse.ok(userEventLogVMS);
|
|
|
|
|
return RestResponse.ok(userEventLogVMS); // 返回事件日志列表
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取用户消息分页列表
|
|
|
|
|
@RequestMapping(value = "/message/page", method = RequestMethod.POST)
|
|
|
|
|
public RestResponse<PageInfo<MessageResponseVM>> messagePageList(MessageRequestVM messageRequestVM) {
|
|
|
|
|
messageRequestVM.setReceiveUserId(getCurrentUser().getId());
|
|
|
|
|
PageInfo<MessageUser> messageUserPageInfo = messageService.studentPage(messageRequestVM);
|
|
|
|
|
List<Integer> ids = messageUserPageInfo.getList().stream().map(d -> d.getMessageId()).collect(Collectors.toList());
|
|
|
|
|
List<Message> messages = ids.size() != 0 ? messageService.selectMessageByIds(ids) : null;
|
|
|
|
|
messageRequestVM.setReceiveUserId(getCurrentUser().getId()); // 设置接收者为当前用户
|
|
|
|
|
PageInfo<MessageUser> messageUserPageInfo = messageService.studentPage(messageRequestVM); // 获取消息分页
|
|
|
|
|
List<Integer> ids = messageUserPageInfo.getList().stream().map(d -> d.getMessageId()).collect(Collectors.toList()); // 获取消息ID列表
|
|
|
|
|
List<Message> messages = ids.size() != 0 ? messageService.selectMessageByIds(ids) : null; // 获取消息详情
|
|
|
|
|
PageInfo<MessageResponseVM> page = PageInfoHelper.copyMap(messageUserPageInfo, e -> {
|
|
|
|
|
MessageResponseVM vm = modelMapper.map(e, MessageResponseVM.class);
|
|
|
|
|
messages.stream().filter(d -> e.getMessageId().equals(d.getId())).findFirst().ifPresent(message -> {
|
|
|
|
|
vm.setTitle(message.getTitle());
|
|
|
|
|
vm.setContent(message.getContent());
|
|
|
|
|
vm.setSendUserName(message.getSendUserName());
|
|
|
|
|
vm.setTitle(message.getTitle()); // 设置消息标题
|
|
|
|
|
vm.setContent(message.getContent()); // 设置消息内容
|
|
|
|
|
vm.setSendUserName(message.getSendUserName()); // 设置发送者用户名
|
|
|
|
|
});
|
|
|
|
|
vm.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime()));
|
|
|
|
|
vm.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime())); // 格式化消息创建时间
|
|
|
|
|
return vm;
|
|
|
|
|
});
|
|
|
|
|
return RestResponse.ok(page);
|
|
|
|
|
return RestResponse.ok(page); // 返回消息分页结果
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取消息详情
|
|
|
|
|
@RequestMapping(value = "/message/detail/{id}", method = RequestMethod.POST)
|
|
|
|
|
public RestResponse messageDetail(@PathVariable Integer id) {
|
|
|
|
|
Message message = messageService.messageDetail(id);
|
|
|
|
|
return RestResponse.ok(message);
|
|
|
|
|
Message message = messageService.messageDetail(id); // 获取指定ID的消息详情
|
|
|
|
|
return RestResponse.ok(message); // 返回消息详情
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取未读消息数量
|
|
|
|
|
@RequestMapping(value = "/message/unreadCount", method = RequestMethod.POST)
|
|
|
|
|
public RestResponse unReadCount() {
|
|
|
|
|
Integer count = messageService.unReadCount(getCurrentUser().getId());
|
|
|
|
|
return RestResponse.ok(count);
|
|
|
|
|
Integer count = messageService.unReadCount(getCurrentUser().getId()); // 获取当前用户未读消息数量
|
|
|
|
|
return RestResponse.ok(count); // 返回未读消息数量
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 标记消息为已读
|
|
|
|
|
@RequestMapping(value = "/message/read/{id}", method = RequestMethod.POST)
|
|
|
|
|
public RestResponse read(@PathVariable Integer id) {
|
|
|
|
|
messageService.read(id);
|
|
|
|
|
return RestResponse.ok();
|
|
|
|
|
messageService.read(id); // 标记消息为已读
|
|
|
|
|
return RestResponse.ok(); // 返回成功响应
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|