17.快递物流仓库管理系统(基于springboot和vue)

目录

1.系统的受众说明    

2.系统详细设计

2.1 需求分析

2.2 系统功能设计

2.3 开发环境分析

​​​​​​​2.4 E-R图设计

2.5 数据库设计

3. 系统实现

3.1 环境搭建

​​​​​​​3.2 员工信息管理模块

3.3 销售订单信息管理模块

​​​​​​​3.4 图表分析模块

​​​​​​​3.5 商品信息和仓库管理

​​​​​​​3.6 配送管理模块

3.7 系统管理模块

3.8 切面日志的使用


1.系统的受众说明 
   

     1 在校学习的学生,可用于日常学习使用或是毕业设计使用

     2 毕业一到两年的开发人员,用于锻炼自己的独立功能模块设计能力,增强代码编写能力。

     3 亦可以部署为商化项目使用。

     4 需要完整资料及源码,请在文末获取联系方式领取。

2.系统详细设计

2.1 需求分析

基础管理包含商品管理,来往单位,员工管理,仓库管理。

销售管理包含销售开票,销售记录。

配送管理包含申请配送,配送列表。

运输管理包含车辆资料,驾驶员资料。

图表分析包含出入库分析。

系统设置包含安全设置,操作员管理,权限列表。

日志管理包含登陆日志和操作日志。

操作员的所有权限

ROLE_EMPLOYEE; 员工权限

查看员工对员工进行增删改查操作

ROLE_WAREHOUSE;仓库权限

对仓库的管理权限查看仓库的数量名字和增删改查

ROLE_SALE;销售权限

对销售单的管理权限,查看销售的相关信息和增删改查

ROLE_COMMODITY;商品权限

对商品的管理权限查看商品的数量名字和增删改查

ROLE_ADMIN;管理员权限

所有权限

ROLE_SUPER_ADMIN超级管理员权限

所有权限

​​​​​​​2.2 系统功能设计

仓库物流网站主要是针对快递物流最后一公里的配送问题研发的,实现了取件快速认证身份,仓库快递送货上门快速下单等,方便用户取快递的过程。

本系统的用户类型较多,不同用户的功能操作业务不同,为了提升用户体验,在用户访问时,通过CAS权限控制技术,实现不同用户访问的不同的用户界面,避免用户超越权限访问内容,减少用户误操作。因此,本系统将分为三个用户界面,分别为管理员模块界面,快递模块界面和用户模块界面。管理员可以对其他用户和订单进行管理。管理员和用户可以进行登录后并使用网站。

功能模块结构图如图所示。

图 211模块结构图

2.3 开发环境分析

前端vue技术

Vue.js(通常简称为 Vue)是一个用于构建用户界面的渐进式 JavaScript 框架。它旨在通过简洁的 API 实现响应的数据绑定和组合的视图组件。Vue 的核心库专注于视图层,并且易于与其他库或已有项目整合。同时,Vue 完全有能力驱动采用单文件组件和 Vue 生态系统支持的库开发的复杂单页应用。

以下是 Vue 的一些主要特性和优势:

响应式数据绑定:Vue 采用了数据驱动视图的原理。当数据发生变化时,视图会自动更新,反之亦然。这种响应式数据绑定极大地简化了前端开发的工作。

组件化开发:Vue 允许你将 UI 拆分为独立的、可复用的组件,这有助于提高代码的可维护性和可重用性。组件可以嵌套使用,并且可以拥有自己的状态和方法。

指令系统:Vue 提供了一套简洁的指令系统,如 v-for、v-if、v-bind 等,这些指令可以帮助你轻松操作 DOM,并使得模板更易于理解和维护。

虚拟 DOM:Vue 使用虚拟 DOM 来提高渲染性能。当数据发生变化时,Vue 会计算出一个新的虚拟 DOM 树,并将其与旧的虚拟 DOM 树进行比较,然后找出差异并更新真实的 DOM。

丰富的生态系统:Vue 拥有庞大的社区和丰富的生态系统,包括各种插件、工具库和组件库,可以帮助你快速构建功能强大的应用。

易于学习和使用:Vue 的 API 设计得简洁直观,使得初学者能够快速上手。同时,Vue 的文档和社区资源也非常丰富,有助于解决学习和使用过程中的问题。

服务器端渲染 (SSR) 与静态网站生成 (SSG):Vue 支持服务器端渲染,使得首屏加载更快,并提供了更好的用户体验。此外,Vue 也支持静态网站生成,适合构建静态站点。

Vue 在前端开发中得到了广泛的应用,特别是在构建单页面应用(SPA)时。无论是开发简单的网页还是复杂的应用,Vue 都能提供强大的支持和灵活的解决方案。

IDEA

"IDEA" 通常指的是 IntelliJ IDEA,这是一个由 JetBrains 公司开发的强大的集成开发环境(IDE),主要用于 Java 语言开发,但也支持其他语言,如 Kotlin、Scala、Groovy 等。IDEA 提供了一套丰富的工具和功能,旨在提高开发者的生产力和代码质量。

以下是 IntelliJ IDEA 的一些主要特点和功能:

智能代码编辑:IDEA 提供了智能代码补全、代码格式化、代码重构、快速修复等功能,帮助开发者更高效地编写代码。

强大的调试器:内置了一个功能强大的调试器,支持断点、变量查看、线程分析等调试功能。

版本控制集成:与 Git、SVN 等版本控制系统无缝集成,支持代码提交、拉取、合并等操作。

丰富的插件生态:IDEA 支持大量的插件,开发者可以根据自己的需求安装插件,扩展 IDE 的功能。

数据库工具:提供了数据库连接、SQL 编辑、数据可视化等数据库相关的工具。

集成测试工具:支持单元测试、集成测试等,方便开发者在开发过程中进行测试。

性能分析器:内置了性能分析器,可以帮助开发者分析代码的性能瓶颈。

跨平台支持:IDEA 可以在 Windows、macOS 和 Linux 等多个操作系统上运行。

IntelliJ IDEA 分为两个版本:社区版(Community Edition)和旗舰版(Ultimate Edition)。社区版是免费的,提供了基本的 Java 开发功能;而旗舰版则包含了更多的高级功能,如 Web 开发、数据库工具、移动应用开发等,需要付费购买。

由于 IntelliJ IDEA 的出色性能和丰富的功能,它受到了广大 Java 开发者的喜爱和信赖,成为 Java 开发领域的一款主流 IDE。

数据库:MySQL

MySQL 是一个流行的开源关系型数据库管理系统(RDBMS),它使用结构化查询语言(SQL)进行数据库管理。MySQL 由瑞典 MySQL AB 公司开发,后被甲骨文公司(Oracle Corporation)收购。由于其性能高、稳定性好、易于使用和开源等特性,MySQL 广泛应用于各种网站和应用程序中,特别是 Web 开发领域。

以下是 MySQL 的一些主要特点和功能:

开源与免费:MySQL 是一个开源项目,可以免费使用和修改。这大大降低了使用成本,并促进了社区的发展和贡献。

结构化存储:MySQL 使用表(table)来存储数据,每个表由行(row)和列(column)组成,提供结构化的数据存储方式。

强大的 SQL 支持:MySQL 完全支持标准的 SQL 语言,包括数据查询、插入、更新和删除等操作。

索引:为了提高查询性能,MySQL 支持多种类型的索引,如主键索引、唯一索引、普通索引等。

事务处理:MySQL 支持 ACID(原子性、一致性、隔离性、持久性)事务,确保数据的一致性和完整性。

存储引擎:MySQL 支持多种存储引擎,如 InnoDB、MyISAM 等,每种引擎都有其特定的优势和适用场景。

视图、触发器与存储过程:MySQL 提供了视图(view)、触发器(trigger)和存储过程(stored procedure)等高级功能,增强了数据库的灵活性和可维护性。

复制与集群:MySQL 支持主从复制(master-slave replication),可以实现数据备份和读写分离。同时,也支持各种集群方案,如 NDB Cluster、Group Replication 等,以实现高可用性和负载均衡。

性能优化:MySQL 提供了丰富的性能优化工具和参数设置,可以帮助开发者和管理员优化数据库性能。

广泛的社区支持:由于 MySQL 的广泛应用,其社区非常活跃,拥有大量的学习资源和开发者支持。

在 Web 开发中,MySQL 通常与各种编程语言和框架结合使用,如 PHP、Python(Django、Flask)、Java(Spring、Hibernate)等,构建功能强大的后端系统。此外,MySQL 也广泛应用于数据分析、数据挖掘、电子商务、内容管理等领域。

Nodejs 运行vue前端的环境

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它允许开发者在服务器端使用 JavaScript 来编写和运行代码。Node.js 的出现,打破了前端与后端开发的界限,使得开发者可以使用同一种语言(JavaScript)来编写全栈应用。

Node.js 的主要特点包括:

非阻塞 I/O:Node.js 采用单线程模型,利用事件循环(Event Loop)处理非阻塞 I/O 操作,使其能够高效地处理大量并发连接。

异步编程:Node.js 提供了大量的异步 API,使得开发者可以编写非阻塞的、事件驱动的代码,从而提高应用程序的性能和响应速度。

单线程:虽然 Node.js 是单线程的,但由于其非阻塞的 I/O 模型,它可以充分利用多核 CPU 的资源,通过创建多个进程(使用 child_process 或 cluster 模块)来实现并行处理。

丰富的生态系统:Node.js 拥有庞大的社区和丰富的第三方库,开发者可以轻松地找到所需的工具和框架,快速构建应用程序。

跨平台:Node.js 可以在 Windows、Linux 和 macOS 等多种操作系统上运行,使得开发者可以灵活地选择开发环境。

Node.js 的应用场景非常广泛,包括但不限于:

Web 应用开发:Node.js 可以用于构建高性能的 Web 服务器和 API 接口。

实时通信:Node.js 的非阻塞 I/O 和事件驱动特性使其非常适合用于构建实时通信应用,如聊天室、在线游戏等。

数据处理与分析:Node.js 可以用于处理大量数据,如日志分析、数据挖掘等。

物联网(IoT):Node.js 的轻量级和跨平台特性使其成为物联网应用开发的理想选择。

总之,Node.js 是一个强大而灵活的 JavaScript 运行环境,它使得开发者能够用同一种语言构建全栈应用,提高开发效率,降低维护成本。

​​​​​​​2.4 E-R图设计

在该系统中,配送订单的属性分析,具体E-R图如下图所示。

图 212 E-R图 

2.5 数据库设计

根据系统需求和各模块功能设计,在数据库设计中,设计了张数据表,分别为权限系统8张,分别为管理员、快递员、用户和龙门镖局。设计订单、代取件订单表和龙门镖局订单各1张,以及公告表、反馈表各1张。由于该物流仓库配送快递平台后续还会有更多功能和模块,因此在表的设计中还需要保证它的可扩展性。

数据库的E-R图设计后,就可以将上面的数据库概念转化为实际数据模型,及数据库的逻辑结构。

数据库实体属性和字段属性如下图所示。

(1)管理员表存放管理员信息,如下表所示。

表 22管理员表admin

名称

类型

长度

是否允许空

是否主键

id

int

11

create_at

varchar

50

email

varchar

50

password

varchar

50

roles

varchar

50

(2员工表存放各站点的工作人员信息,如下表所示。

表 23员工表employee

名称

类型

长度

是否允许空

是否主键

id

int

11

address

varchar

50

create_at

varchar

50

department

varchar

50

gender

varchar

50

id_card

varchar

50

name

varchar

50

phone

varchar

11

update_at

varchar

50

(3)司机表存放使用该网站系统的司机信息,如下表所示。

表 24司机配送员表driver

名称

类型

长度

是否允许空

是否主键

id

int

11

address

varchar

50

create_at

varchar

50

driving

varchar

50

gender

varchar

50

id_card

varchar

50

license

varchar

50

name

int

11

phone

varchar

score

varchar

update_at

varchar

(4)销售订单表存放销售订单信息,如下表所示。

表 25销售表sale

名称

类型

长度

是否允许空

是否主键

id

int

11

commodity

varchar

50

company

varchar

500

count

varchar

11

create_at

varchar

500

description

varchar

50

number

varchar

50

pay

bit

1

phone

varchar

11

price

varchar

50

(5)库存inventory信息表,如下表所示。

表3- 1库存表inventory

名称

类型

长度

是否允许空

是否主键

id

int

11

cid

varchar

255

count

varchar

8000

location

varchar

50

name

varchar

11

wid

varchar

50

(6)商品表信息,如下表所示。

表 26商品表commodity

名称

类型

长度

是否允许空

是否主键

id

int

11

count

varchar

50

create_at

varchar

11

description

varchar

500

name

varchar

50

price

varchar

50

update_at

varchar

50

(7)仓库表用来存放用户信息仓库表,如下表所示。

表 27仓库表warehouse

名称

类型

长度

是否允许空

是否主键

id

int

11

create_at

varchar

255

name

varchar

255

principle

varchar

50

(8)交通工具vehicle,如下表所示。

表 28交通工具表vehicle

名称

类型

长度

是否允许空

是否主键

id

int

11

create_at

varchar

50

driving

varchar

50

number

varchar

50

type

varchar

50

3. 系统实现

3.1 环境搭建

搭建基于springboot和vue仓库快递物流配送平台首先需要搭建springboot环境。Spring MVC 用于 Web 层,相当于 Controller,处理请求并作出响应;MyBatis 作为持久层的框架,可以自由的控制 SQL,更加简捷地完成数据库操作;Spring 的依赖注入可以减少代码的耦合,可以装配 Bean,另外其 AOP、事务管理尤其方便,同时,Spring 可以将各层进行整合。springboot框架相比于SSM更轻量灵活,也更符合敏捷开发的需求。[13]

在设计并建立数据库后,首先建立了所需的包并导入了项目所用的jar包。框架结构图如下图所示。

 

图 41前后端项目结构图

后端总配置:

server:
 port: 8088
spring:
 mail:
   host: smtp.qq.com
   protocol: smtp
   default-encoding: UTF-8
   #发件人
   username: abc@qq.com
   #授权码
   password: hmps234234
   port: 465
   properties:
     mail:
       debug: true
       smtp:
         ssl:
           enable: true
 datasource:
   driver-class-name: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql://localhost:3306/wmsadmin?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true
   username: root
   password: root
 jpa:
   hibernate:
     ddl-auto: update
   open-in-view: false
   show-sql: true
#设置日志级别会给root根节点设置,代表整体应用的级别
logging:
 level:
   root: info

前端与后端连接参数:

import request from "axios"

import {message} from 'ant-design-vue'

import router from '../router/index'

var token = localStorage.getItem("token")

var service = request.create({

    baseURL: 'http://localhost:8088/api',

    timeout: 50000

});

service.interceptors.response.use(

    response => {

        const res = response.data;

        //判断response状态

        if (!res.status) message.error('请求错误: ' + res.msg)

        if (res.code === 403) router.push("/403")

        return res

    },

    error => {

        message.error(error)

        router.push('/500')

        return Promise.reject(error)

    }

);

console.log("执行request.js2");

export default service

    1. 用户登录模块

用户登录功能是采用form提交的形式进行登陆验证,在输入用户名和密码后,通过form的post,提交方式,提交到服务器端,服务器端接受到数据,在数据库中查找,查找出这个用户,登录成功,如果查询出来没有,登录失败。

登录界面如下图所示。

图 42登陆界面

<template>

  <div class="login_container">

  <div class="login-box">

    <div>

      <div class="title">物流快递仓库管理系统</div>

      <a-tabs @change="tabClick" default-active-key="1" :tabBarStyle="{ textAlign: 'center' }">

        <a-tab-pane key="1" tab="密码登陆">

          <a-input

              v-model="form.email"

              size="large"

              style="margin-top: 10px"

              class="input"

              placeholder="邮箱">

            <a-icon slot="prefix" type="mail"/>

          </a-input>

          <a-input-password

              v-model="form.password"

              size="large"

              class="input"

              placeholder="密码">

            <a-icon slot="prefix" type="lock"/>

          </a-input-password>

        </a-tab-pane>

        <a-tab-pane key="2" tab="验证码登陆" force-render>

          <a-input

              v-model="form.email"

              size="large"

              style="margin-top: 10px"

              class="input"

              placeholder="邮箱">

            <a-icon slot="prefix" type="mail"/>

          </a-input>

          <div style="display: flex">

            <a-input

                v-model="form.code"

                size="large"

                class="input"

                placeholder="验证码">

              <a-icon slot="prefix" type="safety-certificate"/>

            </a-input>

            <a-button class="code-btn" :loading="sendLoading" @click="sendEmail">

              获取验证码

            </a-button>

          </div>

        </a-tab-pane>

      </a-tabs>

      <div style="margin-bottom: 20px;display: flex;justify-content: space-around;">

        <a-checkbox v-model="form.remember" style="display: inline;">自动登录</a-checkbox>

        <!-- <a-button type="link" to="/init">没有账号?点我注册 </a-button> -->

        <router-link to="/init">没有账号?点我注册</router-link>

      </div>

      <a-button :loading="submitLoading" class="submit-btn" type="primary" @click="submitLogin">

        确认登陆

      </a-button>

      <div class="des">管理员登录</div>

    </div>

  </div>

</div>

</template>

​​​​​​​3.2 员工信息管理模块

import com.example.api.annotation.Log;
import com.example.api.model.entity.Employee;
import com.example.api.model.enums.BusincessType;
import com.example.api.service.EmployeeService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/api/employee")
@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_EMPLOYEE')")
public class EmployeeController {

   @Resource
   private EmployeeService employeeService;

   @Log(moudle = "员工管理",type = BusincessType.QUERY)
   @GetMapping("")
   public List<Employee> findAll() {
       return employeeService.findAll();
   }

   @Log(moudle = "员工管理",type = BusincessType.QUERY)
   @GetMapping("/{id}")
   public Employee findById(@PathVariable String id) {
       return employeeService.findById(id);
   }

   @Log(moudle = "员工管理",type = BusincessType.INSERT)
   @PostMapping("")
   public Employee save(@RequestBody Employee employee) {
       return employeeService.save(employee);
   }

   @Log(moudle = "员工管理",type = BusincessType.UPDATE)
   @PutMapping("")
   public void update(@RequestBody Employee employee) {
       employeeService.update(employee);
   }

   @Log(moudle = "员工管理",type = BusincessType.DELETE)
   @DeleteMapping("")
   public void delete(String id) {
       employeeService.delete(id);
   }

}

图 43员工管理

添加界面如下图所示。

图 44员工信息添加

3.3 销售订单信息管理模块

销售订单管理模块包含 公司打款账号,商品数量预留电话,总计界面如下图所示。

图 45销售订单界面

代码:

package com.example.api.controller;

import com.example.api.model.entity.Sale;
import com.example.api.service.SaleService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/api/sale")
@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_SALE')")
public class SaleController {
   @Resource
   private SaleService saleService;

   @PostMapping("")
   public Sale save(@RequestBody Sale sale) {
       return saleService.save(sale);
   }

   @GetMapping("")
   public List<Sale> findAll() {
       return saleService.findAll();
   }

   @GetMapping("/search/{name}")
   public List<Sale> search(@PathVariable String name) {
       return saleService.searchByCompany(name);
   }

}

​​​​​​​3.4 图表分析模块

快递人员管理是对物流的种类信息进行管理,如下图所示。

图 46入库分析界面

代码


@GetMapping("analyze")
public List<CommodityChartVo> analyze(Integer type) {
   return recordService.analyzeCommodity(type);
}

​​​​​​​3.5 商品信息和仓库管理

在仓库中,经常遇到,今天的课程全在南区,但快递却在北区的菜鸟驿站,一来一回要花费半小时。以及,有些时候,用户会收到一些非常重的快递,但并不是每次都能找到用户来搬。在这种情况下开发了代取件功能。

用户收到菜鸟驿站的快递短信通知后,登陆网站,写上自己的快递基本信息,如大概重量,以及自己的宿舍楼层,以及报酬等,愿意接单的其他用户会在进入网站时看到此条信息,接单并联系送货的时间。在送达后会进行互相评分并进行评价。

查看代取件订单时如下图所示

图 47商品信息管理界面

仓库如下图所示。

图 48仓库管理界面

其主要实现代码如下所示

package com.example.api.controller;
import com.example.api.annotation.Log;
import com.example.api.model.entity.Warehouse;
import com.example.api.model.enums.BusincessType;
import com.example.api.service.WarehouseService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/api/warehouse")
@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_WAREHOUSE')")
public class WarehouseController {

   @Resource
   private WarehouseService warehouseService;

   @Log(moudle = "仓库管理",type = BusincessType.INSERT)
   @PostMapping("")
   public Warehouse save(@RequestBody Warehouse warehouse) {
       return warehouseService.save(warehouse);
   }

   @Log(moudle = "仓库管理",type = BusincessType.QUERY)
   @GetMapping("")
   public List<Warehouse> findAll() {
       return warehouseService.findAll();
   }

   @Log(moudle = "仓库管理",type = BusincessType.DELETE)
   @DeleteMapping("")
   public void delete(String id) {
       warehouseService.delete(id);
   }

}

​​​​​​​3.6 配送管理模块

管理员可以发布或修改公告,所有用户可见。公告管理界面如下图所示。

图 49申请配送管理界面

3.7 系统管理模块

快递人员信息修改是员工可以对自己的编号密码地址等进行修改,如下图所示。

图 410操作员管理界面

图 411修改登陆人信息界面

图 412 权限列表

3.8 切面日志的使用

package com.example.api.aspect;

import com.example.api.annotation.Log;
import com.example.api.model.entity.SystemLog;
import com.example.api.service.SystemLogService;
import com.example.api.utils.IpUtil;
import com.example.api.utils.JwtTokenUtil;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.time.LocalDateTime;

@Aspect
@Component
public class LogAspect {
   @Autowired
   private SystemLogService logService;

   /*
       表明切点
    */
   @Pointcut("@annotation(com.example.api.annotation.Log)")
   public void pt(){}

   /*
      环绕通知
    */
   @Around("pt()")
   public Object Around(ProceedingJoinPoint point) throws Throwable {
       //记录开始时间
       long beginTime = System.currentTimeMillis();
       Object res = null;
       try {
           //执行方法
           res = point.proceed();
       }finally {
           //计算执行时长
           long time = System.currentTimeMillis() - beginTime;
           recordLog(point);
       }
       return res;
   }

   private void recordLog(ProceedingJoinPoint point){
       //获取当前请求对象
       ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
       HttpServletRequest request = requestAttributes.getRequest();
       //获取目标方法签名
       MethodSignature signature = (MethodSignature) point.getSignature();
       Method method = signature.getMethod();
       Log annotation = method.getAnnotation(Log.class);
       //封装日志对象
       SystemLog systemLog = new SystemLog();
       systemLog.setModule(annotation.moudle());
       systemLog.setBusincessType(annotation.type().getName());
       systemLog.setIp(IpUtil.getIpAddr(request));
       systemLog.setTime(LocalDateTime.now());
       //获取方法的全路径
       systemLog.setMethod(signature.getDeclaringTypeName()+"."+signature.getName());
       //获取token,并解析token来获取当前账号
       String token = request.getHeader(JwtTokenUtil.TOKEN_HEADER);
       systemLog.setAccount(JwtTokenUtil.getUsername(token));
       //持久化到数据库
       logService.record(systemLog);
   }
}

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

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

相关文章

Shortcut Learning in In-Context Learning: A Survey

为我们的综述打一打广告&#xff0c;目前是初级版本&#xff0c;欢迎各位批评指正&#xff01;后续的论文列表、测评基准会在Github更新[/(ㄒoㄒ)/~~最近比较忙容许我拖一拖] 这里是arxiv链接&#xff1a;Linking!!! Abstract&#xff1a;捷径学习是指模型在实际任务中使用简单…

第三十四章 Vue路由进阶之声明式导航(导航高亮)

目录 一、导航高亮 1.1. 基于语法 1.2. 主要代码 二、声明式导航的两个类名 2.1. 声明式导航类名匹配方式 2.2. 声明式导航类名样式自定义 ​2.3. 核心代码 一、导航高亮 1.1. 基于语法 在Vue中通过VueRouter插件&#xff0c;我们可以非常简单的实现实现导航高亮效果…

第七部分:1. STM32之ADC实验--单通道实验

主要利用一个模拟量的电位器来实时改变电压值&#xff0c;通过STM32自带的ADC通道来采集这个数据&#xff0c;并打印出来&#xff01; 一句话&#xff0c;学完STM32&#xff0c;我就往南走&#xff0c;我的工资只有5000.~~~~Whappy

Ubuntu20.04两种安装及配置中文界面、输入法、换源、共享文件夹实现,及注意事项

虚拟机安装法 1、新建虚拟机&#xff0c;自定义下一步 任意指定路径 提高处理器数量能加快系统响应 完成以后不要运行&#xff0c;添加镜像文件 导入镜像文件&#xff0c;点击浏览 选择后打开->确认->运行虚拟机 出现这种情况就需要检查虚拟机的配置&#xff0c;操作系统…

记录解决vscode 登录leetcode中遇到的问题

1. 安装完 leetcode 点击sign in to leetcode 点击打开网站登录leetcode&#xff0c;发现网页无法打开。 解决办法&#xff1a;将leetcode.cn.js文件中的leetcode-cn.com路径都改成leetcode.cn 2. 继续点击 sign in to leetcode &#xff0c;选择使用账号登录&#xff0c;始…

docker镜像仓库实战

docker镜像仓库实战 搭建一个nginx服务基础知识(Web服务器)查找nginx镜像拉取镜像启动nginx镜像 搭建一个nginx服务 基础知识(Web服务器) Web 服务器&#xff0c;一般是指“网站服务器”&#xff0c;是指驻留于互联网上某种类型计算机的程序。Web 服务器可以向 Web 浏览器等客…

zabbix安装配置与使用

zabbix Zabbix的工作原理如下: 监控部分: Zabbix Agent安装在各个需要监控的主机上,它以主配置的时间间隔(默认60s)收集主机各项指标数据,如CPU占用率、内存使用情况等。 通讯部分: Agent会把收集的数据通过安全通道(默认10051端口)发送到Zabbix Server。Server会存储这些数…

CSS的三个重点

目录 1.盒模型 (Box Model)2.位置 (position)3.布局 (Layout)4.低代码中的这些概念 在学习CSS时&#xff0c;有三个概念需要重点理解&#xff0c;分别是盒模型、定位、布局 1.盒模型 (Box Model) 定义&#xff1a; CSS 盒模型是指每个 HTML 元素在页面上被视为一个矩形盒子。…

关于LLC知识23(频率越大变压器体积越小?)

为什么频率越高&#xff0c;同样的磁芯就可以用的更小&#xff1f; 变压器他负责的功能是 1、隔离 2、能量传递 这里主要是与能量传递有关 我们首先要知道&#xff0c;次级的输出功率一定的情况下&#xff0c;那么在一定的时段内消耗的能量就是一定的&#xff0c;比如1000W…

UE5.4 PCG Layered Biomes插件

B站学习链接 官方文档 一、PCGSpawn Preset&#xff1a;负责管理PCG要用到的植被资产有哪些 二、BiomesSettings&#xff1a;设置要使用的植被资产Layer、Spawn参数 1.高度Layer参数&#xff1a; 2.地形Layer&#xff1a;我这里用地形样条线绘制了一块地形Layer 绘制点和…

数字后端零基础入门系列 | Innovus零基础LAB学习Day8

###LAB15 Detail Routing for Signal Integrity, Timing, Power and Design for Yield 这个章节虽然标题有点长&#xff0c;但不要被它吓到&#xff0c;其实这个章节就是Innovus工具的绕线Routing。只不过这个阶段做Route不是仅仅是把所有的逻辑连接&#xff0c;用实际的金属层…

量化交易 股市技术指标

股市数据分类 股票数据根据信息来源和分析方法的不同&#xff0c;可以分为技术面数据和基本面数据。 技术面数据和基本面数据都是股票分析中重要的工具&#xff0c;它们提供了不同的视角和方法来评估股票的投资价值。投资者可以综合运用这两类数据&#xff0c;从技术面和基本…

【从零开始的LeetCode-算法】3222. 求出硬币游戏的赢家

给你两个 正 整数 x 和 y &#xff0c;分别表示价值为 75 和 10 的硬币的数目。 Alice 和 Bob 正在玩一个游戏。每一轮中&#xff0c;Alice 先进行操作&#xff0c;Bob 后操作。每次操作中&#xff0c;玩家需要拿出价值 总和 为 115 的硬币。如果一名玩家无法执行此操作&#…

MR30分布式IO模块与高效PLC协同

在现代工业自动化领域中&#xff0c;数据采集与控制系统扮演着至关重要的角色。其中&#xff0c;可编程逻辑控制器&#xff08;PLC&#xff09;和分布式IO模块&#xff08;Distributed I/O Modules&#xff09;是这一领域的两大核心组件。本文将详细介绍MR30分布式IO模块与PLC如…

贝尔不等式的验证

在量子计算机上运行一个实验&#xff0c;以演示使用Estimator原型违反CHSH不等式。 import numpy as npfrom qiskit import QuantumCircuit from qiskit.circuit import Parameter from qiskit.quantum_info import SparsePauliOpfrom qiskit_ibm_runtime import QiskitRuntim…

CSRF与SSRF

csrf(跨站请求伪造)的原理: csrf全称是跨站请求伪造(cross-site request forgery)&#xff0c;也被称为one-click attack 或者 session riding scrf攻击利用网站对于用户网页浏览器的信任&#xff0c;劫持用户当前已登录的web应用程序&#xff0c;去执行分用户本意的操作。 利…

Pr 视频效果:ASC CDL

视频效果/颜色校正/ASC CDL Color Correction/ASC CDL ASC CDL ASC CDL效果通过对红、绿、蓝三个原色通道的独立调整&#xff0c;实现对图像色彩的精确控制。在此基础上&#xff0c;还可用于调整处理后图像的整体饱和度。 ◆ ◆ ◆ 效果选项说明 斜率 Slope、偏移 Offset和功…

Edge 浏览器插件开发:图片切割插件

Edge 浏览器插件开发&#xff1a;图片切割插件 在图片处理领域&#xff0c;按比例切割图片是一个常见需求。本文将带你开发一个 Edge 浏览器插件&#xff0c;用于将用户上传的图片分割成 4 个部分并自动下载到本地。同时&#xff0c;本文介绍如何使用 cursor 辅助工具来更高效…

docker desktop使用ubuntu18.04带图形化+运行qemu

记录一下docker desktop使用ubuntu18.04带图形化命令和使用步骤 1. 下载镜像 参考&#xff1a;【Docker教程】Docker部署Ubuntu18.04(带图形化界面) 命令&#xff1a; docker pull kasmweb/ubuntu-bionic-desktop:1.10.02. 启动镜像 命令&#xff1a; docker run -d -it …

Transformer和BERT的区别

Transformer和BERT的区别比较表&#xff1a; 两者的位置编码&#xff1a; 为什么要对位置进行编码&#xff1f; Attention提取特征的时候&#xff0c;可以获取全局每个词对之间的关系&#xff0c;但是并没有显式保留时序信息&#xff0c;或者说位置信息。就算打乱序列中token…