Merge branch 'master' of gitee.com:zhijiantianya/ruoyi-vue-pro into master
commit
bec7167524
@ -0,0 +1,4 @@
|
|||||||
|
config.stopBubbling = true
|
||||||
|
lombok.tostring.callsuper=true
|
||||||
|
lombok.equalsandhashcode.callsuper=true
|
||||||
|
lombok.accessors.chain=true
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 删除文件
|
||||||
|
export function deleteFile(id) {
|
||||||
|
return request({
|
||||||
|
url: '/infra/file/delete?id=' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得文件分页
|
||||||
|
export function getFilePage(query) {
|
||||||
|
return request({
|
||||||
|
url: '/infra/file/page',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.dashboard.framework.jackson.deser;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonParser;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||||
|
import com.fasterxml.jackson.databind.JsonDeserializer;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LocalDateTime反序列化规则
|
||||||
|
* <p>
|
||||||
|
* 会将毫秒级时间戳反序列化为LocalDateTime
|
||||||
|
*/
|
||||||
|
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
|
||||||
|
|
||||||
|
public static final LocalDateTimeDeserializer INSTANCE = new LocalDateTimeDeserializer();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
|
||||||
|
return LocalDateTime.ofInstant(Instant.ofEpochMilli(p.getValueAsLong()), ZoneId.systemDefault());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
package cn.iocoder.dashboard.framework.jackson.ser;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
|
import com.fasterxml.jackson.databind.JsonSerializer;
|
||||||
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LocalDateTime序列化规则
|
||||||
|
* <p>
|
||||||
|
* 会将LocalDateTime序列化为毫秒级时间戳
|
||||||
|
*/
|
||||||
|
public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
|
||||||
|
|
||||||
|
public static final LocalDateTimeSerializer INSTANCE = new LocalDateTimeSerializer();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
|
||||||
|
gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
package cn.iocoder.dashboard.modules.infra.controller.file.vo;
|
||||||
|
|
||||||
|
import cn.iocoder.dashboard.common.pojo.PageParam;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
@ApiModel("文件分页 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class InfFilePageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "文件路径", example = "yudao", notes = "模糊匹配")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "文件类型", example = "jpg", notes = "模糊匹配")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
@ApiModelProperty(value = "开始创建时间")
|
||||||
|
private Date beginCreateTime;
|
||||||
|
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
@ApiModelProperty(value = "结束创建时间")
|
||||||
|
private Date endCreateTime;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
package cn.iocoder.dashboard.modules.infra.controller.file.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@ApiModel(value = "文件 Response VO", description = "不返回 content 字段,太大")
|
||||||
|
@Data
|
||||||
|
public class InfFileRespVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "文件路径", required = true, example = "yudao.jpg")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "文件类型", required = true, example = "jpg")
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "创建时间", required = true)
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
package cn.iocoder.dashboard.modules.infra.convert.file;
|
||||||
|
|
||||||
|
import cn.iocoder.dashboard.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.dashboard.modules.infra.controller.file.vo.InfFileRespVO;
|
||||||
|
import cn.iocoder.dashboard.modules.infra.dal.dataobject.file.InfFileDO;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface InfFileConvert {
|
||||||
|
|
||||||
|
InfFileConvert INSTANCE = Mappers.getMapper(InfFileConvert.class);
|
||||||
|
|
||||||
|
InfFileRespVO convert(InfFileDO bean);
|
||||||
|
|
||||||
|
PageResult<InfFileRespVO> convertPage(PageResult<InfFileDO> page);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
package cn.iocoder.dashboard.modules.infra.dal.dataobject.file;
|
||||||
|
|
||||||
|
import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.*;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件表
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("inf_file")
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class InfFileDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件路径
|
||||||
|
*/
|
||||||
|
@TableId(type = IdType.INPUT)
|
||||||
|
private String id;
|
||||||
|
/**
|
||||||
|
* 文件类型
|
||||||
|
*
|
||||||
|
* 通过 {@link cn.hutool.core.io.FileTypeUtil#getType(InputStream)} 获取
|
||||||
|
*/
|
||||||
|
@TableField(value = "`type`")
|
||||||
|
private String type;
|
||||||
|
/**
|
||||||
|
* 文件内容
|
||||||
|
*/
|
||||||
|
private byte[] content;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
package cn.iocoder.dashboard.modules.infra.dal.mysql.file;
|
||||||
|
|
||||||
|
import cn.iocoder.dashboard.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX;
|
||||||
|
import cn.iocoder.dashboard.modules.infra.controller.file.vo.InfFilePageReqVO;
|
||||||
|
import cn.iocoder.dashboard.modules.infra.dal.dataobject.file.InfFileDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface InfFileMapper extends BaseMapperX<InfFileDO> {
|
||||||
|
|
||||||
|
default Integer selectCountById(String id) {
|
||||||
|
return selectCount("id", id);
|
||||||
|
}
|
||||||
|
|
||||||
|
default PageResult<InfFileDO> selectPage(InfFilePageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new QueryWrapperX<InfFileDO>()
|
||||||
|
.likeIfPresent("id", reqVO.getId())
|
||||||
|
.likeIfPresent("type", reqVO.getType())
|
||||||
|
.betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
|
||||||
|
.orderByDesc("create_time"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
package cn.iocoder.dashboard.modules.infra.service.file.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.io.FileTypeUtil;
|
||||||
|
import cn.iocoder.dashboard.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.dashboard.framework.file.config.FileProperties;
|
||||||
|
import cn.iocoder.dashboard.modules.infra.controller.file.vo.InfFilePageReqVO;
|
||||||
|
import cn.iocoder.dashboard.modules.infra.dal.dataobject.file.InfFileDO;
|
||||||
|
import cn.iocoder.dashboard.modules.infra.dal.mysql.file.InfFileMapper;
|
||||||
|
import cn.iocoder.dashboard.modules.infra.service.file.InfFileService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
|
||||||
|
import static cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.FILE_NOT_EXISTS;
|
||||||
|
import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.FILE_PATH_EXISTS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件 Service 实现类
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class InfFileServiceImpl implements InfFileService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private InfFileMapper fileMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private FileProperties fileProperties;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String createFile(String path, byte[] content) {
|
||||||
|
if (fileMapper.selectCountById(path) > 0) {
|
||||||
|
throw exception(FILE_PATH_EXISTS);
|
||||||
|
}
|
||||||
|
// 保存到数据库
|
||||||
|
InfFileDO file = new InfFileDO();
|
||||||
|
file.setId(path);
|
||||||
|
file.setType(FileTypeUtil.getType(new ByteArrayInputStream(content)));
|
||||||
|
file.setContent(content);
|
||||||
|
fileMapper.insert(file);
|
||||||
|
// 拼接路径返回
|
||||||
|
return fileProperties.getBasePath() + path;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteFile(String id) {
|
||||||
|
// 校验存在
|
||||||
|
this.validateFileExists(id);
|
||||||
|
// 更新
|
||||||
|
fileMapper.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateFileExists(String id) {
|
||||||
|
if (fileMapper.selectById(id) == null) {
|
||||||
|
throw exception(FILE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InfFileDO getFile(String path) {
|
||||||
|
return fileMapper.selectById(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<InfFileDO> getFilePage(InfFilePageReqVO pageReqVO) {
|
||||||
|
return fileMapper.selectPage(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,92 +1,91 @@
|
|||||||
package cn.iocoder.dashboard.modules.system.controller.user;
|
package cn.iocoder.dashboard.modules.system.controller.user;
|
||||||
|
|
||||||
|
import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
|
||||||
|
import cn.iocoder.dashboard.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileRespVO;
|
||||||
|
import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVo;
|
||||||
|
import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
|
||||||
|
import cn.iocoder.dashboard.modules.system.convert.auth.SysAuthConvert;
|
||||||
|
import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert;
|
||||||
|
import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO;
|
||||||
|
import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
|
||||||
|
import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService;
|
||||||
|
import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService;
|
||||||
|
import cn.iocoder.dashboard.modules.system.service.user.SysUserService;
|
||||||
|
import cn.iocoder.dashboard.util.collection.CollectionUtils;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static cn.iocoder.dashboard.common.pojo.CommonResult.success;
|
||||||
|
import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.FILE_IS_EMPTY;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author niudehua
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/system/user/profile")
|
||||||
|
@Api(tags = "用户个人中心")
|
||||||
|
@Slf4j
|
||||||
public class SysUserProfileController {
|
public class SysUserProfileController {
|
||||||
|
|
||||||
// /**
|
@Resource
|
||||||
// * 个人信息
|
private SysUserService userService;
|
||||||
// */
|
@Resource
|
||||||
// @GetMapping
|
private SysPermissionService permissionService;
|
||||||
// public AjaxResult profile()
|
@Resource
|
||||||
// {
|
private SysRoleService roleService;
|
||||||
// LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
|
|
||||||
// SysUser user = loginUser.getUser();
|
@GetMapping("/get")
|
||||||
// AjaxResult ajax = AjaxResult.success(user);
|
@ApiOperation("获得登录用户信息")
|
||||||
// ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
|
public CommonResult<SysUserProfileRespVO> profile() {
|
||||||
// ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
|
// 获取用户信息
|
||||||
// return ajax;
|
Long userId = SecurityFrameworkUtils.getLoginUserId();
|
||||||
// }
|
SysUserDO user = userService.getUser(userId);
|
||||||
//
|
SysUserProfileRespVO userProfileRespVO = SysUserConvert.INSTANCE.convert03(user);
|
||||||
// /**
|
List<SysRoleDO> userRoles = roleService.getRolesFromCache(permissionService.listUserRoleIs(userId));
|
||||||
// * 修改用户
|
userProfileRespVO.setRoles(CollectionUtils.convertSet(userRoles, SysUserConvert.INSTANCE::convert));
|
||||||
// */
|
return success(userProfileRespVO);
|
||||||
// @Log(title = "个人信息", businessType = BusinessType.UPDATE)
|
}
|
||||||
// @PutMapping
|
|
||||||
// public AjaxResult updateProfile(@RequestBody SysUser user)
|
@PutMapping("/update")
|
||||||
// {
|
@ApiOperation("修改用户个人信息")
|
||||||
// if (userService.updateUserProfile(user) > 0)
|
public CommonResult<Boolean> updateUserProfile(@Valid @RequestBody SysUserProfileUpdateReqVO reqVO, HttpServletRequest request) {
|
||||||
// {
|
userService.updateUserProfile(reqVO);
|
||||||
// LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
|
SecurityFrameworkUtils.setLoginUser(SysAuthConvert.INSTANCE.convert(reqVO), request);
|
||||||
// // 更新缓存用户信息
|
return success(true);
|
||||||
// loginUser.getUser().setNickName(user.getNickName());
|
}
|
||||||
// loginUser.getUser().setPhonenumber(user.getPhonenumber());
|
|
||||||
// loginUser.getUser().setEmail(user.getEmail());
|
@PutMapping("/update-password")
|
||||||
// loginUser.getUser().setSex(user.getSex());
|
@ApiOperation("修改用户个人密码")
|
||||||
// tokenService.setLoginUser(loginUser);
|
public CommonResult<Boolean> updateUserProfilePassword(@Valid @RequestBody SysUserProfileUpdatePasswordReqVo reqVO, HttpServletRequest request) {
|
||||||
// return AjaxResult.success();
|
userService.updateUserPassword(reqVO);
|
||||||
// }
|
SecurityFrameworkUtils.setLoginUser(SysAuthConvert.INSTANCE.convert(reqVO), request);
|
||||||
// return AjaxResult.error("修改个人信息异常,请联系管理员");
|
return success(true);
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// /**
|
@PutMapping("/upload-avatar")
|
||||||
// * 重置密码
|
@ApiOperation("上传用户个人头像")
|
||||||
// */
|
public CommonResult<Boolean> updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws IOException {
|
||||||
// @Log(title = "个人信息", businessType = BusinessType.UPDATE)
|
if (file.isEmpty()) {
|
||||||
// @PutMapping("/updatePwd")
|
throw ServiceExceptionUtil.exception(FILE_IS_EMPTY);
|
||||||
// public AjaxResult updatePwd(String oldPassword, String newPassword)
|
}
|
||||||
// {
|
userService.updateUserAvatar(SecurityFrameworkUtils.getLoginUserId(), file.getInputStream());
|
||||||
// LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
|
return success(true);
|
||||||
// String userName = loginUser.getUsername();
|
}
|
||||||
// String password = loginUser.getPassword();
|
|
||||||
// if (!SecurityUtils.matchesPassword(oldPassword, password))
|
|
||||||
// {
|
|
||||||
// return AjaxResult.error("修改密码失败,旧密码错误");
|
|
||||||
// }
|
|
||||||
// if (SecurityUtils.matchesPassword(newPassword, password))
|
|
||||||
// {
|
|
||||||
// return AjaxResult.error("新密码不能与旧密码相同");
|
|
||||||
// }
|
|
||||||
// if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0)
|
|
||||||
// {
|
|
||||||
// // 更新缓存用户密码
|
|
||||||
// loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
|
|
||||||
// tokenService.setLoginUser(loginUser);
|
|
||||||
// return AjaxResult.success();
|
|
||||||
// }
|
|
||||||
// return AjaxResult.error("修改密码异常,请联系管理员");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 头像上传
|
|
||||||
// */
|
|
||||||
// @Log(title = "用户头像", businessType = BusinessType.UPDATE)
|
|
||||||
// @PostMapping("/avatar")
|
|
||||||
// public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException
|
|
||||||
// {
|
|
||||||
// if (!file.isEmpty())
|
|
||||||
// {
|
|
||||||
// LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
|
|
||||||
// String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file);
|
|
||||||
// if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
|
|
||||||
// {
|
|
||||||
// AjaxResult ajax = AjaxResult.success();
|
|
||||||
// ajax.put("imgUrl", avatar);
|
|
||||||
// // 更新缓存用户头像
|
|
||||||
// loginUser.getUser().setAvatar(avatar);
|
|
||||||
// tokenService.setLoginUser(loginUser);
|
|
||||||
// return ajax;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return AjaxResult.error("上传图片异常,请联系管理员");
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,53 @@
|
|||||||
|
package cn.iocoder.dashboard.modules.system.controller.user.vo.profile;
|
||||||
|
|
||||||
|
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserBaseVO;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@ApiModel("用户个人中心信息 Response VO")
|
||||||
|
public class SysUserProfileRespVO extends SysUserBaseVO {
|
||||||
|
@ApiModelProperty(value = "用户编号", required = true, example = "1")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 SysCommonStatusEnum 枚举类")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "最后登陆 IP", required = true, example = "192.168.1.1")
|
||||||
|
private String loginIp;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "最后登录时间", required = true, example = "时间戳格式")
|
||||||
|
private Date loginDate;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所属角色
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "所属角色", required = true, example = "123456")
|
||||||
|
private Set<Role> roles;
|
||||||
|
|
||||||
|
@ApiModel("角色")
|
||||||
|
@Data
|
||||||
|
public static class Role {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "角色编号", required = true, example = "1")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "角色名称", required = true, example = "普通角色")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
package cn.iocoder.dashboard.modules.system.controller.user.vo.profile;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Email;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import javax.validation.constraints.Pattern;
|
||||||
|
import javax.validation.constraints.Size;
|
||||||
|
|
||||||
|
@ApiModel("用户个人信息更新 Request VO")
|
||||||
|
@Data
|
||||||
|
public class SysUserProfileUpdateReqVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "用户编号", required = true, example = "1024")
|
||||||
|
@NotNull(message = "用户编号不能为空")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "用户昵称", required = true, example = "芋艿")
|
||||||
|
@Size(max = 30, message = "用户昵称长度不能超过30个字符")
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "用户邮箱", example = "yudao@iocoder.cn")
|
||||||
|
@Email(message = "邮箱格式不正确")
|
||||||
|
@Size(max = 50, message = "邮箱长度不能超过50个字符")
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "手机号码", example = "15601691300")
|
||||||
|
@Pattern(regexp = "^1(3|4|5|7|8)\\d{9}$",message = "手机号码格式错误")
|
||||||
|
private String mobile;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "用户性别", example = "1", notes = "参见 SysSexEnum 枚举类")
|
||||||
|
private Integer sex;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "用户头像", example = "http://www.iocoder.cn/xxx.png")
|
||||||
|
private String avatar;
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,30 +0,0 @@
|
|||||||
package cn.iocoder.dashboard.modules.system.dal.dataobject.common;
|
|
||||||
|
|
||||||
import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 文件表
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@TableName("sys_file")
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
public class SysFileDO extends BaseDO {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 文件路径
|
|
||||||
*/
|
|
||||||
@TableId(type = IdType.INPUT)
|
|
||||||
private String id;
|
|
||||||
/**
|
|
||||||
* 文件内容
|
|
||||||
*/
|
|
||||||
private byte[] content;
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
package cn.iocoder.dashboard.modules.system.dal.mysql.common;
|
|
||||||
|
|
||||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.common.SysFileDO;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
|
|
||||||
@Mapper
|
|
||||||
public interface SysFileMapper extends BaseMapper<SysFileDO> {
|
|
||||||
|
|
||||||
default Integer selectCountById(String id) {
|
|
||||||
return selectCount(new QueryWrapper<SysFileDO>().eq("id", id));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
package cn.iocoder.dashboard.modules.system.service.common.impl;
|
|
||||||
|
|
||||||
import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
|
|
||||||
import cn.iocoder.dashboard.framework.file.config.FileProperties;
|
|
||||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.common.SysFileDO;
|
|
||||||
import cn.iocoder.dashboard.modules.system.dal.mysql.common.SysFileMapper;
|
|
||||||
import cn.iocoder.dashboard.modules.system.service.common.SysFileService;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.FILE_PATH_EXISTS;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 文件 Service 实现类
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class SysFileServiceImpl implements SysFileService {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SysFileMapper fileMapper;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private FileProperties fileProperties;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String createFile(String path, byte[] content) {
|
|
||||||
if (fileMapper.selectCountById(path) > 0) {
|
|
||||||
throw ServiceExceptionUtil.exception(FILE_PATH_EXISTS);
|
|
||||||
}
|
|
||||||
// 保存到数据库
|
|
||||||
SysFileDO file = new SysFileDO();
|
|
||||||
file.setId(path);
|
|
||||||
file.setContent(content);
|
|
||||||
fileMapper.insert(file);
|
|
||||||
// 拼接路径返回
|
|
||||||
return fileProperties.getBasePath() + path;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SysFileDO getFile(String path) {
|
|
||||||
return fileMapper.selectById(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue