计算机毕业设计 博物馆票仓管理系统的设计与实现
2026/6/19 18:59:14 网站建设 项目流程

系统介绍

随着食品行业精细化管理需求提升,公司传统调味品仓储管理模式存在流程不规范、信息传递滞后、采购与库存协同低效等问题,难以满足企业高效运营需求。为解决上述痛点,提升仓储管理智能化与规范化水平,本研究设计并开发基于Spring Boot的调味品仓储管理系统。系统采用Java作为开发语言,结合Spring Boot、Vue框架及MySQL数据库构建技术架构,实现多角色协同管理。针对采购员、供应商、仓库管理员三大角色,开发登录、个人中心等基础功能,以及调味品管理、订单管理、入库出库、补货通知、库存管控等核心模块。该系统有效打破传统管理信息壁垒,实现仓储与采购业务的无缝衔接,提升了管理效率与数据准确性。本次开发不仅验证了相关技术在仓储管理场景的适用性,也为企业优化仓储运营模式提供了有效支撑,同时为同类仓储管理系统开发积累了实践经验。

系统用例说明

系统根据需求分析,将系统划分为采购员,仓管员以及供应商三种角色,采购员端核心功能涵盖基础的登录与个人中心管理,可查看系统公告及各类调味品信息。核心业务流程围绕采购开展,能接收仓库管理员的补货通知并完成调味料下单、订单支付,同时可查看订单详情、处理收退换货事宜,订单完成后还能对供应商进行评价,实现采购全流程管控。仓库管理员端具备登录与个人中心管理基础功能,核心负责系统运营管控。可进行公告管理、采购员与供应商管理,统筹调味品全生命周期管理;主导入库、出库及库存管控,能查看各类订单并向采购员发送补货通知,实现仓储与采购协同的全流程闭环管理。供应商端以登录与个人中心管理为基础,核心聚焦调味品与订单管理。可维护自身供应的调味品信息,实时接收并查看采购员提交的订单,根据订单需求完成发货处理,通过系统实现与采购员的订单协同,保障供货流程的顺畅推进。

系统结构功能

基于Spring Boot的飞达食品公司调味品仓储管理系统实现了对调味品仓储的管理,包括调味品信息管理模块,用户管理模块,库存管理模块以及订单管理模块,系统结构功能划分

系统功能实现截图

注册登录功能

采购员注册登录功能通过UsersController控制器实现,采用Sa-Token框架进行会话管理。注册时,系统检查用户名唯一性,使用PwdUtil加密密码后保存到user表中。登录支持三种方式:账号密码登录、邮箱验证码登录和人脸识别登录。账号密码登录需先验证图形验证码,再校验用户名和加密后的密码;邮箱登录通过发送和验证邮箱验证码完成;人脸登录使用FaceCatchUtils比对用户头像与人脸图片。登录成功后,StpUtil.login()创建会话并生成token,系统将用户信息(包括角色role="3"表示采购员)存入TokenEntity并设置到session中,后续请求通过token验证用户身份和权限。

@SaIgnore

@PostMapping(value = "/login")

@SysLog(title = "用户登录", content = "系统日志")

public Result<TokenEntity> login(@RequestBody SysAccountLoginVO sysAccountLoginVO) {

//验证码

captchaController.validateCaptcha(sysAccountLoginVO.getCaptcha(), sysAccountLoginVO.getKey());

UsersEntity user = userService.getByUsername(sysAccountLoginVO.getUsername());

if (user == null || !user.getPassword().equals(PwdUtil.encrypt(sysAccountLoginVO.getPassword()))) {

return Result.error("账号或密码不正确");

}

StpUtil.login(StpPre + user.getId());

TokenEntity tokenEntity = new TokenEntity();

tokenEntity.setUsername(user.getUsername());

tokenEntity.setUserid(user.getId());

tokenEntity.setRole(user.getRole());

tokenEntity.setTablename("users");

tokenEntity.setAddtime(user.getAddtime());

tokenEntity.setAvatarurl(user.getAvatarurl());

tokenEntity.setMoney(user.getMoney());

tokenEntity.setName(user.getName());

tokenEntity.setToken(StpUtil.getTokenValue());

StpUtil.getSession().set(Constants.CURRENT_USER, tokenEntity);

return Result.ok(tokenEntity);

}

调味品下单

调味料下单通过OrdersController的save接口实现,采购员在前端选择调味料后提交订单数据,后端生成唯一订单编号,通过GloabUtils.getUserId获取当前登录用户ID,设置到每个订单项中,计算订单总金额并调用ordersService.save保存到orders表,返回包含订单号和总金额的AliPay对象。支付时调用balancePay接口,系统扣除用户账户余额,将订单状态更新为"已支付"并设置支付类型为0,完成下单流程。

@PostMapping("balancePay")

@SysLog(title = "支付订单")

public void balancePay(@RequestBody AliPay aliPay) {

UsersEntity usersEntity = usersService.getById(GloabUtils.getUserId());

double balance = NumberUtil.toDouble(NumberUtil.sub(usersEntity.getMoney(), Double.valueOf(aliPay.getTotalAmount())));

usersEntity.setMoney(balance);

usersService.updateById(usersEntity);

OrdersQuery ordersQuery = new OrdersQuery();

ordersQuery.setOrderid(aliPay.getTraceNo());

List<OrdersVO> orders = ordersService.queryList(ordersQuery);

if (!orders.isEmpty()) {

for (OrdersVO orderVO : orders) {

OrdersEntity order = OrdersConvert.INSTANCE.convert(orderVO);

order.setStatus("已支付");

order.setType(0);

ordersService.updateById(order);

}

}

}

用户管理

通过ProviderpremisesController的save接口实现,管理员或采购员在前端填写供应商信息后提交数据。后端首先检查密码字段是否为空,若不为空则使用PwdUtil.encrypt进行MD5加密处理,确保密码安全存储。接着通过ProviderpremisesConvert将ProviderpremisesVO转换为ProviderpremisesEntity实体,调用providerpremisesService.save方法将数据持久化到providerpremises表中,MyBatis-Plus自动填充addtime创建时间字段,完成供应商信息的添加操作。

@PostMapping("save")

@Operation(summary = "保存")

@SysLog(title = "保存供应商端信息")

public Result<String> save(@RequestBody ProviderpremisesVO vo){

if (StrUtil.isNotBlank(vo.getPassword())) {

vo.setPassword(PwdUtil.encrypt(vo.getPassword()));

}

providerpremisesService.save(vo);

return Result.ok();

}

调味品管理

通过CondimentinformationController的save接口实现,管理员或采购员在前端填写调味料信息(包括商品名称、所属分类、规格详情、描述、价格、封面图、详情图、详细信息、品牌、配料表、库存等)后提交数据。后端通过CondimentinformationConvert将CondimentinformationVO转换为CondimentinformationEntity实体,调用condimentinformationService.save方法将数据持久化到condimentinformation表中,MyBatis-Plus的@TableField(fill = FieldFill.INSERT)注解确保addtime创建时间字段自动填充,同时记录创建人id和创建人姓名,完成调味料信息的添加操作。

@PostMapping("save")

@Operation(summary = "保存")

@SysLog(title = "保存调味品信息信息")

public Result<String> save(@RequestBody CondimentinformationVO vo){

condimentinformationService.save(vo);

return Result.ok();

}

库存管理

库存入库通过WarehouseinandwarehouseoutrecordsController的save接口实现,管理员或采购员在前端选择调味料并填写入库数量后提交数据,操作类型设置为"入库"。后端通过WarehouseinandwarehouseoutrecordsConvert将VO转换为WarehouseinandwarehouseoutrecordsEntity实体,记录调味料名称、库存id(关联调味品信息表)、操作类型(入库)、入库数量、操作人id和操作人名称,调用warehouseinandwarehouseoutrecordsService.save方法将出入库记录保存到warehouseinandwarehouseoutrecords表中。代码中原计划对入库进行库存验证和更新(增加库存),记录出入库操作日志,@TableField(fill = FieldFill.INSERT)注解确保创建时间自动填充。

@PostMapping("update")

@Operation(summary = "修改")

@SysLog(title = "修改出入库记录信息")

public Result<String> update(@RequestBody @Valid WarehouseinandwarehouseoutrecordsVO vo){

warehouseinandwarehouseoutrecordsService.update(vo);

return Result.ok();

}

采购协同

添加补货通知功能通过ReplenishmentnotificationController的save接口实现,管理员或采购员在前端填写补货通知信息(包括用户id、提醒标题、提醒类型、通知详情、用户名称等)后提交数据。后端通过ReplenishmentnotificationConvert将ReplenishmentnotificationVO转换为ReplenishmentnotificationEntity实体,调用replenishmentnotificationService.save方法将数据持久化到replenishmentnotification表中,@TableField(fill = FieldFill.INSERT)注解确保addtime创建时间字段自动填充,完成补货通知的添加操作。补货通知主要用于库存预警提醒,当调味料库存不足时,系统可向采购员发送补货提醒,便于及时下单采购补充库存。

@PostMapping("update")

@Operation(summary = "修改")

@SysLog(title = "修改补货通知信息")

public Result<String> update(@RequestBody @Valid ReplenishmentnotificationVO vo){

replenishmentnotificationService.update(vo);

return Result.ok();

}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询