云计算百科
云计算领域专业知识百科平台

苍穹外卖项目实战(日记三)-记录实战教程及问题的解决方法-功能代码完善(1)新增员工功能

七、功能代码完善

(1)新增员工功能

1、控制层代码:

位置 :sky-take-out\\sky-server\\src\\main\\java\\com\\sky\\controller\\admin\\EmployeeController.java

    /**      * 新增员工      * @param employeeDTO      * @return      */     @PostMapping//添加这个注释是因为前端提交的数据格式是JSON,所以参数需要再使用@RequestBody注解     @ApiOperation("新增员工")//value已省略,功能描述注解,用于接口文档     public Result save(@RequestBody EmployeeDTO employeeDTO){         log.info("新增员工:{}",employeeDTO);         employeeService.save(employeeDTO);         return Result.success();     }

2、服务层接口代码:

位置:sky-server/src/main/java/com/sky/service/EmployeeService.java

/**  * 新增员工  * @param employeeDTO  */ void save(EmployeeDTO employeeDTO);

3、服务层实现代码:

位置:sky-take-out\\sky-server\\src\\main\\java\\com\\sky\\service\\impl\\EmployeeServiceImpl.java

    /**      * 新增员工      * @param employeeDTO      */     public void save(EmployeeDTO employeeDTO) {         Employee employee = new Employee();         //设置属性名         //方法一:调用自定义方法 //        employee.setName(employeeDTO.getName());         //方法二:对象属性拷贝         //因为employeeDTO和employee中的部分属性名相同         BeanUtils.copyProperties(employeeDTO,employee);//由employeeDTO拷贝到employee           //设置账号默认状态,1表示正常,0表示禁用 //        employee.setStatus(1);         //为代码规范,方便后续维护,将参数设置成自定义常量StatusConstant.ENABLE = 1         employee.setStatus(StatusConstant.ENABLE);           //设置密码,默认为“123456”,需要对密码进行md5加密,PasswordConstant.DEFAULT_PASSWORD = "123456"         employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));           //设置创建时间和修改时间         employee.setCreateTime(LocalDateTime.now());         employee.setUpdateTime(LocalDateTime.now());           //设置创建人ID和修改人ID,目前先写死为一个固定值         //TODO 后期需要修改为登录人ID         employee.setCreateUser(10L);         employee.setUpdateUser(10L);           //调用持久层mapper         employeeMapper.insert(employee);       }

4、mapper持久层(映射层)代码:

位置:sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java

/**  * 插入员工数据  * @param employee  */ @Insert("insert into employee(name, username, password, phone, sex, id_number, create_time, update_time, create_user, update_user) " +         "values " +        " (#{name}, #{username}, #{password}, #{phone}, #{sex}, #{idNumber}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser})") void insert(Employee employee);

注意:填写参数前需要链接数据库,否则无法正常向数据库插入数据

方式:鼠标放在“insert into…”字段中,alt+enter,打开快捷方式栏,找到“language injection…”,选择"ID"为MySql

点击左上角图标,链接数据库,输入你的数据库账号密码,点击“Test connection”

选择需要链接的数据库“sky_take_out”,最后点击OK即可

建议:下载一个AI插件,便于自动为你补全代码,如Fitten

5,、功能测试

(1)通过接口文档测试:后端开发经常使用,因为前端网页可能未开发

方法一:使用keni4j自带的接口文档网页

打开页面苍穹外卖项目接口文档

直接点发送,会发现返回401(未授权),且后端控制台返回下图内容

原因:发送内容未通过JWT校验,即无合法令牌,解决方法如下

先从“员工登录”测试,从返回内容可见,其生成的合法令牌码token(token是开发文档要求的统一使用的JWT令牌名称)

复制token码->"文档管理"->"全局参数设置"->"添加参数"

注意:当响应码显示“401”时,即未授权,说明原来的JWT token已经过期需要更换,重复上面的步骤即可,更换请求头(header)即可

方法二:APIfox:添加全局参数设置,步骤基本一致

再次测试是,会出现默认的请求头部(header),出现200,表示发送成功

(2)前后端联调:通过前端网页测试添加员工功能是否完善

(3)检查数据库数据是否添加成功,已成功添加2、3、4,密码默认为123456

6、完善代码

位置:sky-server/src/main/java/com/sky/handler/GlobalExceptionHandler.java

说明:

具体代码:

/**  * 捕获SQL异常  * @param ex  * @return  */ @ExceptionHandler public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){     //Duplicate entry 'zhangsan' for key 'employee.idx_username'     String message = ex.getMessage();     if (message.contains("Duplicate entry")){         String[] split = message.split(" ");         String username = split[2];         String msg = username + MessageConstant.ALREADY_EXISTS;//自定义常量“已存在”         return Result.error(msg);     }else {         return Result.error(MessageConstant.UNKNOWN_ERROR);//自定义常量“未知错误”     } }

7、完善代码2

说明:

步骤一:

在源文件中的三个位置添加一下代码:

位置一:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

位置二:sky-server/src/main/java/com/sky/interceptor/JwtTokenAdminInterceptor.java

位置三:sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java

添加的代码为:

System.out.println("当前现成的ID为:" + Thread.currentThread().getId());

示意图:

说明:由控制台输出可知,上面步骤验证客户端发送的每一次请求都是独立的线程

步骤二:

添加代码1

位置:sky-server/src/main/java/com/sky/interceptor/JwtTokenAdminInterceptor.java

具体代码:

//设置当前线程的员工id BaseContext.setCurrentId(empId);

示意图:

添加代码2

位置:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

具体代码:

//修改为获取当前登录人ID employee.setCreateUser(BaseContext.getCurrentId()); employee.setUpdateUser(BaseContext.getCurrentId());

//改前代码为 //TODO 后期需要修改为登录人ID employee.setCreateUser(10L);//设置一个常量 employee.setUpdateUser(10L);

示意图:

至此,新增员工功能完成!

赞(0)
未经允许不得转载:网硕互联帮助中心 » 苍穹外卖项目实战(日记三)-记录实战教程及问题的解决方法-功能代码完善(1)新增员工功能
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!