package com.ycl.jxkg.controller.student; import com.ycl.jxkg.base.BaseApiController; import com.ycl.jxkg.base.Result; import com.ycl.jxkg.domain.entity.Message; import com.ycl.jxkg.domain.entity.MessageUser; import com.ycl.jxkg.domain.entity.User; import com.ycl.jxkg.domain.entity.UserEventLog; import com.ycl.jxkg.domain.form.StudentUpdatePwdForm; import com.ycl.jxkg.domain.form.UpdatePwdForm; import com.ycl.jxkg.enums.RoleEnum; import com.ycl.jxkg.enums.UserStatusEnum; import com.ycl.jxkg.event.UserEvent; import com.ycl.jxkg.service.AuthenticationService; import com.ycl.jxkg.service.MessageService; import com.ycl.jxkg.service.UserEventLogService; import com.ycl.jxkg.service.UserService; import com.ycl.jxkg.utils.DateTimeUtil; import com.ycl.jxkg.utils.PageInfoHelper; import com.ycl.jxkg.domain.vo.student.user.*; import com.github.pagehelper.PageInfo; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.context.ApplicationEventPublisher; import org.springframework.validation.annotation.Validated; 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; @RequiredArgsConstructor @RestController("StudentUserController") @RequestMapping(value = "/api/student/user") public class UserController extends BaseApiController { private final UserService userService; private final UserEventLogService userEventLogService; private final MessageService messageService; private final AuthenticationService authenticationService; private final ApplicationEventPublisher eventPublisher; @RequestMapping(value = "/current", method = RequestMethod.POST) public Result current() { User user = getCurrentUser(); UserResponseVO userVm = UserResponseVO.from(user); return Result.ok(userVm); } @RequestMapping(value = "/register", method = RequestMethod.POST) public Result register(@RequestBody @Valid UserRegisterVO model) { User existUser = userService.getUserByUserName(model.getUserName()); if (null != existUser) { return new Result<>(2, "用户已存在"); } User user = new User(); BeanUtils.copyProperties(model, user); String encodePwd = authenticationService.pwdEncode(model.getPassword()); user.setUserUuid(UUID.randomUUID().toString()); user.setPassword(encodePwd); user.setRole(RoleEnum.STUDENT.getCode()); user.setStatus(UserStatusEnum.Enable.getCode()); user.setLastActiveTime(new Date()); user.setCreateTime(new Date()); userService.insertUser(user); UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date()); userEventLog.setContent("欢迎 " + user.getUserName() + " 注册来到学之思开源考试系统"); eventPublisher.publishEvent(new UserEvent(userEventLog)); return Result.ok(); } @RequestMapping(value = "/update", method = RequestMethod.POST) public Result update(@RequestBody @Valid UserUpdateVO model) { User user = userService.getById(getCurrentUser().getId()); BeanUtils.copyProperties(model, user); user.setModifyTime(new Date()); userService.updateUser(user); UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date()); userEventLog.setContent(user.getUserName() + " 更新了个人资料"); eventPublisher.publishEvent(new UserEvent(userEventLog)); return Result.ok(); } @RequestMapping(value = "/log", method = RequestMethod.POST) public Result> log() { User user = getCurrentUser(); List userEventLogs = userEventLogService.getUserEventLogByUserId(user.getId()); List userEventLogVOS = userEventLogs.stream().map(d -> { UserEventLogVO vo = new UserEventLogVO(); BeanUtils.copyProperties(d, vo); vo.setCreateTime(DateTimeUtil.dateFormat(d.getCreateTime())); return vo; }).collect(Collectors.toList()); return Result.ok(userEventLogVOS); } @RequestMapping(value = "/message/page", method = RequestMethod.POST) public Result> messagePageList(@RequestBody MessageRequestVO messageRequestVO) { messageRequestVO.setReceiveUserId(getCurrentUser().getId()); PageInfo messageUserPageInfo = messageService.studentPage(messageRequestVO); List ids = messageUserPageInfo.getList().stream().map(d -> d.getMessageId()).collect(Collectors.toList()); List messages = ids.size() != 0 ? messageService.selectMessageByIds(ids) : null; PageInfo page = PageInfoHelper.copyMap(messageUserPageInfo, e -> { MessageResponseVO vo = new MessageResponseVO(); BeanUtils.copyProperties(e, vo); messages.stream().filter(d -> e.getMessageId().equals(d.getId())).findFirst().ifPresent(message -> { vo.setTitle(message.getTitle()); vo.setContent(message.getContent()); vo.setSendUserName(message.getSendUserName()); }); vo.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime())); return vo; }); return Result.ok(page); } @RequestMapping(value = "/message/unreadCount", method = RequestMethod.POST) public Result unReadCount() { Integer count = messageService.unReadCount(getCurrentUser().getId()); return Result.ok(count); } @RequestMapping(value = "/message/read/{id}", method = RequestMethod.POST) public Result read(@PathVariable Integer id) { messageService.read(id); return Result.ok(); } @ApiOperation(value = "修改密码", tags = {"修改密码"}) @PostMapping("/update/password") public Result updatePassword(@RequestBody @Validated StudentUpdatePwdForm form) { userService.updateStudentPassword(form); return Result.ok("修改成功"); } }