目录

  • 1. 简介
  • 2. 用户
  • 3. 角色
  • 4. 菜单
  • 5. 仓库


1. 简介

在上篇文章中已经介绍了仓储管理系统中主要的需求。在该文章中主要介绍该系统的功能模块。

2. 用户

该仓储管理系统的用户总共可以分为四类。自有商城的卖家用户,生产工厂的用户以及抖店和淘宝店铺的店家和仓储管理系统管理人员。
公司目前已经存在一套的用户管理系统,目前公司所有系统的用户管理均采用该系统进行管理,所以仓储管理系统中用户也必须和用户管理系统对接。对接该系统之后能够无缝衔接自有商城的卖家用户以及生产工厂的用户。而对于抖店和淘宝店铺的店家和仓储系统的管理人员则需要通过注册服务接入公司的用户管理系统。
用户在用户管理系统中进行登录验证,获取token,然后凭借此token调用仓储管理系统中的API。
在仓储管理系统中不存储用户的主要信息,只存储用户的一些附加的信息。
更为详细的用户认证过程是:仓储管理系统中的用户首先要在公司的用户管理系统中进行注册。注册之后,在公司的仓储管理系统中的登录界面进行登录,仓储管理系统会调用用户管理系统的API对用户信息进行验证,验证通过之后获取登录的token。此后便凭借此token来调用仓储管理系统的API。在用户登录时也分为两种情况,用户首次登录时,需要将用户的简要信息存入仓储管理系统。此后,用户每次登录时只需要更新用户的登录的流水信息。

CREATE TABLE `tbl_sys_user` (
  `id` bigint(20) NOT NULL COMMENT '主键id',
  `account` varchar(64) DEFAULT NULL COMMENT '账号',
  `status` tinyint(3) DEFAULT NULL COMMENT '0 正常, 1 禁用, 2 注销',
  `last_login_time` datetime(6) DEFAULT NULL COMMENT '最近一次登录时间',
  `last_login_ip` varchar(63) CHARACTER SET utf8mb4 DEFAULT '' COMMENT '最近一次登录IP地址',
  `online_status` tinyint(2) DEFAULT NULL COMMENT '在线状态:0,否 1,在线',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
CREATE TABLE `tbl_user_login_log` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` varchar(64) NOT NULL COMMENT '用户应用id',
  `login_ip` varchar(63) DEFAULT '' COMMENT '登录IP地址',
  `login_time` datetime(6) NOT NULL COMMENT '登录时间',
  `cancel_login_time` datetime(6) NOT NULL COMMENT '退出登录时间',
  `duration` int(10) DEFAULT NULL COMMENT '登录时长,单位毫秒',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5520 DEFAULT CHARSET=utf8 COMMENT='用户登录流水表';

3. 角色

给用户赋予角色。仓储管理系统中的角色主要分为三类,管理员,用户和仓库管理人员。用户角色是用户在用户管理系统进行注册之后,然后在仓储管理系统中首次登录时进行赋予用户角色,用户管理系统中不进行角色管理。而仓库管理人员则是管理员在仓储管理系统的后台中主动添加。管理员角色则是由预先设置好的管理员进行添加。

CREATE TABLE `tbl_sys_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `parent_id` bigint(20) DEFAULT NULL COMMENT '父角色id',
  `name` varchar(32) NOT NULL COMMENT '角色名称',
  `description` varchar(64) DEFAULT NULL COMMENT '角色描述',
  `sort` int(11) DEFAULT NULL COMMENT '排序',
  `version` int(11) DEFAULT NULL COMMENT '版本(乐观锁用)',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `create_user` bigint(20) DEFAULT NULL COMMENT '创建者',
  `update_user` bigint(20) DEFAULT NULL COMMENT '更新者',
  `status` tinyint(3) DEFAULT NULL COMMENT '状态(0 正常, 1 禁用, 2 注销)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='角色表';
CREATE TABLE `tbl_sys_user_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `user_id` bigint(20) NOT NULL COMMENT '用户id',
  `role_id` bigint(20) NOT NULL COMMENT '角色id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='用户角色关联表';

4. 菜单

菜单功能与传统的菜单功能无异。角色绑定菜单。

CREATE TABLE `tbl_sys_menu` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `code` varchar(64) DEFAULT NULL COMMENT '菜单编号',
  `parent_codes` varchar(255) DEFAULT NULL COMMENT '当前菜单的所有父菜单编号',
  `name` varchar(32) DEFAULT NULL COMMENT '菜单名称',
  `icon` varchar(32) DEFAULT NULL COMMENT '菜单图标',
  `url` varchar(64) DEFAULT NULL COMMENT 'url地址',
  `sort` int(11) DEFAULT NULL COMMENT '菜单排序',
  `levels` int(11) DEFAULT NULL COMMENT '菜单层级',
  `menu_flag` int(11) DEFAULT NULL COMMENT '是否是菜单(0菜单 1按钮)',
  `description` varchar(255) DEFAULT NULL COMMENT '描述',
  `status` tinyint(3) DEFAULT NULL COMMENT '状态(0 正常, 1 禁用, 2 注销)',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `create_user` bigint(20) DEFAULT NULL COMMENT '创建者',
  `update_user` bigint(20) DEFAULT NULL COMMENT '更新者',
  `params` varchar(255) DEFAULT NULL COMMENT '路由参数',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='菜单表';
CREATE TABLE `tbl_sys_role_menu` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `role_id` bigint(20) DEFAULT NULL COMMENT '角色id',
  `menu_id` bigint(20) DEFAULT NULL COMMENT '菜单id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='角色菜单关联表';

5. 仓库

仓库模块中主要分为三个部分,仓库,分区和库位。三者的主要关系是仓库包含多个分区,分区包含多个库位。仓库在使用时,商品真正使用的是库位,在仓库进行租赁时费用也是按照库位进行计算的。
表结构如下:

CREATE TABLE `tbl_ware_house` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `ware_house_code` varchar(20) DEFAULT NULL COMMENT '仓库编码',
  `name` varchar(20) NOT NULL COMMENT '仓库名称',
  `type` tinyint(3) NOT NULL COMMENT '仓库类型(0成品仓,1原料仓)',
  `province_id` bigint(20) NOT NULL COMMENT '省份id',
  `province` varchar(20) DEFAULT NULL COMMENT '省份',
  `city_id` bigint(20) NOT NULL COMMENT '市id',
  `city` varchar(20) DEFAULT NULL COMMENT '市',
  `area_id` bigint(20) NOT NULL COMMENT '区县id',
  `area` varchar(20) DEFAULT NULL COMMENT '区县',
  `address` varchar(255) NOT NULL COMMENT '详细地址',
  `contacts` varchar(20) NOT NULL COMMENT '联系人',
  `phone` varchar(11) NOT NULL COMMENT '联系电话',
  `created_time` datetime NOT NULL COMMENT '创建时间',
  `deleted_time` datetime DEFAULT NULL COMMENT '删除时间',
  `status` tinyint(3) NOT NULL COMMENT '0 正常, 1 禁用, 2 注销',
  `zone_count` int(11) NOT NULL COMMENT '分区数',
  `stock_count` bigint(20) NOT NULL COMMENT '库存数',
  `stock_unit` varchar(10) DEFAULT NULL COMMENT '库存单位(默认:件)',
  `available_capacity` double DEFAULT NULL COMMENT '可用容量',
  `capacity` double DEFAULT NULL COMMENT '总容量',
  `available_location` int(11) DEFAULT NULL COMMENT '可用库位(剩余库位)',
  `location_count` int(11) NOT NULL COMMENT '库位数',
  `created_by` bigint(20) NOT NULL COMMENT '创建者',
  `operate_by` bigint(20) DEFAULT NULL COMMENT '最近操作人',
  `operate_time` datetime DEFAULT NULL COMMENT '最近操作时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8 COMMENT='仓库表';
CREATE TABLE `tbl_ware_house_zone` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `ware_house_id` bigint(20) NOT NULL COMMENT '仓库id',
  `zone_code` varchar(32) NOT NULL COMMENT '分区编码',
  `zone_name` varchar(32) NOT NULL COMMENT '分区名称',
  `created_time` datetime NOT NULL COMMENT '创建时间',
  `deleted_time` datetime DEFAULT NULL COMMENT '删除时间',
  `status` tinyint(3) NOT NULL COMMENT '0 正常, 1 禁用, 2 注销',
  `stock_count` bigint(20) NOT NULL COMMENT '库存数',
  `stock_unit` varchar(10) DEFAULT NULL COMMENT '库存单位(默认:件)',
  `location_count` int(11) NOT NULL COMMENT '库位数',
  `operate_by` bigint(20) DEFAULT NULL COMMENT '最近操作人',
  `operate_time` datetime DEFAULT NULL COMMENT '最近操作时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='仓库分区表';
CREATE TABLE `tbl_ware_house_zone_location` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `ware_house_id` bigint(20) NOT NULL COMMENT '仓库id',
  `zone_id` bigint(20) NOT NULL COMMENT '分区id',
  `location_code` varchar(32) NOT NULL COMMENT '库位编码',
  `location_name` varchar(32) NOT NULL COMMENT '库位名称',
  `lacation_status` tinyint(3) DEFAULT NULL COMMENT '库位状态(0可租,1不可租,2已租)',
  `length` double DEFAULT NULL COMMENT '长(单位米)',
  `width` double DEFAULT NULL COMMENT '宽(单位米)',
  `heigth` double DEFAULT NULL COMMENT '高(单位米)',
  `wolume` double DEFAULT NULL COMMENT '体积(立方米)',
  `created_time` datetime NOT NULL COMMENT '创建时间',
  `deleted_time` datetime DEFAULT NULL COMMENT '删除时间',
  `status` tinyint(3) NOT NULL COMMENT '0 正常, 1 禁用, 2 注销',
  `stock_count` bigint(20) NOT NULL COMMENT '库存数',
  `stock_unit` varchar(10) DEFAULT NULL COMMENT '库存单位(默认:件)',
  `operate_by` bigint(20) DEFAULT NULL COMMENT '最近操作人',
  `operate_time` datetime DEFAULT NULL COMMENT '最近操作时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COMMENT='仓库分区库位表';

其中对于仓库,分区,库位都都存在一个编码的属性。其中仓库生成规则是所在城市名称首字母大写+仓库类型首字母+3位数字编号。分区编码的规则是仓库编码+3位数字编号。库位编码的格则是分区编号+3位数字编号
其中需要特别注意的地方在于仓库,分区和库位的编码都是按照顺序来进行设置的,而且对于库位或者分区的修改会牵扯到分区表中或者仓库表中的分区数或者库位数,所以在新增或者删除操作时需要加锁,避免数据的混乱。