package com.mindskip.xzs.controller.wechat.student;
|
|
import com.mindskip.xzs.base.RestResponse;
|
import com.mindskip.xzs.configuration.property.SystemConfig;
|
import com.mindskip.xzs.controller.wechat.BaseWechatApiController;
|
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.*;
|
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 lombok.AllArgsConstructor;
|
import org.apache.commons.lang3.StringUtils;
|
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;
|
|
|
/**
|
* @version 2.2.0
|
* @description: 用户
|
* Copyright (C), 2020-2021, 武汉思维跳跃科技有限公司
|
* @date 2021 /9/7 9:45
|
*/
|
@Controller("WechatStudentUserController")
|
@RequestMapping(value = "/api/wx/student/user")
|
@AllArgsConstructor
|
@ResponseBody
|
public class UserController extends BaseWechatApiController {
|
|
private final ClassesService classesService;
|
private final UserService userService;
|
private final UserEventLogService userEventLogService;
|
private final MessageService messageService;
|
private final AuthenticationService authenticationService;
|
private final ApplicationEventPublisher eventPublisher;
|
private final SystemConfig systemConfig;
|
|
/**
|
* 获取当前用户新
|
*
|
* @return the rest response
|
*/
|
@RequestMapping(value = "/current", method = RequestMethod.POST)
|
public RestResponse<UserResponseVM> current() {
|
User user = getCurrentUser();
|
UserResponseVM userVm = UserResponseVM.from(user);
|
userVm.setBirthDay(DateTimeUtil.dateShortFormat(user.getBirthDay()));
|
String classesName = classesService.getJoinClasses(user.getId()).stream().map(d -> d.getClassesName()).collect(Collectors.joining(" "));
|
userVm.setClasses(classesName);
|
return RestResponse.ok(userVm);
|
}
|
|
/**
|
* 注册
|
*
|
* @param model the model
|
* @return the rest response
|
*/
|
@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.setPassword(encodePwd);
|
user.setRole(RoleEnum.STUDENT.getCode());
|
user.setStatus(UserStatusEnum.Enable.getCode());
|
user.setLastActiveTime(new Date());
|
user.setCreateTime(new Date());
|
user.setDeleted(false);
|
userService.insertByFilter(user);
|
UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date());
|
userEventLog.setContent(String.format("欢迎 %s 注册来到 %s", user.getUserName(), systemConfig.getName()));
|
eventPublisher.publishEvent(new UserEvent(userEventLog));
|
return RestResponse.ok();
|
}
|
|
/**
|
* 用户资料更新
|
*
|
* @param model the model
|
* @return the rest response
|
*/
|
@RequestMapping(value = "/update", method = RequestMethod.POST)
|
public RestResponse<UserResponseVM> update(@Valid UserUpdateVM model) {
|
if (StringUtils.isBlank(model.getBirthDay())) {
|
model.setBirthDay(null);
|
}
|
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);
|
}
|
|
/**
|
* 用户日志
|
*
|
* @return the rest response
|
*/
|
@RequestMapping(value = "/log", method = RequestMethod.POST)
|
public RestResponse<List<UserEventLogVM>> log() {
|
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()));
|
return vm;
|
}).collect(Collectors.toList());
|
return RestResponse.ok(userEventLogVMS);
|
}
|
|
/**
|
* 消息列表
|
*
|
* @param messageRequestVM the message request vm
|
* @return the rest response
|
*/
|
@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;
|
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.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime()));
|
return vm;
|
});
|
return RestResponse.ok(page);
|
}
|
|
/**
|
* 消息详情
|
*
|
* @param id the id
|
* @return the rest response
|
*/
|
@RequestMapping(value = "/message/detail/{id}", method = RequestMethod.POST)
|
public RestResponse messageDetail(@PathVariable Integer id) {
|
Message message = messageService.messageDetail(id);
|
return RestResponse.ok(message);
|
}
|
|
|
/**
|
* 未读消息数量
|
*
|
* @return the rest response
|
*/
|
@RequestMapping(value = "/message/unreadCount", method = RequestMethod.POST)
|
public RestResponse unReadCount() {
|
Integer count = messageService.unReadCount(getCurrentUser().getId());
|
return RestResponse.ok(count);
|
}
|
|
/**
|
* 消息已读
|
*
|
* @param id the id
|
* @return the rest response
|
*/
|
@RequestMapping(value = "/message/read/{id}", method = RequestMethod.POST)
|
public RestResponse read(@PathVariable Integer id) {
|
messageService.read(id);
|
return RestResponse.ok();
|
}
|
|
}
|