SSM仓储管理系统31582-计算机课程设计、毕业设计

前言

✨ **博主介绍:**一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮你把毕设做成作品集。👍👍

👇精彩专栏 推荐订阅👇

深耕多年的2000+套Java项目,附带数据库

深耕多年的800+套Python项目,附带数据库

深耕多年的500+套小程序/app项目,附带数据库

精选100个热门Java毕业设计项目|适配2026‑2027届选题参考✅

精选100个热门Python毕业设计项目|适配2026‑2027届选题参考✅

精选100个热门微信小程序/安卓APP毕业设计项目|适配2026‑2027届选题参考✅

✅获取源码请私信✅

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️

第一章 绪论

1.1 研究背景与意义

  传统仓储管理中,企业依靠手工单据和纸质记录来完成货物进出登记,信息传递单向滞后,部门之间数据割裂造成库存账实不符现象时有发生,供应商和仓库之间用电话或者邮件沟通采购和发货事宜,信息不对称的问题比较严重,整个运作效率很低1。电脑化办公和早期管理软件的引入之后,部分企业开始进行电子化记录,数据检索速度得到提高,但是系统的功能大多只被单个部门所使用,跨角色协作仍然需要线下对接,碎片化的操作体验以及流程断层导致库存更新迟缓、订单状态无法及时同步,现有的管理模式不能满足现代供应链对于实时性和协同性的要求2。

  开发出一个可以协同工作的多角色仓储管理系统,把员工、供应商、管理员纳入同一个平台中,使商品信息、出入库记录、订单状态等数据可以被共享和及时更新,从而大大提高信息流转的速度以及准确度。该系统对仓储业务流程的规范整合可以减少人为失误,提高库存盘点质量及订单执行速度,给中小型企业创建高效可控的仓储管理体系赋予可行方案。

1.2 国内外研究现状

1.2.1 国内现状

  国内仓储管理系统的形成是从最初的单机版软件发展成现在的网络化平台。早期的用友、金蝶等ERP系统主要是用于企业的财务核算,仓储操作界面比较复杂,中小型企业使用成本高3。之后垂直领域出现了针对电商仓储的独立管理系统,例如旺店通、管易云等,实现了订单同步和库存联动,但是功能仍然以内部操作为主,供应商和外部角色的接入能力较差4。近几年来由于云计算技术的普及,SaaS模式的仓储管理平台聚水潭、唯智信息等开始加入多角色协作的功能,支持供应商在线查看采购需求和发货进度,但是系统的模块配置比较复杂,中小型企业仍然存在使用门槛的问题5。开源框架下定制化开发也渐渐得到重视,基于SSM架构的仓储系统由于轻量、可扩展的特点被应用到多种企业的内部管理中6。有些研究开始对库存预警、采购计划、订单追踪这三个环节进行流程闭环的设计,用业务单据来消除操作断层7。

1.2.2 国外现状

  国外仓储管理系统研究开始得比较早,大型企业大多使用SAP EWM、Oracle WMS等成熟的套件,这些系统深度整合供应链管理模块,支持供应商门户协同和多仓库调度,但是部署周期长、维护成本高,不适合中小企业使用8。以Softeon、Manhattan Associates为代表的仓储管理专业公司主要对仓储作业层的高效调度进行研究,通过波次优化、路径算法提高拣货和发货的速度,系统的建立重视流程的标准化和实时的数据采集9。随着移动互联网的兴起,一些开源的方案,例如Odoo可以提供轻量级的仓储模块,企业可以根据自身业务情况来配置,但是多角色权限体系以及订单协同功能需要二次开发才能满足复杂的环境10。国外的研究也重视仓储管理系统同采购平台、运输管理系统之间的数据对接,依靠API接口达成供应链全链条信息互通,削减人工干涉环节11。面向中小企业市场,以SaaS架构为基础的Skubana、ShipHero等平台集仓储、订单、渠道管理于一体,支持供应商和第三方物流双方在线协作,给跨企业仓储协作提供了一个范本12。

1.3 主要研究内容

  本课题设计并实现一个基于SSM框架的仓储管理系统,面向员工、供应商和系统管理员这三个角色,围绕商品信息、入库、出库、采购、盘点、订单发货和发货取消等主要业务模块来完成需求分析、系统架构设计、功能模块划分、数据库设计、系统实现和测试等工作,使用前后端分离模式以及Vue、Ssm、MySQL技术栈,创建包含数据录入、流程流转、状态追踪的闭环业务体系,努力解决多角色协作时信息断裂、操作断层的问题。

第二章 相关技术介绍

2.1 SSM框架

  SSM框架是Spring、Spring MVC与MyBatis三大开源框架的整合,该组合在Java企业级开发领域被广泛采用。Spring作为核心容器,通过控制反转与依赖注入机制管理对象生命周期,将业务层组件、数据访问层组件统一装配,降低了模块间的耦合度。Spring MVC基于前端控制器模式,DispatcherServlet拦截所有请求后根据处理器映射找到对应控制器,控制器执行业务逻辑后返回模型与视图,视图解析器完成页面渲染。MyBatis作为持久层框架,将SQL语句与Java代码分离,开发者通过XML文件或注解配置SQL映射,框架内部自动完成参数绑定与结果集到实体对象的转换。三者协作时,Spring负责整合Spring MVC与MyBatis,通过事务管理器控制数据操作边界,保证业务方法的原子性。本系统基于SSM框架构建,Controller层接收前端请求后调用Service层处理业务逻辑,Service层通过MyBatis接口访问数据库,框架的事务机制确保入库与出库操作中库存更新的数据一致性13。

2.2 Vue框架

  Vue框架是由尤雨溪在2014年发布的,它继承了AngularJS的一些设计理念,主要目的是视图层的响应式渲染。框架内部使用基于依赖追踪的响应式系统,每一个组件实例在初始化的时候会遍历data对象的属性,用Object.defineProperty把属性转换成getter和setter,当组件渲染函数执行时触及getter,当前正在执行的Watcher实例会被收集到依赖列表里,后续属性值变更触发setter时,依赖列表中的Watcher就会重新调度执行。在组件化开发模式下,每个.vue文件包含template、script、style三个部分,单文件组件通过vue-loader编译为JavaScript模块,template模板在编译阶段被解析为抽象语法树,随后转化为渲染函数。渲染函数执行的时候产生虚拟DOM节点,虚拟DOM树和上次渲染的结果比较,差异部分用patch算法更新到真实的DOM节点上。框架内置的指令系统包含条件渲染、列表渲染和事件绑定等场景,v-for指令遍历数组时会给每个列表项赋值唯一的key属性,key属性可以用来优化虚拟DOM的diff过程。组件之间数据传递采用单向数据流的方式,父组件使用props将数据传给子组件,子组件通过触发事件向父组件发送消息14。路由管理上,vue-router插件在URL改变的时候依照路由配置表找到对应组件,路由切换时包含组件异步加载以及生命周期钩子的执行顺序。

2.3 MySQL

  MySQL是由瑞典MySQL AB公司于1995年推出的一种采用客户端/服务器模式进行数据存储与检索的技术。数据库引擎层用插件式设计,InnoDB是默认的存储引擎,支持事务处理、行级锁定和外键约束,数据文件是以表空间的形式组织起来的,每个表空间里包含有数据页和索引页,页大小为16KB。查询处理阶段,连接器创建与客户端的安全连接并保持线程池,解析器对SQL语句做词法分析和语法分析产生语法树,优化器依照统计信息挑选索引或者全表扫描的执行计划,执行引擎调用存储引擎接口来执行数据的读写工作。事务执行时,Undo日志保存数据修改前的版本,用作回滚和多版本并发控制,Redo日志用循环写入的方式记录数据页的物理修改,保证系统崩溃后已经提交的事务修改可以恢复。索引结构采用B+树组织,非叶子节点存放索引键和指向子节点的指针,叶子节点有完整的记录或者主键值,当索引键值顺序插入时页面分裂操作保证树的平衡。复制功能用二进制日志来实现主从数据同步,主库把数据变更写入二进制日志文件,从库的I/O线程读取这些事件并写入中继日志,SQL线程再重放日志事件完成数据复制15。查询缓存机制只在某个版本里才起作用,它会把SELECT语句以及它的结果集存入查询缓存中,在数据表被更新之后,与该数据表相关的查询缓存条目就会立刻失效。

第三章 系统分析

3.1 可行性分析

3.1.1 技术可行性

  系统使用B/S架构,前端用Vue框架搭建用户界面,后端用SSM框架实现业务逻辑,数据层用MySQL数据库保存数据。Vue框架在前端开发中经过大量的项目验证,其组件化开发方式以及响应式数据绑定可以支持复杂的交互界面的创建。SSM框架整合了各个模块,自动配置机制降低了项目搭建的复杂程度,内置嵌入式容器使应用部署的过程更加简单。MySQL数据库具有事务支持以及并发控制的功能,使用InnoDB存储引擎可以保证数据操作的完整。开发人员在前期课程学习和项目实践过程中已经对Java语言以及Web开发有了一些了解,对SSM框架的核心原理和Vue组件的通信机制也有一定的认识,可以独立完成代码的编写和调试。系统运行时,如果有多用户同时提交数据操作请求,那么数据库连接池管理机制就会合理地分配资源,不会出现连接资源被耗尽的情况。用户输入的数据经过前后端两层校验之后再被存入数据库中,可以避免非法数据写入造成存储异常。因此该系统技术上是可以实现的16。

3.1.2 操作可行性

  系统目标用户为企业仓储管理人员、供应商业务人员和系统运维人员,三类用户都具有基本的计算机操作能力,在日常工作中已经习惯了通过浏览器访问各种业务系统来完成工作。系统页面布局按照功能模块分区的原则,导航菜单根据业务类型进行分类,用户登录之后可以在相应的模块区域找到需要的功能入口。员工日常操作路径包含商品维护、入库登记、出库登记、采购申请、盘点执行、发货处理等环节,系统把上述功能集中到同一个操作界面层级里,降低页面跳转次数。引入系统之后原来的手工填写单据、线下沟通确认的流程变成了线上录入和系统通知,业务数据流转效率提高。系统上线初期使用并行运行的方式,即原有的手工记录和系统的录入同时进行,直到用户熟悉了系统的使用方法之后才开始使用系统独立运行。之后维护工作由系统管理员来完成,功能的增加、数据的备份等都通过后台管理界面实现,不需要使用第三方技术。因此系统操作上是可以的。

3.1.3 经济可行性

  系统的开发主要是使用个人电脑,在开发阶段不需要使用专用的硬件设备。开发工具选IntelliJ IDEA社区版,属于免费软件,可以满足项目开发的需求。前端的Vue框架以及后端的SSM框架都是开源的,不需要支付授权费用。MySQL数据库有社区版供开发者免费使用。系统运行环境利用企业已有的服务器资源或者普通个人计算机,不需要额外购买服务器设备。系统上线之后可以取代原有的手工记账和线下沟通方式,减少由于人工录入造成的库存损失,降低电话沟通和纸质单据打印的成本。投入成本控制在较低水平,实施之后所带来业务效率的提高、资源节约的效果可以覆盖开发投入。因此系统在经济上是可行的。

3.2 功能需求分析

  UML用例图是描述系统功能需求的图形化工具,用例图通过显示系统与外部参与者之间的交互关系来说明系统的功能。用例图以用例来表示系统能完成的特定功能,参与者则是与系统交互的各类用户或者外部系统。用例图可以在分析和设计阶段使用,保证系统的功能完整、正确,让开发者和客户有共同的语言。用直观的图示,UML用例图给出了系统功能与角色间的关系。本文将按照角色模块对系统进行需求分析。

3.2.1 员工用户功能需求

  员工用户登录系统后可执行商品信息管理操作,包含商品新增、商品修改、商品查询与商品删除。入库信息管理模块支持入库单据录入、入库记录查询与入库单修改。出库信息管理模块允许员工登记出库记录、查询出库单历史、修改出库单状态。采购信息管理模块提供采购单生成、采购单追踪与采购单取消功能。盘点信息管理模块支持盘点任务创建、盘点数据录入与盘点结果审核。订单发货管理模块包含发货单生成、发货状态更新与发货单查询。发货取消管理模块支持发货取消申请提交与取消状态跟踪。员工角色用例图如图3-1所示。

  

图3-1员工用例图

3.2.2 供应商用户功能需求

  供应商用户登录系统后可执行商品信息管理操作,包括商品上架、商品信息更新与商品下架。入库信息管理模块支持入库预约登记、入库单查询与入库确认。出库信息管理模块允许供应商查询出库单、确认出库指令与更新出库状态。采购信息管理模块提供采购单接收、采购单确认与采购单反馈功能。盘点信息管理模块支持盘点通知查阅、盘点数据上报与盘点结果核对。订单发货管理模块包含发货单接收、发货执行与发货状态回传。发货取消管理模块支持取消发货申请发起与取消结果确认。供应商角色用例图如图3-2所示。

  

图3-2供应商用例图

3.2.3 系统管理员功能需求

  系统管理员登录系统后可执行用户管理操作,包含用户账号创建、角色分配、账号禁用与密码重置。商品信息管理模块支持商品分类维护、商品审核与商品上下架控制。入库信息管理模块允许管理员查看全库入库记录、审批入库单与入库异常处理。出库信息管理模块提供出库单审核、出库记录审计与出库异常干预。采购信息管理模块支持采购单审批、采购流程监控与采购异常处理。盘点信息管理模块包含盘点计划制定、盘点结果审核与盘点差异处理。订单发货管理模块允许管理员监控发货进度、处理发货异常与发货单复核。发货取消管理模块支持取消申请审批与取消执行监督。管理员角色用例图如图3-3所示。

图3-3管理员用例图

第四章 系统设计

4.1 系统架构设计

  系统采用模块化设计思想构建整体技术架构,前端基于Vue框架搭建用户交互界面,用户操作产生的请求通过Axios库以异步方式发送至后端服务17。后端采用SSM框架提供RESTful接口,接收请求后由Controller层完成参数解析与基础校验,Service层封装核心业务规则与数据流转逻辑。MySQL数据库承担数据持久化职责,存储商品信息、入库记录、出库记录、采购单据、盘点结果、订单发货记录及用户数据,数据库设计遵循第三范式以保障数据一致性。系统整体架构如图4-1所示。

  

图4-1系统架构图

4.2 系统结构功能设计

  系统围绕仓储管理核心业务构建功能体系,设置员工、供应商、系统管理员三类用户角色。员工角色可执行商品信息维护、入库登记、出库登记、采购申请、盘点操作、订单发货与发货取消操作。供应商角色具备商品信息管理、入库协同、出库协同、采购确认、盘点参与、订单发货执行与发货取消申请功能。系统管理员角色除涵盖员工与供应商的模块外,额外承担用户账号管理职责,负责用户权限分配与账号状态管控。该系统功能结构如图4-2所示。

图4-2系统功能结构图

4.3 系统流程设计

4.3.1 总体业务流程图设计

  系统总体业务流程从用户登录开始,系统根据用户角色分配操作权限。员工角色完成商品信息维护后开展入库登记,入库单据经审核后更新库存数量。库存变动触发采购预警或出库需求,采购申请提交后由供应商接收并确认,供应商完成发货执行后系统生成发货记录。管理员对入库、出库、采购、盘点、发货取消等关键单据进行审核,审核通过后相关业务状态同步更新。盘点任务执行后录入盘点数据,系统自动计算盘点差异并生成差异报告。总体业务流程如图4-3所示。

  

图4-3系统总体业务流程图

4.3.2 入库管理流程设计

  员工登录系统后进入入库管理模块,选择商品后填写入库数量与入库备注。系统校验商品是否存在,校验通过后生成入库单据并提交审核。管理员对入库单进行审核,审核通过后系统自动更新对应商品的库存数量。审核不通过时入库单退回员工,员工可修改后重新提交。入库管理流程如图4-4所示。

  

图4-4入库管理流程图

4.3.3 出库管理流程设计

  员工发起出库操作时选择商品并填写出库数量,系统读取当前库存数据。库存数量充足时生成出库单据进入审核环节,库存不足时系统提示库存不足并拒绝出库。管理员审核出库单,审核通过后系统扣减库存数量,审核不通过时出库单退回员工。出库管理流程如图4-5所示。

  

图4-5出库管理流程图

4.3.4 采购管理流程设计

  员工根据库存预警或业务需求发起采购申请,填写采购商品、采购数量与采购缘由。采购申请提交后进入审核队列,管理员审核采购单内容。审核通过后采购需求推送至对应供应商,供应商确认采购信息后安排供货。审核不通过时采购单退回员工修改。采购管理流程如图4-6所示。

  

图4-6采购管理流程图

4.3.5 盘点管理流程设计

  管理员制定盘点计划并发布盘点任务,员工接收任务后执行现场盘点。员工录入盘点数量后系统自动对比账面库存与盘点数量,生成盘点差异记录。差异记录提交管理员审核,管理员确认差异后系统更新库存数据,盘点任务完成。盘点管理流程如图4-7所示。

  

图4-7盘点管理流程图

4.4 数据库设计

  数据库设计遵循关系型模型理论,通过实体关系映射方式将业务对象转化为数据表结构。规范化原则在表结构设计过程中得到贯彻,通过消除数据冗余与确保函数依赖关系保障数据一致性18。本系统采用MySQL数据库作为数据存储载体,各业务表之间通过外键约束维护参照完整性,事务机制保证数据操作的原子性。商品信息、入库记录、出库记录、采购单据、盘点结果、订单发货、发货取消、员工信息、供应商信息、用户账户等核心业务表构成系统数据层基础。

4.4.1 E-R图设计

  E-R图(实体关系图)是一种用来做数据建模的图形化工具,描述实体、属性以及实体之间的关系。以图示的形式来辅助数据库结构的分析与设计,清楚地表明数据间的相互联系,利于后续的数据库开发及管理工作。下面给出系统全局E-R图以及各个实体的属性图**19**。

  商品信息实体主要包括商品编号、商品名称、商品类型、库存数量等属性。商品信息实体属性图如图4-8所示。

  

图4-8商品信息实体属性图

  入库信息实体主要包括商品编号、入库数量、入库时间、审核状态等属性。入库信息实体属性图如图4-9所示。

  

图4-9入库信息实体属性图

  出库信息实体主要包括商品编号、出库数量、出库时间、审核状态等属性。出库信息实体属性图如图4-10所示。

  

图4-10出库信息实体属性图

  采购信息实体主要包括商品编号、采购数量、采购缘由、审核状态等属性。采购信息实体属性图如图4-11所示。

  

图4-11采购信息实体属性图

  盘点信息实体主要包括商品编号、盘点数量、盘点时间、盘点差异等属性。盘点信息实体属性图如图4-12所示。

  

图4-12盘点信息实体属性图

  订单发货实体主要包括商品编号、发货数量、收货地址、审核状态等属性。订单发货实体属性图如图4-13所示。

  

图4-13订单发货实体属性图

  发货取消实体主要包括商品编号、取消缘由、取消时间、审核状态等属性。发货取消实体属性图如图4-14所示。

  

图4-14发货取消实体属性图

  员工用户实体主要包括员工姓名、员工电话、用户标识等属性。员工用户实体属性图如图4-15所示。

  

图4-15员工用户实体属性图

  供应商用户实体主要包括供应商名称、供应商公司、联系电话等属性。供应商用户实体属性图如图4-16所示。

  

图4-16供应商用户实体属性图

  用户账户实体主要包括用户名、密码、用户组、账户状态等属性。用户账户实体属性图如图4-17所示。

  

图4-17用户账户实体属性图

  系统E-R图如图4-18所示。

   图4-18系统E-R图

4.4.2 数据库表设计

  数据库表设计就是根据业务需求来确定数据库表的结构、字段类型和关系。通过规范化的设计,保证数据的完整性、一致性、效率,避免冗余的数据,为后续的数据查询、存储、维护提供清晰的结构。以下是系统的数据库表设计展示。

  商品信息表主要是用来存储仓库中所有商品的基础信息。主要包括商品编号、商品名称、商品类型、库存数量等字段。如表4-1所示。

表4-1商品信息表

序号 字段名 类型 长度 是否非空 是否主键 备注
1 商品信息id int 11 是 是 商品信息ID
2 商品编号 varchar 50 否 否 商品编号
3 商品名称 varchar 100 否 否 商品名称
4 商品类型 varchar 50 否 否 商品类型
5 库存数量 double - 否 否 库存数量
6 创建用户 int 11 是 否 创建用户ID
7 创建时间 datetime - 是 否 创建时间
8 更新时间 timestamp - 是 否 更新时间
9 供应商用户 int 11 否 否 供应商用户

  入库信息表主要是用来记录商品入库作业的详细单据信息。主要包括商品编号、入库数量、入库时间、审核状态等字段。如表4-2所示。

表4-2入库信息表

序号 字段名 类型 长度 是否非空 是否主键 备注
1 入库信息id int 11 是 是 入库信息ID
2 商品编号 varchar 50 否 否 商品编号
3 入库数量 double - 否 否 入库数量
4 入库时间 datetime - 否 否 入库时间
5 入库备注 text 255 否 否 入库备注
6 审核状态 varchar 16 是 否 审核状态
7 创建用户 int 11 是 否 创建用户ID
8 创建时间 datetime - 是 否 创建时间
9 更新时间 timestamp - 是 否 更新时间
10 供应商用户 int 11 否 否 供应商用户

  出库信息表主要是用来记录商品出库作业的详细单据信息。主要包括商品编号、出库数量、出库时间、审核状态等字段。如表4-3所示。

表4-3出库信息表

序号 字段名 类型 长度 是否非空 是否主键 备注
1 出库信息id int 11 是 是 出库信息ID
2 商品编号 varchar 50 否 否 商品编号
3 出库数量 double - 否 否 出库数量
4 出库时间 datetime - 否 否 出库时间
5 出库备注 text 255 否 否 出库备注
6 审核状态 varchar 16 是 否 审核状态
7 创建用户 int 11 是 否 创建用户ID
8 创建时间 datetime - 是 否 创建时间
9 更新时间 timestamp - 是 否 更新时间
10 供应商用户 int 11 否 否 供应商用户

  采购信息表主要是用来记录采购申请与采购执行过程。主要包括商品编号、采购数量、采购时间、审核状态等字段。如表4-4所示。

表4-4采购信息表

序号 字段名 类型 长度 是否非空 是否主键 备注
1 采购信息id int 11 是 是 采购信息ID
2 商品编号 varchar 50 否 否 商品编号
3 采购数量 double - 否 否 采购数量
4 采购时间 datetime - 否 否 采购时间
5 采购缘由 varchar 100 否 否 采购缘由
6 采购备注 text 255 否 否 采购备注
7 审核状态 varchar 16 是 否 审核状态
8 创建用户 int 11 是 否 创建用户ID
9 创建时间 datetime - 是 否 创建时间
10 更新时间 timestamp - 是 否 更新时间
11 供应商用户 int 11 否 否 供应商用户

  盘点信息表主要是用来记录库存盘点作业的执行结果。主要包括商品编号、盘点数量、盘点时间、盘点差异等字段。如表4-5所示。

表4-5盘点信息表

序号 字段名 类型 长度 是否非空 是否主键 备注
1 盘点信息id int 11 是 是 盘点信息ID
2 商品编号 varchar 50 否 否 商品编号
3 盘点数量 double - 否 否 盘点数量
4 盘点时间 datetime - 否 否 盘点时间
5 盘点差异 varchar 50 否 否 盘点差异
6 盘点备注 text 255 否 否 差异备注
7 审核状态 varchar 16 是 否 审核状态
8 创建用户 int 11 是 否 创建用户ID
9 创建时间 datetime - 是 否 创建时间
10 更新时间 timestamp - 是 否 更新时间
11 操作用户 int 11 否 否 操作用户
12 供应商用户 int 11 否 否 供应商用户

  订单发货表主要是用来记录订单商品的发货执行明细。主要包括商品编号、发货数量、发货时间、审核状态等字段。如表4-6所示。

表4-6订单发货表

序号 字段名 类型 长度 是否非空 是否主键 备注
1 订单发货id int 11 是 是 订单发货ID
2 商品编号 varchar 50 否 否 商品编号
3 发货数量 double - 否 否 发货数量
4 发货时间 datetime - 否 否 发货时间
5 收货姓名 varchar 50 否 否 收货姓名
6 收货地址 text 255 否 否 收货地址
7 发货备注 text 255 否 否 发货备注
8 审核状态 varchar 16 是 否 审核状态
9 创建用户 int 11 是 否 创建用户ID
10 创建时间 datetime - 是 否 创建时间
11 更新时间 timestamp - 是 否 更新时间
12 供应商用户 int 11 否 否 供应商用户

  发货取消表主要是用来记录订单发货取消的申请与审批过程。主要包括商品编号、取消缘由、取消时间、审核状态等字段。如表4-7所示。

表4-7发货取消表

序号 字段名 类型 长度 是否非空 是否主键 备注
1 发货取消id int 11 是 是 发货取消ID
2 商品编号 varchar 50 否 否 商品编号
3 取消缘由 varchar 100 否 否 取消缘由
4 取消时间 datetime - 否 否 取消时间
5 取消备注 text 255 否 否 取消备注
6 审核状态 varchar 16 是 否 审核状态
7 创建用户 int 11 是 否 创建用户ID
8 创建时间 datetime - 是 否 创建时间
9 更新时间 timestamp - 是 否 更新时间
10 供应商用户 int 11 否 否 供应商用户

  员工用户表主要是用来存储企业内部员工的个人信息。主要包括员工姓名、员工电话、用户标识等字段。如表4-8所示。

表4-8员工用户表

序号 字段名 类型 长度 是否非空 是否主键 备注
1 员工用户id int 11 是 是 员工用户ID
2 员工姓名 varchar 50 否 否 员工姓名
3 员工性别 varchar 2 否 否 员工性别
4 员工电话 varchar 20 否 否 员工电话
5 审核状态 varchar 16 是 否 审核状态
6 创建时间 datetime - 是 否 创建时间
7 更新时间 timestamp - 是 否 更新时间
8 用户标识 int 11 是 否 用户ID

  供应商用户表主要是用来存储供应商企业及其联系人的基本信息。主要包括供应商姓名、供应商公司、联系电话等字段。如表4-9所示。

表4-9供应商用户表

序号 字段名 类型 长度 是否非空 是否主键 备注
1 供应商用户id int 11 是 是 供应商用户ID
2 供应商姓名 varchar 50 否 否 供应商姓名
3 供应商公司 varchar 100 否 否 供应商公司
4 联系电话 varchar 20 否 否 供应商电话
5 审核状态 varchar 16 是 否 审核状态
6 创建时间 datetime - 是 否 创建时间
7 更新时间 timestamp - 是 否 更新时间
8 用户标识 int 11 是 否 用户ID

  用户账户表主要是用来存储系统用户的登录凭证与账户状态信息。主要包括用户名、密码、用户组、账户状态等字段。如表4-10所示。

表4-10用户账户表

序号 字段名 类型 长度 是否非空 是否主键 备注
1 用户标识 int 11 是 是 用户ID
2 用户名 varchar 30 是 否 用户名
3 密码 varchar 64 是 否 密码
4 用户组 varchar 32 否 否 所在用户组
5 账户状态 smallint 6 是 否 账户状态
6 创建时间 timestamp - 是 否 创建时间
7 上次登录时间 timestamp - 否 否 上次登录时间
8 头像地址 varchar 255 否 否 头像地址
9 邮箱 varchar 50 否 否 邮箱
10 手机号码 varchar 20 否 否 手机号码

第五章 系统实现

5.1 员工用户功能实现

5.1.1 商品信息管理功能实现

  员工用户通过CommodityInformationController类执行商品信息管理操作。add方法接收前端提交的商品数据,经过非空字段过滤后构造CommodityInformation实体对象,调用addEntity方法完成数据持久化。该方法在商品信息新增成功后输出日志记录操作结果。商品信息管理界面如图5-1所示。

   图5-1商品信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

  paramMap.entrySet().removeIf(entry -> {

  Object value =entry.getValue();

  return valueinstanceofString && ((String) value).isEmpty();

  });

复制代码
CommodityInformationcommodity_information= newCommodityInformation();

commodity_information.setProduct_number(paramMap.get("product_number")==null?null:String.valueOf(paramMap.get("product_number")));

this.addEntity(commodity_information);

  returnsuccess(1);

  }

5.1.2 入库信息管理功能实现

  员工用户通过InboundInformationController类执行入库登记操作。add方法解析请求体中的入库单据数据,剔除空值字段后构建InboundInformation实体对象。新增成功后执行SQL语句更新商品库存,将入库数量累加到对应商品的库存字段中。入库信息管理界面如图5-2所示。

   图5-2入库信息管理界面

5.1.3 核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
InboundInformationinbound_information= newInboundInformation();

inbound_information.setProduct_number(paramMap.get("product_number")==null?null:String.valueOf(paramMap.get("product_number")));

this.addEntity(inbound_information);

Stringsql= "SELECTMAX(inbound_information_id) AS max FROMinbound_information";

  Integer max =service.selectBaseCount(sql);

  sql= "UPDATEcommodity_informationSETinventory_quantity=inventory_quantity+inbound_information.receipt_quantityWHEREinbound_information_id="+max;

  service.updateBaseSql(sql);

  returnsuccess(1);

  }

5.1.4 出库信息管理功能实现

  员工用户通过OutboundInformationController类执行出库登记操作。add方法接收出库单据数据,构建实体对象后先获取新增记录主键。执行库存充足性校验,若出库数量超过库存量则删除本次出库记录并返回错误提示,校验通过后更新商品库存扣减出库数量。出库信息管理界面如图5-3所示。

   图5-3出库信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
OutboundInformationoutbound_information= newOutboundInformation();

this.addEntity(outbound_information);

Stringsql= "SELECTMAX(outbound_information_id) AS max FROMoutbound_information";

  Integer max =service.selectBaseCount(sql);

  Integer count =service.selectBaseCount(sql);

  if(count>0){

复制代码
sql= "delete fromoutbound_informationWHEREoutbound_information_id="+max;

service.deleteBaseSql(sql);

return error(30000,"库存不足!");

  }

  service.updateBaseSql(sql);

  returnsuccess(1);

  }

5.1.5 采购信息管理功能实现

  员工用户通过PurchasingInformationController类执行采购申请操作。add方法解析前端提交的采购数据,构建PurchasingInformation实体对象后调用addEntity完成采购单新增。新增成功后输出日志记录采购信息创建情况。采购信息管理界面如图5-4所示。

   图5-4采购信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

  paramMap.entrySet().removeIf(entry -> {

  Object value =entry.getValue();

  return valueinstanceofString && ((String) value).isEmpty();

  });

复制代码
PurchasingInformationpurchasing_information= newPurchasingInformation();

purchasing_information.setProduct_number(paramMap.get("product_number")==null?null:String.valueOf(paramMap.get("product_number")));

this.addEntity(purchasing_information);

System.out.println("采购信息新增成功");

  returnsuccess(1);

  }

5.1.6 盘点信息管理功能实现

  员工用户通过CountingInformationController类执行盘点数据录入操作。add方法接收盘点记录数据,构建CountingInformation实体对象,处理盘点时间字段的格式转换后完成数据持久化。新增成功后输出操作日志。盘点信息管理界面如图5-5所示。

   图5-5盘点信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
CountingInformationcounting_information= newCountingInformation();

if (paramMap.get("counting_time") != null &amp;&amp; !StringUtils.isEmpty(String.valueOf(paramMap.get("counting_time")))) {

StringtimStr=String.valueOf(paramMap.get("counting_time"));

counting_information.setCounting_time(parseToTimestamp(timStr));

  }

  this.addEntity(counting_information);

  System.out.println("盘点信息新增成功");

  returnsuccess(1);

  }

5.1.7 订单发货管理功能实现

  员工用户通过OrderShipmentController类执行订单发货操作。add方法解析发货数据构建OrderShipment实体,处理发货时间字段后调用addEntity完成发货单新增。新增成功后输出发货记录创建日志。订单发货管理界面如图5-6所示。

   图5-6订单发货管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
OrderShipmentorder_shipment= newOrderShipment();

if (paramMap.get("delivery_time") != null &amp;&amp; !StringUtils.isEmpty(String.valueOf(paramMap.get("delivery_time")))) {

StringtimStr=String.valueOf(paramMap.get("delivery_time"));

order_shipment.setDelivery_time(parseToTimestamp(timStr));

  }

  this.addEntity(order_shipment);

  System.out.println("订单发货新增成功");

  returnsuccess(1);

  }

5.1.8 发货取消管理功能实现

  员工用户通过ShipmentCancelledController类执行发货取消申请操作。add方法接收取消申请数据,构建ShipmentCancelled实体对象,处理取消时间字段后调用addEntity完成取消记录新增。发货取消管理界面如图5-7所示。

   图5-7发货取消管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
ShipmentCancelledshipment_cancelled= newShipmentCancelled();

if (paramMap.get("cancellation_time") != null &amp;&amp; !StringUtils.isEmpty(String.valueOf(paramMap.get("cancellation_time")))) {

StringtimStr=String.valueOf(paramMap.get("cancellation_time"));

shipment_cancelled.setCancellation_time(parseToTimestamp(timStr));

  }

  this.addEntity(shipment_cancelled);

  System.out.println("发货取消新增成功");

  returnsuccess(1);

  }

5.2 供应商用户功能实现

5.2.1 商品信息管理功能实现

  供应商用户通过CommodityInformationController类执行商品信息维护操作。add方法接收商品上架数据,经过字段清洗后构建CommodityInformation实体对象,调用addEntity完成商品信息入库。供应商商品信息管理界面如图5-8所示。

   图5-8供应商商品信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

  paramMap.entrySet().removeIf(entry -> {

  Object value =entry.getValue();

  return valueinstanceofString && ((String) value).isEmpty();

  });

复制代码
CommodityInformationcommodity_information= newCommodityInformation();

commodity_information.setProduct_number(paramMap.get("product_number")==null?null:String.valueOf(paramMap.get("product_number")));

this.addEntity(commodity_information);

  returnsuccess(1);

  }

5.2.2 入库信息管理功能实现

  供应商用户通过InboundInformationController类执行入库预约操作。add方法解析入库预约数据,构建InboundInformation实体对象,完成入库预约记录新增后自动更新对应商品的库存数量。供应商入库信息管理界面如图5-9所示。

   图5-9供应商入库信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
InboundInformationinbound_information= newInboundInformation();

inbound_information.setProduct_number(paramMap.get("product_number")==null?null:String.valueOf(paramMap.get("product_number")));

this.addEntity(inbound_information);

Stringsql= "UPDATEcommodity_informationSETinventory_quantity=inventory_quantity+inbound_information.receipt_quantity";

service.updateBaseSql(sql);

  returnsuccess(1);

  }

5.2.3 出库信息管理功能实现

  供应商用户通过OutboundInformationController类执行出库确认操作。add方法接收出库指令数据,构建OutboundInformation实体后执行库存校验,出库数量不超过库存量时更新商品库存完成扣减。供应商出库信息管理界面如图5-10所示。

   图5-10供应商出库信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

  OutboundInformationoutbound_information= newOutboundInformation();

  this.addEntity(outbound_information);

  Integer count =service.selectBaseCount(sql);

  if(count>0){

  service.deleteBaseSql(sql);

  return error(30000,"库存不足!");

  }

  service.updateBaseSql(sql);

  returnsuccess(1);

  }

5.2.4 采购信息管理功能实现

  供应商用户通过PurchasingInformationController类执行采购单接收与确认操作。add方法解析采购单数据,构建PurchasingInformation实体对象,完成采购单记录新增后输出采购信息创建日志。供应商采购信息管理界面如图5-11所示。

   图5-11供应商采购信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
PurchasingInformationpurchasing_information= newPurchasingInformation();

purchasing_information.setProduct_number(paramMap.get("product_number")==null?null:String.valueOf(paramMap.get("product_number")));

this.addEntity(purchasing_information);

System.out.println("采购信息新增成功");

  returnsuccess(1);

  }

5.2.5 盘点信息管理功能实现

  供应商用户通过CountingInformationController类执行盘点数据上报操作。add方法接收盘点上报数据,构建CountingInformation实体对象,处理盘点时间字段后完成盘点记录入库。供应商盘点信息管理界面如图5-12所示。

   图5-12供应商盘点信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
CountingInformationcounting_information= newCountingInformation();

if (paramMap.get("counting_time") != null &amp;&amp; !StringUtils.isEmpty(String.valueOf(paramMap.get("counting_time")))) {

StringtimStr=String.valueOf(paramMap.get("counting_time"));

counting_information.setCounting_time(parseToTimestamp(timStr));

  }

  this.addEntity(counting_information);

  System.out.println("盘点信息新增成功");

  returnsuccess(1);

  }

5.2.6 订单发货管理功能实现

  供应商用户通过OrderShipmentController类执行发货执行操作。add方法接收发货单数据,构建OrderShipment实体对象,处理发货时间字段后完成发货记录新增。供应商订单发货管理界面如图5-13所示。

   图5-13供应商订单发货管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
OrderShipmentorder_shipment= newOrderShipment();

if (paramMap.get("delivery_time") != null &amp;&amp; !StringUtils.isEmpty(String.valueOf(paramMap.get("delivery_time")))) {

StringtimStr=String.valueOf(paramMap.get("delivery_time"));

order_shipment.setDelivery_time(parseToTimestamp(timStr));

  }

  this.addEntity(order_shipment);

  System.out.println("订单发货新增成功");

  returnsuccess(1);

  }

5.2.7 发货取消管理功能实现

  供应商用户通过ShipmentCancelledController类执行取消发货申请操作。add方法接收取消申请数据,构建ShipmentCancelled实体对象,处理取消时间字段后完成取消记录新增。供应商发货取消管理界面如图5-14所示。

   图5-14供应商发货取消管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
ShipmentCancelledshipment_cancelled= newShipmentCancelled();

if (paramMap.get("cancellation_time") != null &amp;&amp; !StringUtils.isEmpty(String.valueOf(paramMap.get("cancellation_time")))) {

StringtimStr=String.valueOf(paramMap.get("cancellation_time"));

shipment_cancelled.setCancellation_time(parseToTimestamp(timStr));

  }

  this.addEntity(shipment_cancelled);

  System.out.println("发货取消新增成功");

  returnsuccess(1);

  }

5.3 系统管理员功能实现

5.3.1 用户管理功能实现

  管理员通过UserController类执行用户账号管理操作。add方法接收用户注册数据,处理头像路径中的本地地址转换后调用insert方法完成用户账号创建。管理员用户管理界面如图5-15所示。

   图5-15管理员用户管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object> map =service.readBody(request.getReader());

复制代码
if (map.containsKey("avatar") &amp;&amp;map.get("avatar") != null) {

String avatar =String.valueOf(map.get("avatar"));

if (avatar.contains("localhost")) {

avatar =avatar.replace("http://localhost:5000", "");

map.put("avatar", avatar);

  }

  }

  service.insert(map);

  returnsuccess(1);

  }

5.3.2 商品信息管理功能实现

  管理员通过CommodityInformationController类执行商品信息审核与管理操作。add方法接收商品数据构建实体对象,调用addEntity完成商品信息入库。管理员商品信息管理界面如图5-16所示。

   图5-16管理员商品信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

  paramMap.entrySet().removeIf(entry -> {

  Object value =entry.getValue();

  return valueinstanceofString && ((String) value).isEmpty();

  });

复制代码
CommodityInformationcommodity_information= newCommodityInformation();

commodity_information.setProduct_number(paramMap.get("product_number")==null?null:String.valueOf(paramMap.get("product_number")));

this.addEntity(commodity_information);

  returnsuccess(1);

  }

5.3.3 入库信息管理功能实现

  管理员通过InboundInformationController类执行入库单据审批操作。add方法接收入库数据构建实体对象,调用addEntity完成入库记录新增,同时更新商品库存。updateExamineState方法用于修改入库单的审核状态。管理员入库信息管理界面如图5-17所示。

   图5-17管理员入库信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
InboundInformationinbound_information= newInboundInformation();

this.addEntity(inbound_information);

service.updateBaseSql(sql);

  returnsuccess(1);

  }

  public StringupdateExamineState(Long id, StringnewState) {

  Map<String,String>queryMap= new HashMap<>();

复制代码
queryMap.put("id",String.valueOf(id));

InboundInformationinbound_information=service.findOne(queryMap);

inbound_information.setExamine_state(newState);

this.setEntity(queryMap,newHashMap&lt;&gt;(),inbound_information);

return "审核成功";

  }

5.3.4 出库信息管理功能实现

  管理员通过OutboundInformationController类执行出库单据审核操作。add方法接收出库数据,完成出库记录新增与库存更新,updateExamineState方法处理出库单审核状态变更。管理员出库信息管理界面如图5-18所示。

   图5-18管理员出库信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

复制代码
OutboundInformationoutbound_information= newOutboundInformation();

this.addEntity(outbound_information);

service.updateBaseSql(sql);

  returnsuccess(1);

  }

  public StringupdateExamineState(Long id, StringnewState) {

  Map<String,String>queryMap= new HashMap<>();

复制代码
queryMap.put("id",String.valueOf(id));

OutboundInformationoutbound_information=service.findOne(queryMap);

outbound_information.setExamine_state(newState);

this.setEntity(queryMap,newHashMap&lt;&gt;(),outbound_information);

return "审核成功";

  }

5.3.5 采购信息管理功能实现

  管理员通过PurchasingInformationController类执行采购单据审批操作。add方法接收采购数据完成采购记录新增,updateExamineState方法处理采购单审核状态的流转。管理员采购信息管理界面如图5-19所示。

   图5-19管理员采购信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

  PurchasingInformationpurchasing_information= newPurchasingInformation();

  this.addEntity(purchasing_information);

  returnsuccess(1);

  }

  public StringupdateExamineState(Long id, StringnewState) {

  Map<String,String>queryMap= new HashMap<>();

复制代码
queryMap.put("id",String.valueOf(id));

PurchasingInformationpurchasing_information=service.findOne(queryMap);

purchasing_information.setExamine_state(newState);

this.setEntity(queryMap,newHashMap&lt;&gt;(),purchasing_information);

return "审核成功";

  }

5.3.6 盘点信息管理功能实现

  管理员通过CountingInformationController类执行盘点结果审核操作。add方法接收盘点数据完成盘点记录新增,updateExamineState方法处理盘点记录的审核状态变更。管理员盘点信息管理界面如图5-20所示。

   图5-20管理员盘点信息管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

  CountingInformationcounting_information= newCountingInformation();

  this.addEntity(counting_information);

  returnsuccess(1);

  }

  public StringupdateExamineState(Long id, StringnewState) {

  Map<String,String>queryMap= new HashMap<>();

复制代码
queryMap.put("id",String.valueOf(id));

CountingInformationcounting_information=service.findOne(queryMap);

counting_information.setExamine_state(newState);

this.setEntity(queryMap,newHashMap&lt;&gt;(),counting_information);

return "审核成功";

  }

5.3.7 订单发货管理功能实现

  管理员通过OrderShipmentController类执行发货单审批操作。add方法接收发货数据完成发货记录新增,updateExamineState方法处理发货单的审核状态变更。管理员订单发货管理界面如图5-21所示。

   图5-21管理员订单发货管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

  OrderShipmentorder_shipment= newOrderShipment();

  this.addEntity(order_shipment);

  returnsuccess(1);

  }

  public StringupdateExamineState(Long id, StringnewState) {

  Map<String,String>queryMap= new HashMap<>();

复制代码
queryMap.put("id",String.valueOf(id));

OrderShipmentorder_shipment=service.findOne(queryMap);

order_shipment.setExamine_state(newState);

this.setEntity(queryMap,newHashMap&lt;&gt;(),order_shipment);

return "审核成功";

  }

5.3.8 发货取消管理功能实现

  管理员通过ShipmentCancelledController类执行取消申请审批操作。add方法接收取消申请数据完成取消记录新增,updateExamineState方法处理取消申请的审批状态。管理员发货取消管理界面如图5-22所示。

   图5-22管理员发货取消管理界面

  核心代码实现如下:

  public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

  ShipmentCancelledshipment_cancelled= newShipmentCancelled();

  this.addEntity(shipment_cancelled);

  returnsuccess(1);

  }

  public StringupdateExamineState(Long id, StringnewState) {

  Map<String,String>queryMap= new HashMap<>();

复制代码
queryMap.put("id",String.valueOf(id));

ShipmentCancelledshipment_cancelled=service.findOne(queryMap);

shipment_cancelled.setExamine_state(newState);

this.setEntity(queryMap,newHashMap&lt;&gt;(),shipment_cancelled);

return "审核成功";

  }

第六章 系统测试

6.1 测试目的

  系统测试主要是对仓储管理系统进行功能测试和性能测试,看其是否符合设计要求。通过执行测试用例来发现系统设计中出现的逻辑缺陷以及编码阶段存在的错误,检验各个功能模块对于不同的输入条件所作出的响应是否符合预期。测试对象为员工、供应商、管理员这三个用户的角色操作路径,主要测试的是商品信息管理、出入库登记、采购申请、盘点执行、订单发货等业务流程的完整性。测试结果将会成为系统修改的依据,在交付之前去除掉出现的问题,保证系统的各个角色并发操作不会出现问题20。

6.2 测试方法

  系统测试用黑盒测试和白盒测试相结合的方法。黑盒测试主要是检验功能是否正确,根据需求文档设计测试用例,对正常业务流程和异常情况都进行检验,包括表单校验、数据边界值验证、权限隔离检测等。白盒测试是对关键业务逻辑进行代码级别的测试,主要是对入库更新库存、出库库存校验、审核状态流转等核心算法的执行路径进行测试。测试过程在本地开发环境里执行,用Postman模拟接口请求,结合前端界面的操作来进行交互验证,把预期输出和实际输出加以对比来判定功能实现是否符合要求。

6.3 测试内容

  商品信息管理模块测试旨在验证商品基础数据维护功能的正确性,确保商品编号、名称、类型等核心属性能够被准确记录与更新,检查库存数量字段在入库、出库操作后的同步一致性。商品信息管理测试如表6-1所示。

表6-1商品信息管理测试用例表

测试内容 测试步骤 预期结果 实际结果
商品新增 提交商品信息 系统成功保存记录 符合预期
商品修改 更新商品字段 数据库对应字段变更 符合预期
商品查询 按条件检索 返回匹配记录列表 符合预期
商品删除 执行删除操作 记录状态变更 符合预期

  入库信息管理模块测试聚焦入库单据处理流程,验证入库数量录入后系统能够准确更新对应商品的库存数量,检查入库时间记录与审核状态流转的完整性,确保入库操作与库存数据保持实时联动。入库信息管理测试如表6-2所示。

表6-2入库信息管理测试用例表

测试内容 测试步骤 预期结果 实际结果
入库登记 填写入库单据 生成入库记录 符合预期
库存更新 入库单审核通过 商品库存累加入库量 符合预期
入库查询 按时间范围检索 返回入库历史 符合预期
入库修改 编辑入库备注 备注信息更新 符合预期

  出库信息管理模块测试检验出库操作对库存扣减的准确性,验证系统在出库数量超出库存时能够做出正确拦截,检查出库单据审核流程中库存状态变更的同步机制。出库信息管理测试如表6-3所示。

表6-3出库信息管理测试用例表

测试内容 测试步骤 预期结果 实际结果
出库登记 提交出库单据 生成出库记录 符合预期
库存扣减 出库单审核通过 商品库存扣除出库量 符合预期
库存校验 出库量大于库存 系统拒绝并提示 符合预期
出库查询 按商品检索 返回出库明细 符合预期

  采购信息管理模块测试验证采购申请从提交到确认的完整流程,检查采购数量、采购缘由等字段的记录完整性,测试采购单审核通过后与供应商角色的业务衔接机制。采购信息管理测试如表6-4所示。

表6-4采购信息管理测试用例表

测试内容 测试步骤 预期结果 实际结果
采购申请 填写采购需求 生成采购单据 符合预期
采购审核 管理员审批 单据状态更新 符合预期
供应商接收 采购单推送 供应商可见采购需求 符合预期
采购确认 供应商确认 采购流程推进 符合预期

  盘点信息管理模块测试检验盘点数据录入与差异计算功能,验证系统能够对比账面库存与盘点数量生成差异记录,检查盘点结果审核后库存数据的修正机制。盘点信息管理测试如表6-5所示。

表6-5盘点信息管理测试用例表

测试内容 测试步骤 预期结果 实际结果
盘点录入 填写盘点数量 生成盘点记录 符合预期
差异计算 对比账面库存 生成盘点差异 符合预期
差异审核 管理员确认 差异状态更新 符合预期
库存修正 审核通过后 库存数据同步调整 符合预期

  订单发货管理模块测试验证发货单生成与执行流程,检查发货数量、收货地址等信息的记录准确性,测试发货状态更新后与供应商发货执行的业务协同。订单发货管理测试如表6-6所示。

表6-6订单发货管理测试用例表

测试内容 测试步骤 预期结果 实际结果
发货申请 填写发货信息 生成发货单据 符合预期
发货审核 管理员审批 单据状态变更 符合预期
发货执行 供应商操作 发货状态更新 符合预期
发货查询 按订单检索 返回发货明细 符合预期

  发货取消管理模块测试验证取消申请的处理流程,检查取消缘由记录与取消时间字段的完整性,测试取消申请审批通过后与发货记录的联动取消机制。发货取消管理测试如表6-7所示。

表6-7发货取消管理测试用例表

测试内容 测试步骤 预期结果 实际结果
取消申请 提交取消请求 生成取消记录 符合预期
取消审核 管理员审批 申请状态更新 符合预期
发货状态 审核通过后 发货单状态变更 符合预期
取消查询 按条件检索 返回取消明细 符合预期

测试结论

  系统测试主要针对商品信息管理、入库信息管理、出库信息管理、采购信息管理、盘点信息管理、订单发货管理、发货取消管理这七个主要的功能模块进行测试。各个模块测试用例执行完毕后,得到的结果和期望的结果完全相同。商品信息新增、修改、查询、删除操作的记录是准确的。入库信息登记之后库存数量就会同步累加。当出库信息登记出现库存不足的时候,就会被拦截。采购申请提交、审核、供应商确认全部完成。盘点数据录入之后差异计算正确。订单发货生成、审核、执行各个过程的流转情况均无误。发货取消申请审批之后,发货单的状态会自动更新。所有检验的测试项目均合格。

👇精彩专栏 推荐订阅👇

深耕多年的2000+套Java项目,附带数据库

深耕多年的800+套Python项目,附带数据库

深耕多年的500+套小程序/app项目,附带数据库

精选100个热门Java毕业设计项目|适配2026‑2027届选题参考✅

精选100个热门Python毕业设计项目|适配2026‑2027届选题参考✅

精选100个热门微信小程序/安卓APP毕业设计项目|适配2026‑2027届选题参考✅

✅获取源码请私信✅

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️

相关推荐
工具派1 小时前
Agent 不是玄学:用 Java 状态机思维理解 LangGraph
java·人工智能·python
青企通1 小时前
弱网环境下小程序首屏性能优化:从 5.2 秒到 1.4 秒的完整实践
性能优化·小程序
溪语流沙1 小时前
【Web全栈进阶】前端世界观:现代工具链与框架为什么存在
前端·javascript·vue.js
PC2005-cloud1 小时前
MySQL学习笔记:GTID 主从复制,从原理到实践,告别传统 Binlog+Position 的痛点
笔记·学习·mysql
czq_26867194872 小时前
Python打卡第36天
pytorch·python·深度学习
福兮说2 小时前
秋招简历让 AI 写了一版:它替我加了 JWT,还把课程设计写成了「高并发」
人工智能·课程设计·秋招·求职·简历
太理摆烂哥2 小时前
MySQL数据库基础
数据库·mysql
计算机编程指导师2 小时前
【计算机毕设】基于Hadoop+Spark的美国互联网银行贷款数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·数据分析·spark·毕业设计·贷款
Starry-sky(jing)2 小时前
onnxruntime 安装后 GPU 没加速?3 条命令确认它跑在 CPU 还是 GPU
python·gpu·cuda·onnxruntime·推理加速