苍穹外卖-day02,//❓:前端为什么设
分享于 点击 42791 次 点评:29
苍穹外卖-day02,//❓:前端为什么设
启用禁用员工账号
- 2025年3月8日 星期六
需求分析和设计
- 可以对状态为“
启用
”的员工账户进行"禁用
"操作
- 可以对状态为"
禁用
"的员工账户进行"启用
"操作
- 状态为
禁用
的员工账户不能登录系统
路径:/admin/employee/status/{status}
请求方式:POST
启用
”的员工账户进行"禁用
"操作禁用
"的员工账户进行"启用
"操作禁用
的员工账户不能登录系统路径:/admin/employee/status/{status}
请求方式:POST
代码开发
Controller层
❓:补充当前登录用户不可以禁用自己的账户
❓:如何将jwt token里的当前用户id传给别处
:
ThreadLocal
线程局部变量,为每一个线程提供一份单独的存储空间,相同的线程能够共同访问Tomcat接受一次请求就会开辟一个线程,同一个请求共用一个线程
/**
* 员工账号启用禁用
*
* @param status
* @param id
* @return
*/
@PostMapping("/status/{status}")
public Result StartOrStop(@PathVariable Integer status, Long id) {
log.info("员工账户启用禁用:{}", status, id);
//如果登录用户的id是自己,那么不可做修改,以确保自己不能禁用自己
//TODO 前端显示页面有问题,效果达成了,但是禁用后前端 没有改变,也没有错误消息提示。
// ❓:前端为什么设置成了admin账户不可以做修改
//JwtTokenAdminInterceptor中保存了当前登录用户的id,使用ThreadLocal
if (!(BaseContext.getCurrentId() == id)) {
employeeService.StartOrStop(status, id);
return Result.success();
}else{
return Result.error(MessageConstant.STATUS_ERROR);
}
}
Service层
/**service接口
* 员工账号启用禁用
*
* @param status
* @param id
*/
void StartOrStop(Integer status, Long id);
//service实现类
public void StartOrStop(Integer status, Long id) {
Employee employee = new Employee();
employee.setStatus(status);
employee.setId(id);
employeeMapper.update(employee);
}
Mapper层
/**mapper接口
* 员工账号启用禁用
*
* @param employee
*/
void update(Employee employee);
mapper.xml使用动态sql
<update id="update" parameterType="com.sky.entity.Employee">
update employee
<set>
<if test="name!=null">name=#{name},</if>
<if test="username!=null">username=#{username},</if>
<if test="password!=null">password=#{password},</if>
<if test="phone!=null">phone=#{phone},</if>
<if test="sex!=null">sex=#{sex},</if>
<if test="idNumber!=null">id_number=#{idNumber},</if>
<if test="status!=null">status=#{status},</if>
<if test="updateTime!=null">update_time=#{updateTime},</if>
<if test="updateUser!=null">update_user=#{updateUser},</if>
</set>
where id = #{id}
</update>
功能测试
由于开发阶段前端和后端是并行开发的,暂时无法进行前后端联调,所以开发阶段后端测试主要以接口文档测试为主
- 接口文档 成功调试
数据库中id为1的员工状态发生了改变
- 前后端联调
- 成功完成,员工账号启用禁用功能✅
上传gitee
- 先提交到本地仓库
- 从本地仓库推送到远程仓库(推送时忘了截图)
- gitee
编辑员工
- 2025年3月8日 星期六
需求分析和设计
- 需求:
- 对员工信息进行修改
- 用户点击修改后跳转到新页面
- 新页面需要回显被修改员工的信息
- 新页面需要回显数据,然后可以修改
- 所需接口
代码开发
编辑功能分为两步,1.根据员工id查询员工信息,2.修改员工信息
:
@RequestBody
:处理反序列化,也就是将前端json格式数据转换为java对象:前端传给后端数据使用DTO封装
使用
DTO
优点:
- 解耦:分离业务逻辑与外部接口,降低系统耦合度。
- 安全:防止敏感信息泄露,控制数据流。
- 高效:优化网络传输,减少数据量。
- 简化:简化数据映射和转换过程。
- 灵活:支持版本管理和兼容性。
- 维护:提高代码的可维护性和可测试性。
Controller层
/**
* 根据id查询员工信息
*
* @param id
* @return
*/
@GetMapping("/{id}")
@ApiOperation("根据id查询员工信息")
public Result<Employee> getById(@PathVariable Long id){
log.info("根据用户id查询当前用户数据:{}",id);
Employee employee = employeeService.getById(id);
return Result.success(employee);
}
/**
* 编辑员工信息
*
* @param employeeDTO
* @return
*/
@PutMapping
@ApiOperation("编辑员工信息")
public Result update(@RequestBody EmployeeDTO employeeDTO){
log.info("编辑员工信息:{}",employeeDTO);
employeeService.update(employeeDTO);
return Result.success();
}
Service层
- 接口
/**
* 根据用户id查询用户信息
* @param id
*/
Employee getById(Long id);
/**
* 编辑员工信息
* @param employeeDTO
*/
void update(EmployeeDTO employeeDTO);
- 实现类
根据员工id查询到指定信息后,将密码重新设置(抹除掉),避免风险
/**
* 根据id查询员工信息
*
* @param id
*/
@Override
public Employee getById(Long id) {
Employee employee = employeeMapper.getById(id);
employee.setPassword("*** ***");
return employee;
}
/**
* 编辑员工信息
*
* @param employeeDTO
*/
@Override
public void update(EmployeeDTO employeeDTO) {
Employee employee = new Employee();
BeanUtils.copyProperties(employeeDTO,employee);
employeeMapper.update(employee);
}
mapper层
update的Mapper方法在前面已经设置了动态根据传入数据修改,因此可以直接复用
<update id="update" parameterType="com.sky.entity.Employee">
update employee
<set>
<if test="name!=null">name=#{name},</if>
<if test="username!=null">username=#{username},</if>
<if test="password!=null">password=#{password},</if>
<if test="phone!=null">phone=#{phone},</if>
<if test="sex!=null">sex=#{sex},</if>
<if test="idNumber!=null">id_number=#{idNumber},</if>
<if test="status!=null">status=#{status},</if>
<if test="updateTime!=null">update_time=#{updateTime},</if>
<if test="updateUser!=null">update_user=#{updateUser},</if>
</set>
where id = #{id}
</update>
功能测试
提交代码。。。
导入分类管理
此处练习略过,直接导入代码。
:如果不是手敲代码,而是copy最好编译一下
maven —> Lifecyle —> compile
功能测试
此处练习略过,直接导入代码。
:如果不是手敲代码,而是copy最好编译一下
maven —> Lifecyle —> compile
测试成功!!!!
提交git
用户点评