一、UserHaveLogsVo------创建一对多的日志
一个管理员对应多个操作日志,所以需要用list列表来装userinfolog
二、业务逻辑:
在userinfocontroller下创建查询日志的方法:
userinfocontroller的代码:
package com.qzimp.fujiancuo.controller;
import com.mybatisflex.core.paginate.Page;
import com.qzimp.fujiancuo.entity.vo.AdminHaveLogsVo;
import com.qzimp.fujiancuo.entity.vo.UserHaveLogsVo;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import com.qzimp.fujiancuo.entity.Userinfo;
import com.qzimp.fujiancuo.service.UserinfoService;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.io.Serializable;
import java.util.List;
/**
* 控制层。
*
* @since 2024-11-21
*/
@RestController
@Api("接口")
@RequestMapping("/userinfo")
public class UserinfoController {
@Autowired
private UserinfoService userinfoService;
/**
* 添加。
*
* @param userinfo
* @return {@code true} 添加成功,{@code false} 添加失败
*/
@PostMapping("save")
@ApiOperation("保存")
public boolean save(@RequestBody @ApiParam("") Userinfo userinfo) {
return userinfoService.save(userinfo);
}
/**
* 根据主键删除。
*
* @param id 主键
* @return {@code true} 删除成功,{@code false} 删除失败
*/
@DeleteMapping("remove/{id}")
@ApiOperation("根据主键")
public boolean remove(@PathVariable @ApiParam("主键") Serializable id) {
return userinfoService.removeById(id);
}
/**
* 根据主键更新。
*
* @param userinfo
* @return {@code true} 更新成功,{@code false} 更新失败
*/
@PutMapping("update")
@ApiOperation("根据主键更新")
public boolean update(@RequestBody @ApiParam("主键") Userinfo userinfo) {
return userinfoService.updateById(userinfo);
}
/**
* 查询所有。
*
* @return 所有数据
*/
@GetMapping("list")
@ApiOperation("查询所有")
public List<Userinfo> list() {
return userinfoService.list();
}
/**
* 根据主键获取详细信息。
* @param id 主键
* @return 详情
*/
@GetMapping("getInfo/{id}")
@ApiOperation("根据主键获取")
public Userinfo getInfo(@PathVariable @ApiParam("主键") Serializable id) {
return userinfoService.getById(id);
}
/**
* 分页查询。
* @param page 分页对象
* @return 分页对象
*/
@GetMapping("page")
@ApiOperation("分页查询")
public Page<Userinfo> page(@ApiParam("分页信息") Page<Userinfo> page) {
return userinfoService.page(page);
}
@GetMapping("getUserHaveLogs")
public UserHaveLogsVo getUserHaveLogs(String loginName){
return userinfoService.queryUserHaveLogs(loginName);
}
}
在userinfoService下创建方法
在userinfoserviceImpl实现该方法
userinfoserviceImpl的代码:
package com.qzimp.fujiancuo.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.jwt.JWT;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.qzimp.fujiancuo.entity.Admin;
import com.qzimp.fujiancuo.entity.AdminLog;
import com.qzimp.fujiancuo.entity.Userinfo;
import com.qzimp.fujiancuo.entity.UserinfoLog;
import com.qzimp.fujiancuo.entity.vo.AdminHaveLogsVo;
import com.qzimp.fujiancuo.entity.vo.ResultCode;
import com.qzimp.fujiancuo.entity.vo.UserHaveLogsVo;
import com.qzimp.fujiancuo.exceptions.ApiException;
import com.qzimp.fujiancuo.mapper.UserinfoMapper;
import com.qzimp.fujiancuo.service.UserinfoLogService;
import com.qzimp.fujiancuo.service.UserinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 服务层实现。
*
* @since 2024-11-21
*/
@Service
public class UserinfoServiceImpl extends ServiceImpl<UserinfoMapper, Userinfo> implements UserinfoService {
@Autowired
private UserinfoMapper userinfoMapper;
@Autowired
private UserinfoLogService userinfoLogService;
@Override
public Userinfo findUserinfoByLoginName(String loginName) {
QueryWrapper queryWrapper=new QueryWrapper();
queryWrapper.eq("login_name",loginName);
return userinfoMapper.selectOneByQuery(queryWrapper);
}
@Override
public Userinfo login(String loginName, String password) {
QueryWrapper queryWrapper=new QueryWrapper();
queryWrapper.eq("login_name",loginName);
queryWrapper.eq("password",password);
Userinfo userinfo= userinfoMapper.selectOneByQuery(queryWrapper);
if(userinfo==null){
throw new ApiException(ResultCode.USER_LOGIN_NAME_NOT_EXIST);
}
//生成token
final String token= JWT.create()
.setNotBefore(DateUtil.date())
.setKey("abcdef".getBytes())
.sign();
userinfo.setToken(token);
//更新token
int ok= userinfoMapper.update(userinfo);
if(ok<1){
if(userinfo==null){
throw new ApiException(ResultCode.USER_TOKEN_UPDATE_FAILURE);
}
}
return userinfo;
}
@Override
public UserHaveLogsVo queryUserHaveLogs(String loginName) {
//获取管理员信息通过管理员账号
Userinfo userinfo=this.queryUserinfoByName(loginName);
if(userinfo==null){
throw new ApiException(ResultCode.CUSTOM_ERROR,"用户账户账户不存在");
}
// 通过管理员编号获取日志信息
List<UserinfoLog> logList= userinfoLogService.queryUserinfoLogs(userinfo.getId());
//把所有的信息放到包装类AdminHaveLogsVo
UserHaveLogsVo userHaveLogsVo=new UserHaveLogsVo();
userHaveLogsVo.setLoginName(loginName);
userHaveLogsVo.setUserinfoLogList(logList);
return userHaveLogsVo;
}
private Userinfo queryUserinfoByName(String loginName) {
QueryWrapper queryWrapper=new QueryWrapper();
queryWrapper.eq("login_name",loginName);
return userinfoMapper.selectOneByQuery(queryWrapper);
}
}
查看用户名是否存在
再到userinfologsserviceImpl实现查询每条日志打包成list
测试运行:
先在mysql添加数据
再到http://localhost:8081/doc.html测试