基于SpringBoot的临期食品销售系统

💗博主介绍:✌全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战,以及程序定制化开发、文档编写、答疑辅导等。
🌟文末获取源码+数据库+文档🌟
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以和学长沟通,希望帮助更多的人

一、前言

        在消费者追求健康生活的今天,降低食物浪费、提高资源利用率成为社会发展的重要课题。临期食品销售系统应运而生,旨在有效管理和销售即将到达保质期末端的食品,不仅带动了经济效益,更提升了食品产业的社会价值和环保意识。此系统的开发,不仅能够优化库存管理,减少商家损失,同时也能为消费者提供价格更优惠的商品,实现双赢局面。其使用便捷性、低成本运营和精准营销,进一步放大了其行业竞争优势。

        通过此系统的实施,解决了传统销售模式下临期食品处理不畅、信息更新滞后的问题。同时,系统引入了智能分析与决策支持,辅助商家更合理地进行库存调度和价格设定,减少了临期食品的损耗,极大地提高了商品的流转率。优化的用户体验设计和精确的数据分析,进一步增强了消费者的购买意愿,对促进消费者和商家的良性互动产生了积极影响。


二、功能设计

        该临期食品销售系统的用户分为管理员与用户两个角色的权限子模块。
        管理员所能使用的功能主要有:后台管理、用户管理(管理员、注册用户)、商品管理、商品类别管理、轮播图管理、订单信息管理、促销活动信息管理等。
        用户所能使用的功能主要有:登录注册、首页(商品信息查看、商品信息购买)、订单管理、购物车、个人信息修改等。

(1)用户用例图如图所示。

(2)管理员用例图如图所示。

系统总体功能结构图如下所示:


三、数据设计

        概念模型的设计是为了抽象真实世界的信息,并对信息世界进行建模。它是数据库设计的强大工具。数据库概念模型设计可以通过E-R图描述现实世界的概念模型,而且MySQL数据库是自我保护能力比较强的数据库,限于篇幅要求,仅列出关键部分实体属性图和E-R图,如下所示。


四、部分效果展示

        管理员管理用户:通过用户界面进行相关操作选择,比如增加、编辑或删除用户。后端服务接到请求后,调用相应的接口来执行数据库操作。

        管理员管理轮播图:在实现轮播图管理模块时,考虑到了图片的上传和管理等问题。采用了MultipartFile来处理图片上传,使得上传图片更加安全可靠,避免了直接操作文件系统导致的潜在风险。

        管理员进行商品管理:在设计商品管理模块中,需求涵盖了商品信息的基本操作,包括查询、新增、修改和删除功能。为避免商品名重复,系统在添加新商品或修改已有商品时会进行名称查重。

        管理员进行活动管理:管理员点击进入管理界面,此时根据其角色权限,界面会展示可执行的操作选项,包括查询、新增、修改和删除功能。


部分功能代码

@CrossOrigin
public class OrderController {
    @Autowired
    private OrderMapper orderMapper;

    @PostMapping("order/placeAnOrder")
    public RetResult<String> placeAnOrder(@RequestBody Order order){
//        先判断是否已存在购物车
        int orderId = orderMapper.getOrderIdByUserId(order.getUserId());
        if(orderId == 0){
            orderMapper.newOrder(order);
            for (Commodity commodity : order.getCommodityList()){
                orderMapper.newDetails(order.getOrderId(),commodity);
            }
        }else {
            orderMapper.deleteOrderByOrderId(orderId);
            orderMapper.newOrder(order);
            for (Commodity commodity : order.getCommodityList()){
                orderMapper.newDetails(order.getOrderId(),commodity);
            }
        }
        return new RetResult<String>(200,"",null);
    }

    @GetMapping("admin/getAllOrder")
    public List<Order> getAllOrder(@RequestParam("state") int state){
        List<Order> orderList;
        if (state == 0){
            orderList = orderMapper.getAllOrder();
        }else {
            orderList = orderMapper.getOrderByState(state);
        }

        for(Order order : orderList){
            List<Commodity> commodityList = orderMapper.getOrderDetailsById(order.getOrderId());
            order.setCommodityList(commodityList);
        }
        return orderList;
    }

    @DeleteMapping("admin/deleteOrderById")
    public RetResult deleteOrderById(@RequestParam("orderId") int orderId){
        orderMapper.deleteOrderById(orderId);
        return new RetResult(200,"删除成功",null);
    }

    @DeleteMapping("admin/deleteOrderByList")
    public RetResult deleteOrderById(@RequestBody List<Order> orderList){
        for(Order order : orderList){
            orderMapper.deleteOrderById(order.getOrderId());
        }
        return new RetResult(200,"删除成功",null);
    }

    @PutMapping("admin/updateOrderState")
    public RetResult updateOrderState(@RequestParam("orderId") int orderId,@RequestParam("state") int state){
        orderMapper.updateOrderStateById(state,orderId);
        return new RetResult(200,"修改成功",null);
    }

    @DeleteMapping("admin/deleteOrderCommodity")
    public RetResult deleteOrderCommodity(@RequestParam("orderId") int orderId,@RequestParam("commodityId") int commodityId){
        orderMapper.deleteOrderCommodity(orderId,commodityId);
        return new RetResult(200,"删除成功",null);
    }

    @PutMapping("admin/updateCommodityNum")
    public RetResult updateCommodityNum(@RequestParam("orderId") int orderId,@RequestParam("commodityId") int commodityId,@RequestParam("num") int num){
        orderMapper.updateCommodityNum(num,orderId,commodityId);
        return new RetResult(200,"修改成功",null);
    }

    @PutMapping("admin/updateDelivery")
    public RetResult updateDelivery(@RequestParam("orderId") int orderId,@RequestParam("deliveryType") int deliveryType,@RequestParam("deliveryData") String deliveryData){
        orderMapper.updateDelivery(deliveryType,deliveryData,orderId);
        return new RetResult(200,"修改成功",null);
    }

    @PostMapping("admin/orderAddCommodity")
    public RetResult orderAddCommodity(@RequestBody Commodity commodity){
//      先判断原订单有没有这个商品
        int id = orderMapper.selectDetailsById(commodity.getOrderId(),commodity.getCommodityId());

        if(id == 0){
            orderMapper.newDetails(commodity.getOrderId(),commodity);
        }else {
            orderMapper.updateDeliveryById(commodity.getNum(),id);
        }
        return new RetResult(200,"添加成功",null);
    }

    @GetMapping("user/getOrderById")
    public List<Order> getOrderById(@RequestParam("userId") int userId){
        List<Order> orderList = orderMapper.getOrderById(userId);
        for(Order order : orderList){
            List<Commodity> commodityList = orderMapper.getOrderDetailsById(order.getOrderId());
            order.setCommodityList(commodityList);
        }
        return orderList;
    }
}

源码及文档获取

文章下方名片联系我即可~
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值