苍穹外卖-day02

打印 上一主题 下一主题

主题 947|帖子 947|积分 2841

启用禁用员工账号


  • 2025年3月8日 星期六
需求分析和设计


  • 可以对状态为“启用”的员工账户进行"禁用"操纵
  • 可以对状态为"禁用"的员工账户进行"启用"操纵
  • 状态为禁用的员工账户不能登录系统
路径:/admin/employee/status/{status}
哀求方式:POST


代码开发

Controller层
❓:补充当前登任命户不可以禁用本身的账户
❓:怎样将jwt token里的当前用户id传给别处
:ThreadLocal线程局部变量,为每一个线程提供一份单独的存储空间,雷同的线程能够共同访问Tomcat接受一次哀求就会开辟一个线程,同一个哀求共用一个线程

  1. /**
  2.      * 员工账号启用禁用
  3.      *
  4.      * @param status
  5.      * @param id
  6.      * @return
  7.      */
  8.     @PostMapping("/status/{status}")
  9.     public Result StartOrStop(@PathVariable Integer status, Long id) {
  10.         log.info("员工账户启用禁用:{}", status, id);
  11.         //如果登录用户的id是自己,那么不可做修改,以确保自己不能禁用自己
  12.         //TODO 前端显示页面有问题,效果达成了,但是禁用后前端 没有改变,也没有错误消息提示。
  13.         // ❓:前端为什么设置成了admin账户不可以做修改
  14.         
  15.         //JwtTokenAdminInterceptor中保存了当前登录用户的id,使用ThreadLocal
  16.         if (!(BaseContext.getCurrentId() == id)) {
  17.             employeeService.StartOrStop(status, id);
  18.             return Result.success();
  19.         }else{
  20.             return Result.error(MessageConstant.STATUS_ERROR);
  21.         }
  22.     }
复制代码
Service层
  1.     /**service接口
  2.      * 员工账号启用禁用
  3.      *
  4.      * @param status
  5.      * @param id
  6.      */
  7.     void StartOrStop(Integer status, Long id);
  8.         //service实现类
  9.     public void StartOrStop(Integer status, Long id) {
  10.         Employee employee = new Employee();
  11.         employee.setStatus(status);
  12.         employee.setId(id);
  13.         employeeMapper.update(employee);
  14.     }
复制代码
Mapper层
  1.     /**mapper接口
  2.      * 员工账号启用禁用
  3.      *
  4.      * @param employee
  5.      */
  6.     void update(Employee employee);
复制代码
mapper.xml使用动态sql
  1.     <update id="update" parameterType="com.sky.entity.Employee">
  2.         update employee
  3.          <set>
  4.             <if test="name!=null">name=#{name},</if>
  5.             <if test="username!=null">username=#{username},</if>
  6.             <if test="password!=null">password=#{password},</if>
  7.             <if test="phone!=null">phone=#{phone},</if>
  8.             <if test="sex!=null">sex=#{sex},</if>
  9.             <if test="idNumber!=null">id_number=#{idNumber},</if>
  10.             <if test="status!=null">status=#{status},</if>
  11.             <if test="updateTime!=null">update_time=#{updateTime},</if>
  12.             <if test="updateUser!=null">update_user=#{updateUser},</if>
  13.          </set>
  14.         where id = #{id}
  15.     </update>
复制代码
功能测试

由于开发阶段前端和后端是并行开发的,暂时无法进行前后端联调,所以开发阶段后端测试紧张以接口文档测试为主


  • 接口文档 乐成调试

数据库中id为1的员工状态发生了改变


  • 前后端联调


  • 乐成完成,员工账号启用禁用功能✅
上传gitee


  • 先提交到本地仓库


  • 从本地仓库推送到远程仓库(推送时忘了截图)


  • gitee
编辑员工


  • 2025年3月8日 星期六
需求分析和设计


  • 需求:
  • 对员工信息进行修改
  • 用户点击修改后跳转到新页面
  • 新页面必要回显被修改员工的信息


  • 新页面必要回显数据,然后可以修改


  • 所需接口


代码开发

编辑功能分为两步,1.根据员工id查询员工信息,2.修改员工信息
:@RequestBody:处置惩罚反序列化,也就是将前端json格式数据转换为java对象
:前端传给后端数据使用DTO封装
使用DTO优点:

  • 解耦:分离业务逻辑与外部接口,降低系统耦合度。
  • 安全:防止敏感信息泄漏,控制数据流。
  • 高效:优化网络传输,减少数据量。
  • 简化:简化数据映射和转换过程。
  • 灵活:支持版本管理和兼容性。
  • 维护:提高代码的可维护性和可测试性。
Controller层
  1.           /**
  2.      * 根据id查询员工信息
  3.      *
  4.      * @param id
  5.      * @return
  6.      */
  7.     @GetMapping("/{id}")
  8.     @ApiOperation("根据id查询员工信息")
  9.     public Result<Employee> getById(@PathVariable Long id){
  10.         log.info("根据用户id查询当前用户数据:{}",id);
  11.         Employee employee = employeeService.getById(id);
  12.         return Result.success(employee);
  13.     }
  14.     /**
  15.      * 编辑员工信息
  16.      *
  17.      * @param employeeDTO
  18.      * @return
  19.      */
  20.     @PutMapping
  21.     @ApiOperation("编辑员工信息")
  22.     public Result update(@RequestBody EmployeeDTO employeeDTO){
  23.         log.info("编辑员工信息:{}",employeeDTO);
  24.         employeeService.update(employeeDTO);
  25.         return Result.success();
  26.     }
复制代码
Service层

  • 接口
  1.    /**
  2.      * 根据用户id查询用户信息
  3.      * @param id
  4.      */
  5.     Employee getById(Long id);
  6.     /**
  7.      * 编辑员工信息
  8.      * @param employeeDTO
  9.      */
  10.     void update(EmployeeDTO employeeDTO);
复制代码

  • 实现类
根据员工id查询到指定信息后,将密码重新设置(抹撤除),克制风险
  1.     /**
  2.      * 根据id查询员工信息
  3.      *
  4.      * @param id
  5.      */
  6.     @Override
  7.     public Employee getById(Long id) {
  8.         Employee employee = employeeMapper.getById(id);
  9.         employee.setPassword("*** ***");
  10.         return employee;
  11.     }
  12.     /**
  13.      * 编辑员工信息
  14.      *
  15.      * @param employeeDTO
  16.      */
  17.     @Override
  18.     public void update(EmployeeDTO employeeDTO) {
  19.         Employee employee = new Employee();
  20.         BeanUtils.copyProperties(employeeDTO,employee);
  21.         employeeMapper.update(employee);
  22.     }
复制代码
mapper层
update的Mapper方法在前面已经设置了动态根据传入数据修改,因此可以直接复用
  1.   <update id="update" parameterType="com.sky.entity.Employee">
  2.         update employee
  3.          <set>
  4.             <if test="name!=null">name=#{name},</if>
  5.             <if test="username!=null">username=#{username},</if>
  6.             <if test="password!=null">password=#{password},</if>
  7.             <if test="phone!=null">phone=#{phone},</if>
  8.             <if test="sex!=null">sex=#{sex},</if>
  9.             <if test="idNumber!=null">id_number=#{idNumber},</if>
  10.             <if test="status!=null">status=#{status},</if>
  11.             <if test="updateTime!=null">update_time=#{updateTime},</if>
  12.             <if test="updateUser!=null">update_user=#{updateUser},</if>
  13.          </set>
  14.         where id = #{id}
  15.     </update>
复制代码
功能测试


提交代码。。。
导入分类管理

此处练习略过,直接导入代码。
:如果不是手敲代码,而是copy最好编译一下
maven —> Lifecyle —> compile
功能测试


测试乐成!!!!
提交git

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表