苍穹外卖--新增员工

news2024/11/24 4:18:48

请求方式Post,请求参数:
在这里插入图片描述用EmployeeDTO类接收参数

Controller层实现:

 @PostMapping
    public Result save(@RequestBody EmployeeDTO employeeDTO){
        employeeService.save(employeeDTO);
        return Result.success();
    }

service层实现:

@Override
    public void save(EmployeeDTO employeeDTO) {
        Employee employee = new Employee();
              //对象属性拷贝BeanUtils.copyProperties(employeeDTO,employee);
//使用md5加密  employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));
   //设置账号的状态,默认正常状态 1表示正常 0表示锁定

        employee.setStatus(StatusConstant.ENABLE);
        employee.setCreateTime(LocalDateTime.now());
        employee.setUpdateTime(LocalDateTime.now());
        employee.setUpdateUser(10L);
        employee.setCreateUser(10L);
        employeeMapper.save(employee);
    }

Mapper层实现:


    @Insert("insert into employee(name, username, password, phone, sex, id_number, create_time, update_time, create_user, update_user,status) " +
            "values (#{name},#{username},#{password},#{phone},#{sex},#{idNumber},#{createTime},#{updateTime},#{createUser},#{updateUser},#{status})")
    void save(Employee employee);

处理新增员工username重复异常

在全局处理器类GlobalExceptionHandler 中捕获异常,并将异常返回给前端展示:

 @ExceptionHandler
    public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){
        //Duplicate entry '小智' for key 'employee.idx_username'
        String mesaage=ex.getMessage();
        if(mesaage.contains("Duplicate entry")){
            String[] strings = mesaage.split(" ");
            String msg=strings[2]+ MessageConstant.ALREADY_EXISTS;
            return Result.error(msg);
        }else{
            return  Result.error(MessageConstant.UNKNOWN_ERROR);
        }
    }

处理新增员工时,创建人id和修改人id设置为固定值的情况:

员工登录获取JWT令牌的部分代码:

 @PostMapping("/login")
    @ApiOperation(value = "员工登录")
    public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO employeeLoginDTO) {
        //.........

        //登录成功后,生成jwt令牌
        Map<String, Object> claims = new HashMap<>();
        claims.put(JwtClaimsConstant.EMP_ID, employee.getId());
        String token = JwtUtil.createJWT(
                jwtProperties.getAdminSecretKey(),
                jwtProperties.getAdminTtl(),
                claims);

可以知道员工的id已经封装在JWT令牌中,可以通过JWT令牌获取操作后端员工的ID。
通过ThreadLocal进行传递 可以使得Service获取员工的Id.
ThreadLocal
并不是一个Thread,而是Thread的局部变量。
ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问
常用方法:

  • public void set(T value) 设置当前线程的线程局部变量的值
  • public T get() 返回当前线程所对应的线程局部变量的值
  • public void remove() 移除当前线程的线程局部变量

初始工程中已经封装了 ThreadLocal 操作的工具类:

在sky-common模块

package com.sky.context;

public class BaseContext {

    public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    public static void setCurrentId(Long id) {
        threadLocal.set(id);
    }

    public static Long getCurrentId() {
        return threadLocal.get();
    }

    public static void removeCurrentId() {
        threadLocal.remove();
    }

}

在拦截器中解析出当前登录员工id,并放入线程局部变量中:

在sky-server模块中,拦截器:

package com.sky.interceptor;

/**
 * jwt令牌校验的拦截器
 */
@Component
@Slf4j
public class JwtTokenAdminInterceptor implements HandlerInterceptor {

    @Autowired
    private JwtProperties jwtProperties;

    /**
     * 校验jwt
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        
		//.............................
       
        //2、校验令牌
        try {
            //.................
            Claims claims = JwtUtil.parseJWT(jwtProperties.getAdminSecretKey(), token);
            Long empId = Long.valueOf(claims.get(JwtClaimsConstant.EMP_ID).toString());
            log.info("当前员工id:", empId);
            /将用户id存储到ThreadLocal
            BaseContext.setCurrentId(empId);
            
            //3、通过,放行
            return true;
        } catch (Exception ex) {
            //......................
        }
    }
}

在Service中获取线程局部变量中的值:

	/**
     * 新增员工
     *
     * @param employeeDTO
     */
    public void save(EmployeeDTO employeeDTO) {
        //.............................

        //设置当前记录创建人id和修改人id
        employee.setCreateUser(BaseContext.getCurrentId());//目前写个假数据,后期修改
        employee.setUpdateUser(BaseContext.getCurrentId());

        employeeMapper.insert(employee);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1220242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国家大基金三期线上金融正式倒计时!11月17日,共启芯片产业新篇章

国家大基金三期线上金融正式倒计时&#xff01;11月17日&#xff0c;共启芯片产业新篇章 新时代浪潮下&#xff0c;全球化进程不断推动各科技大国的核心发展&#xff0c;芯片作为强有力的竞争标志&#xff0c;是国与国之间的重要技术战争焦点。同时&#xff0c;国内基金发展势…

数字艺术藏品软件的独特创新与未来趋势

随着科技的飞速发展&#xff0c;数字艺术藏品软件逐渐崭露头角&#xff0c;为艺术爱好者们提供了一个全新的收藏方式。这类软件不仅为艺术家提供了展示作品的平台&#xff0c;也为收藏家们提供了收藏和分享艺术品的渠道。本文将从开发思路、技术实现、市场前景等方面探讨数字艺…

TP_Link WR886N 硬改闪存16M内存64M,刷入openwrt

一、换内存&#xff0c;拆闪存&#xff1a; 1、先原机开机试试是否功能正常&#xff1b; 2、拆机&#xff0c;比较难拆&#xff0c;容易坏外壳&#xff1b; 3、找到内存和闪存&#xff0c;用胶带把边上的小元件&#xff0c;电阻都贴好&#xff1b; 4、加助焊油&#xff0c;用风…

IPSec:strongswan -- IKEv2如何检测到经过了nat设备

拓扑 其中NAT设备将来自DUTA的报文源IP 101.0.0.2转换为102.0.0.2。DUTA发起IPSec连接。 DUTA计算natd_chunk和natd_hash DUTA先用自己的SPI&#xff0c;对等体的SPI&#xff08;为0&#xff09;&#xff0c;IP和端口号做SHA1处理。如下图&#xff1a; 代码位于ike_natd.c的函…

【论文解读】CP-SLAM: Collaborative Neural Point-based SLAM System_神经点云协同SLAM系统(上)

目录 1 Abstract 2 Related Work 2.1 单一智能体视觉SLAM&#xff08;Single-agent Visual SLAM&#xff09; 2.2 协同视觉SLAM&#xff08;Collaborative Visual SLAM&#xff09; 2.3 神经隐式表示&#xff08;Neural Implicit Representation&#xff09; 3 Method 3.…

欧科云链研究院:DeFi 将要纳税?美国国税局召开听证会

出品&#xff5c;欧科云链研究院 作者&#xff5c;Matthew Lee 北京时间 11月15日&#xff0c;美国国税局&#xff08;IRS&#xff09;召开了一场备受瞩目的听证会&#xff0c;讨论扩大加密货币资产的征税范围。此次听证会囊括了诸多关键议题&#xff0c;包括用户隐私、必须报…

【数据结构】树与二叉树(十八):树的存储结构——Father链接结构、儿子链表链接结构

文章目录 5.1 树的基本概念5.1.1 树的定义5.1.2 森林的定义5.1.3 树的术语 5.2 二叉树5.3 树5.3.1 树的存储结构1. 理论基础2. 典型实例 5.3.2 Father链接结构a. 定义树节点结构b. 创建新节点c. 主函数d. 代码整合 5.3.3 儿子链表链接结构a. 定义树节点结构b. 创建新节点c. 添加…

DOORS和Reqtify—需求管理和需求追溯工具

产品概述 IBM Rational DOORS可实现对整个产品的全生命周期需求管理&#xff0c;覆盖从需求、到设计以及测试阶段&#xff0c;是一款被广泛使用的企业级专业需求管理工具。DOORS可以将项目开发过程中产生的各级需求和与需求相关的文件、网址URL进行链接管理&#xff0c;同时能够…

微信小程序Error: ENOENT: no such file

问题描述 当编译的时候 会提示找不到这个文件&#xff08;index&#xff09;&#xff0c;但是确信项目目录里已经删除了该页面路径&#xff0c;并且app.json的pages列表中也 导致这个问题应该是&#xff1a;新添加了文件&#xff0c;后面删除了或者修改了文件名&#xff0c;导…

Vue3.0和2.0语法不同分析

前言&#xff1a;本篇文章只做VUE3.0和VUE2.0语法上的不同分析&#xff0c;不做性能和源码架构等的分析。 一、VUE3.0和VUE2.0代码结构不同 VUE3.0代码实例 <template><div><span>count is {{ count }}</span><span>plusOne is {{ plusOne }}…

AH8691-60V降压至3.3V电源芯片:ESOP8封装解决方案

AH8691-60V降压至3.3V电源芯片&#xff1a;ESOP8封装解决方案 随着电子设备的日益普及&#xff0c;电源管理芯片的重要性也日益凸显。一款高效率、低功耗的电源芯片可以大大提高电子设备的性能和可靠性。今天&#xff0c;我们将介绍一款60V降压至3.3V电源芯片&#xff0c;采用…

c++递归分析出依赖的头文件

我想使用boost::optional&#xff0c;但boost库太大&#xff0c;添加到git时比较费劲。 怎样分析出boost/optional.hpp依赖的头文件&#xff0c;然后精准地添加到git上呢&#xff1f; 使用g就可以了&#xff0c;步骤如下 进入目录boost_1_78_0/boost执行 g -MM -H optional.hp…

04-快速掌握Redis,了解Redis中常见的结构类型及其应用场景

Redis快速入门 Remote Dctionary Server Redis是用C语言开发的一个开源的、基于内存的(高性能)键值对(key-value)结构化NoSql数据库,每秒内查询次数可以达到100000的QPS 键值型: Redis中存储的数据都是以key、value对的形式存储&#xff0c;而value的形式多种多样(如字符串、…

低代码,让我效率提升了80%

目录 ​编辑 一、前言 二、优势 三、主要功能点 四、低代码归根结底差不多 五、小结 一、前言 低代码开发平台&#xff0c;一个号称能在几分钟的时间里开发出一套公司内部都可使用的应用系统开发工具。很多人或许都隐隐听说过低代码&#xff0c;因为低代码不仅远名国外&#xf…

003 OpenCV filter2D

目录 一、环境 二、图像卷积 三、代码演示 3.1、锐化 3.2、sobel边缘&#xff0c;x方向 3.3、sobel边缘&#xff0c;y方向 3.4、高斯模糊 3.5、完整代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、图像卷积 在OpenCV…

CentOS停服背景下“浪潮信息KeyarchOS(KOS)系统迁移(无缝切换)解决方案”

1 前言 1.1 背景介绍 CentOS停服事件源于2020年12月宣布的CentOS项目变更&#xff0c;其原计划是基于Red Hat Enterprise Linux&#xff08;RHEL&#xff09;的开源版本&#xff0c;提供长期支持。然而&#xff0c;在2020年12月8日&#xff0c;官方宣布终止CentOS Linux的项目…

【数学】正投影和仿射投影

正投影 (Orthographic projection) Weak perspective projection Affine projection 形式1 形式2

BGP引入实验,华为ensp模拟器

一个小作业题&#xff0c;中间三台路由器bgp 100 分支用rip和ospf&#xff0c;最后如有引入时通过前缀列表精确匹配和路由策略调用&#xff0c;都是一些基本配置&#xff0c;考研学生们的基本功扎不扎实&#xff0c;从最最基础的接口配ip&#xff0c;到igp的路由配置&#xff0…

独立站和跨境电商平台的一个优缺点对比,哪个更适合你?

不管哪个行业都是一样的&#xff0c;有优点也有缺点&#xff0c;就像人们常说的人无完人一样。然后&#xff0c;我们来说说最近比较受关注的跨境电商独立站和跨境电商平台的一个优缺点对比吧&#xff01; 了解跨境电商独立站 建站&#xff0c;测试模板网站 跨境电商独立站 优点…

早上好图片漂亮祝福语,祝你事业芝麻节节高,好运连连天天妙!

1、清晨&#xff0c;我呼吸着新鲜空气&#xff0c;迎面的风捎来了你的气息&#xff0c;不知你现在在哪里&#xff1f;希望在这美丽的早晨时时见到开开心心的你&#xff0c;早安&#xff01; 2、无论岁月如何变幻&#xff0c;不变的是心态&#xff0c;改变的是容颜&#xff0c;…