修改放行参数
This commit is contained in:
parent
5437d02aa0
commit
77656d2305
@ -41,11 +41,11 @@ public class AppTokenFilter extends GenericFilterBean implements InitializingBea
|
||||
/**
|
||||
* APP登录(用户名密码)
|
||||
*/
|
||||
private static final String URL_LOGIN_DEFAULT = "/**/app/sign/login";
|
||||
private static final String URL_LOGIN_DEFAULT = "/**/app/sign/default";
|
||||
/**
|
||||
* APP登录(手机验证码)
|
||||
*/
|
||||
private static final String URL_LOGIN_PHONE = "/**/app/sign/loginphone";
|
||||
private static final String URL_LOGIN_PHONE = "/**/app/sign/phone";
|
||||
/**
|
||||
* APP注册
|
||||
*/
|
||||
|
@ -69,6 +69,7 @@ public class ErrorResult implements Serializable {
|
||||
ENCODE_ERROR(40002),
|
||||
DECODE_ERROR(40003),
|
||||
APP_DEPENDENCY_ERROR(40004),
|
||||
PROPERTIES_ERROR(40005),
|
||||
TEXT_ILLEGAL(40101),
|
||||
PARAMS_ERROR(40102),
|
||||
QUERY_ERROR(40101),
|
||||
|
@ -0,0 +1,153 @@
|
||||
package ink.wgink.service.user.controller.app.api;
|
||||
|
||||
import ink.wgink.annotation.CheckRequestBodyAnnotation;
|
||||
import ink.wgink.common.base.DefaultBaseController;
|
||||
import ink.wgink.exceptions.ParamsException;
|
||||
import ink.wgink.exceptions.SearchException;
|
||||
import ink.wgink.exceptions.UpdateException;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.pojo.result.ErrorResult;
|
||||
import ink.wgink.pojo.result.SuccessResult;
|
||||
import ink.wgink.pojo.result.SuccessResultData;
|
||||
import ink.wgink.service.user.pojo.dtos.AppUserDTO;
|
||||
import ink.wgink.service.user.pojo.vos.UpdatePasswordVO;
|
||||
import ink.wgink.service.user.pojo.vos.UpdateUserVO;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import ink.wgink.util.ReflectUtil;
|
||||
import ink.wgink.util.RegexUtil;
|
||||
import io.swagger.annotations.*;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
/**
|
||||
* When you feel like quitting. Think about why you started
|
||||
* 当你想要放弃的时候,想想当初你为何开始
|
||||
*
|
||||
* @ClassName: UserAppController
|
||||
* @Description: 用户
|
||||
* @Author: WangGeng
|
||||
* @Date: 2019-08-14 14:24
|
||||
* @Version: 1.0
|
||||
**/
|
||||
@Api(tags = ISystemConstant.API_TAGS_APP_PREFIX + "用户")
|
||||
@RestController
|
||||
@RequestMapping(ISystemConstant.APP_PREFIX + "/user")
|
||||
public class UserAppController extends DefaultBaseController {
|
||||
|
||||
@Autowired
|
||||
private IUserService userService;
|
||||
|
||||
@ApiOperation(value = "修改用户信息", notes = "修改用户信息接口")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "token", value = "token", paramType = "header"),
|
||||
})
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@PutMapping("update-info")
|
||||
@CheckRequestBodyAnnotation
|
||||
public SuccessResultData<String> updateInfo(@RequestHeader("token") String token, @RequestBody UpdateUserVO updateUserVO) throws Exception {
|
||||
if (StringUtils.isBlank(updateUserVO.getName())) {
|
||||
throw new ParamsException("昵称不能为空");
|
||||
}
|
||||
if (!StringUtils.isBlank(updateUserVO.getPhone()) && !RegexUtil.isPhone(updateUserVO.getPhone())) {
|
||||
throw new ParamsException("手机格式不正确");
|
||||
}
|
||||
if (!StringUtils.isBlank(updateUserVO.getEmail()) && !RegexUtil.isEmail(updateUserVO.getEmail())) {
|
||||
throw new ParamsException("邮箱格式不正确");
|
||||
}
|
||||
return new SuccessResultData<>(userService.updateInfo(token, updateUserVO));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改头像", notes = "修改头像接口")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "token", value = "token", paramType = "header"),
|
||||
})
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@PutMapping("update-avatar")
|
||||
public SuccessResultData<String> updateAvatar(@RequestHeader("token") String token, @RequestBody UpdateUserVO updateUserVO) throws Exception {
|
||||
if (StringUtils.isBlank(updateUserVO.getAvatar())) {
|
||||
throw new ParamsException("头像不能为空");
|
||||
}
|
||||
return new SuccessResultData<>(userService.updateInfo(token, updateUserVO));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改昵称", notes = "修改昵称接口")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "token", value = "token", paramType = "header"),
|
||||
})
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@PutMapping("update-name")
|
||||
public SuccessResult updateName(@RequestHeader("token") String token, @RequestBody UpdateUserVO updateUserVO) throws Exception {
|
||||
if (StringUtils.isBlank(updateUserVO.getName())) {
|
||||
throw new ParamsException("昵称不能为空");
|
||||
}
|
||||
return new SuccessResultData<>(userService.updateInfo(token, updateUserVO));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改电话", notes = "修改电话接口")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "token", value = "token", paramType = "header"),
|
||||
})
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@PutMapping("update-phone")
|
||||
public SuccessResult updatePhone(@RequestHeader("token") String token, @RequestBody UpdateUserVO updateUserVO) throws Exception {
|
||||
if (StringUtils.isBlank(updateUserVO.getPhone())) {
|
||||
throw new ParamsException("电话不能为空");
|
||||
}
|
||||
return new SuccessResultData<>(userService.updateInfo(token, updateUserVO));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改邮箱", notes = "修改邮箱接口")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "token", value = "token", paramType = "header"),
|
||||
})
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@PutMapping("update-email")
|
||||
public SuccessResult updateEmail(@RequestHeader("token") String token, @RequestBody UpdateUserVO updateUserVO) throws Exception {
|
||||
if (StringUtils.isBlank(updateUserVO.getEmail())) {
|
||||
throw new ParamsException("邮箱不能为空");
|
||||
}
|
||||
return new SuccessResultData<>(userService.updateInfo(token, updateUserVO));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改密码", notes = "修改密码接口")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "token", value = "token", paramType = "header"),
|
||||
})
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@PutMapping("update-password")
|
||||
@CheckRequestBodyAnnotation
|
||||
public SuccessResult updatePassword(@RequestHeader("token") String token,
|
||||
@RequestBody UpdatePasswordVO updatePasswordVO) throws ParamsException, SearchException, UpdateException, ReflectUtil.ReflectException {
|
||||
if (updatePasswordVO.getNewPassword().length() < 6) {
|
||||
throw new ParamsException("新密码长度必须大于6位");
|
||||
}
|
||||
userService.updatePassword(token, updatePasswordVO);
|
||||
return new SuccessResult();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取APP用户", notes = "获取APP用户接口")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "token", value = "token", paramType = "header"),
|
||||
})
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@GetMapping("get-app-user")
|
||||
public AppUserDTO getAppUser(@RequestHeader("token") String token) throws ReflectUtil.ReflectException {
|
||||
return userService.getAppUser(token);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "下载用户头像", notes = "下载用户头像接口")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "userId", value = "用户Id", paramType = "path")
|
||||
})
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@GetMapping("download-avatar/{userId}")
|
||||
public void downLoadAvatar(@PathVariable("userId") String userId, HttpServletRequest request, HttpServletResponse response) {
|
||||
userService.downLoadAvatar(userId, request, response);
|
||||
}
|
||||
|
||||
}
|
@ -1,9 +1,11 @@
|
||||
package ink.wgink.service.user.controller.route;
|
||||
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.user.IUserExpandBaseService;
|
||||
import ink.wgink.util.ResourceUtil;
|
||||
import ink.wgink.util.request.RequestUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
@ -28,9 +30,16 @@ import java.io.IOException;
|
||||
@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/user")
|
||||
public class UserRouteController {
|
||||
|
||||
@Autowired(required = false)
|
||||
private IUserExpandBaseService userExpandBaseService;
|
||||
|
||||
@GetMapping("list")
|
||||
public ModelAndView list() {
|
||||
return new ModelAndView("user/list");
|
||||
ModelAndView mv = new ModelAndView("user/list");
|
||||
if (userExpandBaseService != null) {
|
||||
mv.addObject("userExpand", userExpandBaseService.getRoute());
|
||||
}
|
||||
return mv;
|
||||
}
|
||||
|
||||
@GetMapping("save")
|
||||
|
@ -0,0 +1,98 @@
|
||||
package ink.wgink.service.user.pojo.dtos;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
/**
|
||||
* When you feel like quitting. Think about why you started
|
||||
* 当你想要放弃的时候,想想当初你为何开始
|
||||
*
|
||||
* @ClassName: UserAppDTO
|
||||
* @Description: APP用户
|
||||
* @Author: WangGeng
|
||||
* @Date: 2020/6/7 11:20
|
||||
* @Version: 1.0
|
||||
**/
|
||||
@ApiModel
|
||||
public class AppUserDTO {
|
||||
|
||||
@ApiModelProperty(name = "userId", value = "用户ID")
|
||||
private String userId;
|
||||
@ApiModelProperty(name = "username", value = "用户名")
|
||||
private String username;
|
||||
@ApiModelProperty(name = "name", value = "昵称")
|
||||
private String name;
|
||||
@ApiModelProperty(name = "avatar", value = "头像")
|
||||
private String avatar;
|
||||
@ApiModelProperty(name = "phone", value = "手机")
|
||||
private String phone;
|
||||
@ApiModelProperty(name = "email", value = "邮箱")
|
||||
private String email;
|
||||
|
||||
public String getUserId() {
|
||||
return userId == null ? "" : userId.trim();
|
||||
}
|
||||
|
||||
public void setUserId(String userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username == null ? "" : username.trim();
|
||||
}
|
||||
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name == null ? "" : name.trim();
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getAvatar() {
|
||||
return avatar == null ? "" : avatar.trim();
|
||||
}
|
||||
|
||||
public void setAvatar(String avatar) {
|
||||
this.avatar = avatar;
|
||||
}
|
||||
|
||||
public String getPhone() {
|
||||
return phone == null ? "" : phone.trim();
|
||||
}
|
||||
|
||||
public void setPhone(String phone) {
|
||||
this.phone = phone;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email == null ? "" : email.trim();
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder sb = new StringBuilder("{");
|
||||
sb.append("\"userId\":\"")
|
||||
.append(userId).append('\"');
|
||||
sb.append(",\"username\":\"")
|
||||
.append(username).append('\"');
|
||||
sb.append(",\"name\":\"")
|
||||
.append(name).append('\"');
|
||||
sb.append(",\"avatar\":\"")
|
||||
.append(avatar).append('\"');
|
||||
sb.append(",\"phone\":\"")
|
||||
.append(phone).append('\"');
|
||||
sb.append(",\"email\":\"")
|
||||
.append(email).append('\"');
|
||||
sb.append('}');
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
package ink.wgink.service.user.pojo.vos;
|
||||
|
||||
import ink.wgink.annotation.CheckEmptyAnnotation;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* When you feel like quitting. Think about why you started
|
||||
* 当你想要放弃的时候,想想当初你为何开始
|
||||
*
|
||||
* @ClassName: AppUserVO
|
||||
* @Description: app用户
|
||||
* @Author: WangGeng
|
||||
* @Date: 2019-08-15 18:29
|
||||
* @Version: 1.0
|
||||
**/
|
||||
@ApiModel
|
||||
public class UpdateUserVO {
|
||||
|
||||
@ApiModelProperty(name = "avatar", value = "头像")
|
||||
private String avatar;
|
||||
@ApiModelProperty(name = "name", value = "昵称")
|
||||
private String name;
|
||||
@ApiModelProperty(name = "phone", value = "联系电话")
|
||||
private String phone;
|
||||
@ApiModelProperty(name = "email", value = "邮箱")
|
||||
private String email;
|
||||
|
||||
public String getAvatar() {
|
||||
return avatar == null ? "" : avatar.trim();
|
||||
}
|
||||
|
||||
public void setAvatar(String avatar) {
|
||||
this.avatar = avatar;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name == null ? "" : name.trim();
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getPhone() {
|
||||
return phone == null ? "" : phone.trim();
|
||||
}
|
||||
|
||||
public void setPhone(String phone) {
|
||||
this.phone = phone;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email == null ? "" : email.trim();
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder sb = new StringBuilder("{");
|
||||
sb.append("\"avatar\":\"")
|
||||
.append(avatar).append('\"');
|
||||
sb.append(",\"name\":\"")
|
||||
.append(name).append('\"');
|
||||
sb.append(",\"phone\":\"")
|
||||
.append(phone).append('\"');
|
||||
sb.append(",\"email\":\"")
|
||||
.append(email).append('\"');
|
||||
sb.append('}');
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
@ -5,12 +5,17 @@ import ink.wgink.exceptions.UpdateException;
|
||||
import ink.wgink.interfaces.user.IUserBaseService;
|
||||
import ink.wgink.interfaces.user.IUserCheckService;
|
||||
import ink.wgink.pojo.result.SuccessResult;
|
||||
import ink.wgink.service.user.pojo.dtos.AppUserDTO;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.service.user.pojo.vos.*;
|
||||
import ink.wgink.pojo.result.UploadExcelResultDTO;
|
||||
import ink.wgink.util.ReflectUtil;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ -65,6 +70,15 @@ public interface IUserService extends IUserBaseService, IUserCheckService {
|
||||
*/
|
||||
void save(UserVO userVO);
|
||||
|
||||
/**
|
||||
* 保存用户
|
||||
*
|
||||
* @param userVO
|
||||
* @param isRegister
|
||||
* @return
|
||||
*/
|
||||
String saveAndReturnId(UserVO userVO, boolean isRegister);
|
||||
|
||||
/**
|
||||
* 注册用户
|
||||
*
|
||||
@ -90,6 +104,16 @@ public interface IUserService extends IUserBaseService, IUserCheckService {
|
||||
*/
|
||||
void update(String userId, UserVO userVO);
|
||||
|
||||
/**
|
||||
* 修改用户,不包含密码,返回新token
|
||||
*
|
||||
* @param token
|
||||
* @param updateUserVO
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
String updateInfo(String token, UpdateUserVO updateUserVO) throws Exception;
|
||||
|
||||
/**
|
||||
* 重置用户密码
|
||||
*
|
||||
@ -115,6 +139,13 @@ public interface IUserService extends IUserBaseService, IUserCheckService {
|
||||
*/
|
||||
void updatePassword(UpdatePasswordVO updatePasswordVO);
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
*
|
||||
* @param token
|
||||
*/
|
||||
void updatePassword(String token, UpdatePasswordVO updatePasswordVO) throws ReflectUtil.ReflectException;
|
||||
|
||||
/**
|
||||
* 更新过期时间
|
||||
*
|
||||
@ -163,4 +194,20 @@ public interface IUserService extends IUserBaseService, IUserCheckService {
|
||||
*/
|
||||
Integer count(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* APP用户
|
||||
*
|
||||
* @param token
|
||||
* @return
|
||||
*/
|
||||
AppUserDTO getAppUser(String token) throws ReflectUtil.ReflectException;
|
||||
|
||||
/**
|
||||
* 下载用户头像
|
||||
*
|
||||
* @param userId
|
||||
* @param request
|
||||
* @param response
|
||||
*/
|
||||
void downLoadAvatar(String userId, HttpServletRequest request, HttpServletResponse response);
|
||||
}
|
||||
|
@ -4,13 +4,17 @@ import com.alibaba.excel.EasyExcel;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.exceptions.FileException;
|
||||
import ink.wgink.exceptions.SearchException;
|
||||
import ink.wgink.exceptions.UpdateException;
|
||||
import ink.wgink.exceptions.base.SystemException;
|
||||
import ink.wgink.interfaces.app.IAppSignBaseService;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.manager.ISystemConfigManager;
|
||||
import ink.wgink.module.file.excel.error.AbstractErrorExcelHandler;
|
||||
import ink.wgink.module.file.service.IFileService;
|
||||
import ink.wgink.pojo.ListPage;
|
||||
import ink.wgink.pojo.app.AppTokenUser;
|
||||
import ink.wgink.pojo.dtos.user.UserDTO;
|
||||
import ink.wgink.pojo.result.SuccessResultData;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
@ -21,11 +25,14 @@ import ink.wgink.service.user.excel.UserExcel;
|
||||
import ink.wgink.service.user.excel.UserExcelError;
|
||||
import ink.wgink.service.user.excel.UserExcelListener;
|
||||
import ink.wgink.service.user.pojo.bos.UserAdjustmentBO;
|
||||
import ink.wgink.service.user.pojo.dtos.AppUserDTO;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.service.user.pojo.vos.*;
|
||||
import ink.wgink.service.user.service.IUserAdjustmentService;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import ink.wgink.util.ArrayListUtil;
|
||||
import ink.wgink.util.ReflectUtil;
|
||||
import ink.wgink.util.ResourceUtil;
|
||||
import ink.wgink.util.UUIDUtil;
|
||||
import ink.wgink.util.date.DateUtil;
|
||||
import ink.wgink.util.map.HashMapUtil;
|
||||
@ -39,7 +46,10 @@ import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -68,15 +78,17 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
private String defaultPassword;
|
||||
@Autowired
|
||||
private IFileService fileService;
|
||||
@Autowired(required = false)
|
||||
private IAppSignBaseService appSignBaseService;
|
||||
|
||||
@Override
|
||||
public void save(UserVO userVO) {
|
||||
saveUser(userVO, false);
|
||||
saveAndReturnId(userVO, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(UserVO userVO) {
|
||||
saveUser(userVO, true);
|
||||
saveAndReturnId(userVO, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -85,7 +97,8 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
* @param userVO
|
||||
* @param isRegister 是否注册
|
||||
*/
|
||||
private void saveUser(UserVO userVO, boolean isRegister) {
|
||||
@Override
|
||||
public String saveAndReturnId(UserVO userVO, boolean isRegister) {
|
||||
UserDTO userDTO = getByUsername(userVO.getUserUsername());
|
||||
if (userDTO != null) {
|
||||
throw new SearchException("用户已经存在");
|
||||
@ -101,6 +114,7 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
setSaveInfo(params);
|
||||
}
|
||||
userDao.save(params);
|
||||
return userId;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -122,6 +136,19 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
userDao.update(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String updateInfo(String token, UpdateUserVO updateUserVO) throws Exception {
|
||||
if (appSignBaseService == null) {
|
||||
throw new SystemException("未引入APP登录模块");
|
||||
}
|
||||
String userId = securityComponent.getAppTokenUser(token).getId();
|
||||
Map<String, Object> params = HashMapUtil.beanToMap(updateUserVO);
|
||||
params.put("userId", userId);
|
||||
setAppUpdateInfo(token, params);
|
||||
userDao.update(params);
|
||||
return appSignBaseService.userIdSign(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetPassword(String userId, RestPasswordVO restPasswordVO) {
|
||||
UserDTO userDTO = get(userId);
|
||||
@ -190,6 +217,33 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
userAdjustmentService.save(userAdjustmentBO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePassword(String token, UpdatePasswordVO updatePasswordVO) throws ReflectUtil.ReflectException {
|
||||
AppTokenUser appTokenUser = securityComponent.getAppTokenUser(token);
|
||||
String oldPassword = DigestUtils.md5Hex(DigestUtils.md5Hex(DigestUtils.md5Hex(updatePasswordVO.getOldPassword())));
|
||||
String newPassword = DigestUtils.md5Hex(DigestUtils.md5Hex(DigestUtils.md5Hex(updatePasswordVO.getNewPassword())));
|
||||
UserPO userPO = getPO(appTokenUser.getId());
|
||||
if (!passwordEncoder.matches(oldPassword, userPO.getUserPassword())) {
|
||||
throw new UpdateException("旧密码错误");
|
||||
}
|
||||
Map<String, Object> params = getHashMap(4);
|
||||
params.put("userPassword", passwordEncoder.encode(newPassword));
|
||||
params.put("gmtPasswordModified", DateUtil.getTime());
|
||||
params.put("userId", userPO.getUserId());
|
||||
userDao.updatePassword(params);
|
||||
|
||||
// 日志
|
||||
UserAdjustmentBO userAdjustmentBO = new UserAdjustmentBO();
|
||||
userAdjustmentBO.setUserId(appTokenUser.getId());
|
||||
userAdjustmentBO.setUserName(appTokenUser.getName());
|
||||
userAdjustmentBO.setUpdateType(UserUpdateTypeEnum.PASSWORD.getValue());
|
||||
userAdjustmentBO.setUpdateReason("修改密码");
|
||||
userAdjustmentBO.setCreator(appTokenUser.getId());
|
||||
userAdjustmentBO.setCreatorName(appTokenUser.getName());
|
||||
userAdjustmentBO.setGmtCreate(DateUtil.getTime());
|
||||
userAdjustmentService.save(userAdjustmentBO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateExpiredDate(String userId, UpdateExpiredDateVO updateExpiredDateVO) {
|
||||
UserDTO oldUserDTO = get(userId);
|
||||
@ -232,7 +286,7 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
userVO.setUserEmail(userEmail);
|
||||
userVO.setUserType(2);
|
||||
userVO.setUserState(0);
|
||||
saveUser(userVO, false);
|
||||
saveAndReturnId(userVO, false);
|
||||
} catch (Exception e) {
|
||||
userExcelErrors.add(getUserExcelError(userExcel, e.getMessage()));
|
||||
}
|
||||
@ -330,6 +384,40 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
return count == null ? 0 : count;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppUserDTO getAppUser(String token) throws ReflectUtil.ReflectException {
|
||||
String userId = securityComponent.getAppTokenUser(token).getId();
|
||||
UserPO userPO = getPO(userId);
|
||||
if (userPO == null) {
|
||||
throw new SearchException("用户不存在");
|
||||
}
|
||||
AppUserDTO appUserDTO = new AppUserDTO();
|
||||
appUserDTO.setUserId(userPO.getUserId());
|
||||
appUserDTO.setAvatar(userPO.getUserAvatar());
|
||||
appUserDTO.setUsername(userPO.getUserUsername());
|
||||
appUserDTO.setName(userPO.getUserName());
|
||||
appUserDTO.setEmail(userPO.getUserEmail());
|
||||
appUserDTO.setPhone(userPO.getUserPhone());
|
||||
return appUserDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void downLoadAvatar(String userId, HttpServletRequest request, HttpServletResponse response) {
|
||||
UserDTO userDTO = get(userId);
|
||||
if (userDTO == null) {
|
||||
throw new SearchException("用户不存在");
|
||||
}
|
||||
// 头像不存在,加载默认头像
|
||||
if (StringUtils.isBlank(userDTO.getUserAvatar())) {
|
||||
downloadDefaultAvatar(response);
|
||||
return;
|
||||
}
|
||||
Map<String, Object> params = getHashMap(4);
|
||||
params.put("fileId", userDTO.getUserAvatar());
|
||||
params.put("isOpen", ISystemConstant.IS_TRUE);
|
||||
fileService.downLoadFile(request, response, params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countDateRange(String startDate, String endDate) {
|
||||
Map<String, Object> params = getHashMap(4);
|
||||
@ -482,4 +570,34 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
userAdjustmentService.save(userAdjustmentBO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载默认用户头像
|
||||
*
|
||||
* @param response
|
||||
*/
|
||||
private void downloadDefaultAvatar(HttpServletResponse response) {
|
||||
File file;
|
||||
try {
|
||||
file = ResourceUtil.getResourceFile("classpath:static/assets/images/profile-photo.jpg");
|
||||
response.setHeader("Content-Length", String.valueOf(file.length()));
|
||||
response.setHeader("Content-Disposition", "inline;fileName=" + URLEncoder.encode("profile-photo.jpg", "UTF-8"));
|
||||
response.setContentType("image/jpeg");
|
||||
} catch (IOException e) {
|
||||
throw new FileException("默认头像不存在");
|
||||
}
|
||||
try (
|
||||
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
|
||||
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
|
||||
) {
|
||||
int readSize;
|
||||
for (byte[] buf = new byte[IFileService.INPUT_STREAM_SIZE]; (readSize = bufferedInputStream.read(buf)) > -1; ) {
|
||||
System.out.println(readSize);
|
||||
bufferedOutputStream.write(buf, 0, readSize);
|
||||
}
|
||||
bufferedOutputStream.flush();
|
||||
} catch (Exception e) {
|
||||
LOG.error("默认头像不存在");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -18,6 +18,7 @@
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div class="test-table-reload-btn" style="margin-bottom: 10px;">
|
||||
<input type="hidden" id="userExpand" th:value="${userExpand}" th:if="${userExpand}">
|
||||
<div class="layui-inline">
|
||||
<input type="text" id="keywords" class="layui-input search-item" placeholder="输入关键字">
|
||||
</div>
|
||||
@ -31,7 +32,7 @@
|
||||
<button type="button" id="search" class="layui-btn layui-btn-sm">
|
||||
<i class="fa fa-lg fa-search"></i> 搜索
|
||||
</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm" id="uploadExcel">
|
||||
<button type="button" class="layui-btn layui-btn-sm layui-btn-primary" id="uploadExcel">
|
||||
<i class="fa fa-lg fa-cloud-upload"></i> 导入数据
|
||||
</button>
|
||||
</div>
|
||||
@ -76,6 +77,111 @@
|
||||
|
||||
// 初始化表格
|
||||
function initTable() {
|
||||
var colsArray = [
|
||||
{type:'checkbox', fixed: 'left'},
|
||||
{field:'rowNum', width:80, title: '序号', fixed: 'left', align:'center', templet: '<span>{{d.LAY_INDEX}}</span>'},
|
||||
{field:'userUsername', width:140, title: '用户名', sort: true, align:'center',
|
||||
templet: function(rowData) {
|
||||
return '<a href="javascript:void(0);" lay-event="userUsernameEvent">'+ rowData.userUsername +'</a>';
|
||||
}
|
||||
},
|
||||
{field:'userName', width:140, title: '昵称', sort: true, align:'center'},
|
||||
{field:'userType', width:90, title: '类型', sort: true, align:'center',
|
||||
templet: function(item) {
|
||||
if(item.userType == 1) {
|
||||
return '<span class="layui-badge layui-bg-green">系统用户</span>';
|
||||
} else if(item.userType == 2) {
|
||||
return '<span class="layui-badge layui-bg-orange">普通用户</span>';
|
||||
}
|
||||
return '<span class="layui-badge">类型错误</span>';
|
||||
}
|
||||
},
|
||||
{field:'userState', width:80, title: '状态', sort: true, align:'center',
|
||||
templet: function(item) {
|
||||
var value;
|
||||
switch (item.userState) {
|
||||
case 1:
|
||||
value = '<span class="layui-badge">冻结</span>';
|
||||
break;
|
||||
case 2:
|
||||
value = '<span class="layui-badge layui-bg-green">锁定</span>';
|
||||
break;
|
||||
default:
|
||||
value = '<span class="layui-badge layui-bg-blue">正常</span>';
|
||||
}
|
||||
return value;
|
||||
}
|
||||
},
|
||||
{field:'userPhone', width:140, title: '手机', sort: true, align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.userPhone) {
|
||||
return '-';
|
||||
}
|
||||
return item.userPhone;
|
||||
}
|
||||
},
|
||||
{field:'userEmail', width: 160, title: '邮箱', sort: true, align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.userEmail) {
|
||||
return '-';
|
||||
}
|
||||
return item.userEmail;
|
||||
}
|
||||
},
|
||||
{field:'userExpiredDate', width:180, title: '账号过期时间', align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.userExpiredDate) {
|
||||
return '<button type="button" class="layui-btn layui-btn-xs layui-btn-normal" lay-event="userExpiredDateEvent">' +
|
||||
'<i class="fa fa-clock-o"></i> 设置时间' +
|
||||
'</button>';
|
||||
}
|
||||
return item.userExpiredDate;
|
||||
}
|
||||
},
|
||||
{field:'lastLoginAddress', width:140, title: '登录地址', align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.lastLoginAddress) {
|
||||
return '-';
|
||||
}
|
||||
return item.lastLoginAddress;
|
||||
}
|
||||
},
|
||||
{field:'lastLoginTime', width:180, title: '最后登录系统时间', align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.lastLoginTime) {
|
||||
return '-';
|
||||
}
|
||||
return item.lastLoginTime;
|
||||
}
|
||||
},
|
||||
{field:'gmtCreate', width:180, title: '创建时间', align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.gmtCreate) {
|
||||
return '-';
|
||||
}
|
||||
return item.gmtCreate;
|
||||
}
|
||||
},
|
||||
|
||||
];
|
||||
if($('#userExpand') && $('#userExpand').val()) {
|
||||
colsArray.push({
|
||||
field:'opition', width:190, title: '操作', fixed:'right', align:'center', templet: function(item) {
|
||||
return '<div class="layui-btn-group">' +
|
||||
'<button type="button" class="layui-btn layui-btn-xs" lay-event="resetPasswordEvent"><i class="fa fa-key"></i> 重置密码</button>'+
|
||||
'<button type="button" class="layui-btn layui-btn-xs layui-btn-primary" lay-event="userExpandEvent"><i class="fa fa-vcard"></i> 拓展属性</button>'+
|
||||
'</div>';
|
||||
}
|
||||
});
|
||||
} else {
|
||||
colsArray.push({
|
||||
field:'opition', width:110, title: '操作', fixed:'right', align:'center', templet: function(item) {
|
||||
return '<button type="button" class="layui-btn layui-btn-xs" lay-event="resetPasswordEvent">' +
|
||||
'<i class="fa fa-key"></i> 重置密码' +
|
||||
'</button>';
|
||||
}
|
||||
});
|
||||
}
|
||||
table.render({
|
||||
elem: '#dataTable',
|
||||
id: 'dataTable',
|
||||
@ -90,99 +196,7 @@
|
||||
limitName: 'rows'
|
||||
},
|
||||
cols: [
|
||||
[
|
||||
{type:'checkbox', fixed: 'left'},
|
||||
{field:'rowNum', width:80, title: '序号', fixed: 'left', align:'center', templet: '<span>{{d.LAY_INDEX}}</span>'},
|
||||
{field:'userUsername', width:140, title: '用户名', sort: true, align:'center',
|
||||
templet: function(rowData) {
|
||||
return '<a href="javascript:void(0);" lay-event="userUsernameEvent">'+ rowData.userUsername +'</a>';
|
||||
}
|
||||
},
|
||||
{field:'userName', width:140, title: '昵称', sort: true, align:'center'},
|
||||
{field:'userType', width:90, title: '类型', sort: true, align:'center',
|
||||
templet: function(item) {
|
||||
if(item.userType == 1) {
|
||||
return '<span class="layui-badge layui-bg-green">系统用户</span>';
|
||||
} else if(item.userType == 2) {
|
||||
return '<span class="layui-badge layui-bg-orange">普通用户</span>';
|
||||
}
|
||||
return '<span class="layui-badge">类型错误</span>';
|
||||
}
|
||||
},
|
||||
{field:'userState', width:80, title: '状态', sort: true, align:'center',
|
||||
templet: function(item) {
|
||||
var value;
|
||||
switch (item.userState) {
|
||||
case 1:
|
||||
value = '<span class="layui-badge">冻结</span>';
|
||||
break;
|
||||
case 2:
|
||||
value = '<span class="layui-badge layui-bg-green">锁定</span>';
|
||||
break;
|
||||
default:
|
||||
value = '<span class="layui-badge layui-bg-blue">正常</span>';
|
||||
}
|
||||
return value;
|
||||
}
|
||||
},
|
||||
{field:'userPhone', width:140, title: '手机', sort: true, align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.userPhone) {
|
||||
return '-';
|
||||
}
|
||||
return item.userPhone;
|
||||
}
|
||||
},
|
||||
{field:'userEmail', width: 160, title: '邮箱', sort: true, align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.userEmail) {
|
||||
return '-';
|
||||
}
|
||||
return item.userEmail;
|
||||
}
|
||||
},
|
||||
{field:'userExpiredDate', width:180, title: '账号过期时间', align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.userExpiredDate) {
|
||||
return '<button type="button" class="layui-btn layui-btn-xs" lay-event="userExpiredDateEvent">' +
|
||||
'<i class="fa fa-clock-o"></i> 设置时间' +
|
||||
'</button>';
|
||||
}
|
||||
return item.userExpiredDate;
|
||||
}
|
||||
},
|
||||
{field:'lastLoginAddress', width:140, title: '登录地址', align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.lastLoginAddress) {
|
||||
return '-';
|
||||
}
|
||||
return item.lastLoginAddress;
|
||||
}
|
||||
},
|
||||
{field:'lastLoginTime', width:180, title: '最后登录系统时间', align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.lastLoginTime) {
|
||||
return '-';
|
||||
}
|
||||
return item.lastLoginTime;
|
||||
}
|
||||
},
|
||||
{field:'gmtCreate', width:180, title: '创建时间', align:'center',
|
||||
templet: function(item) {
|
||||
if(!item.gmtCreate) {
|
||||
return '-';
|
||||
}
|
||||
return item.gmtCreate;
|
||||
}
|
||||
},
|
||||
{field:'opition', width:110, title: '操作', fixed:'right', align:'center',
|
||||
templet: function(item) {
|
||||
return '<button type="button" class="layui-btn layui-btn-xs" lay-event="resetPasswordEvent">' +
|
||||
'<i class="fa fa-key"></i> 重置密码' +
|
||||
'</button>';
|
||||
}
|
||||
},
|
||||
]
|
||||
colsArray
|
||||
],
|
||||
page: true,
|
||||
parseData: function(data) {
|
||||
@ -353,6 +367,14 @@
|
||||
reloadTable();
|
||||
}
|
||||
});
|
||||
} else if(layEvent === 'userExpandEvent') {
|
||||
top.dialog.open({
|
||||
url: top.restAjax.path('{userExpand}?userId={userId}', [$('#userExpand').val(), data.userId]),
|
||||
title: '【'+ data.userName +'】拓展属性',
|
||||
width: '60%',
|
||||
height: '80%',
|
||||
onClose: function() {}
|
||||
});
|
||||
}
|
||||
});
|
||||
// 事件-排序
|
||||
|
Loading…
Reference in New Issue
Block a user