欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

苍穹外卖-day02,//❓:前端为什么设

来源: javaer 分享于  点击 42791 次 点评:29

苍穹外卖-day02,//❓:前端为什么设


启用禁用员工账号

  • 2025年3月8日 星期六

需求分析和设计

  • 可以对状态为“启用”的员工账户进行"禁用"操作
  • 可以对状态为"禁用"的员工账户进行"启用"操作
  • 状态为禁用的员工账户不能登录系统

路径:/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

功能测试

测试成功!!!!

提交git

相关栏目:

用户点评