基于java+ssm+vue的超市商品管理系统

本文介绍了一个基于B/S架构的超市商品管理系统,采用Java语言、Vue前端技术和SSM框架,结合Mysql数据库。系统提供管理员、采购员和销售员三种角色的功能,包括商品销售、采购进退货、供应商管理等,旨在提高超市商品管理效率。主要功能模块如商品信息管理、销售统计和员工信息管理等均有详细实现说明。
摘要由CSDN通过智能技术生成

项目介绍

社会和科技的不断进步带来更便利的生活,计算机技术也越来越平民化。二十一世纪是数据时代,各种信息经过统计分析都可以得到想要的结果,所以也可以更好的为人们工作、生活服务。商品管理是超市工作的重要组成部分,每天的进货、出货、采购等都非常重要。把计算机技术和超市的商品管理相结合可以更符合超市的要求,实现一个超市商品管理的最大价值。

本基于B/S的超市商品管理系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在idea里。本基于B/S的超市商品管理系统提供管理员、采购员工、销售员工三种角色的服务。总的功能包括商品销售管理、采购进退货管理、供应商管理、商品管理等。本系统可以帮助超市安排商品的进、出货,帮助员工更好的统计库存详情和销售详情,更好的提高超市的商品管理工作效率,本系统采用成熟技术开发可以完成进超市商品管理的相关工作。

3.1系统功能结构设计
系统的功能结构是采用树形图来绘制功能设计。根据分析所得,本系统的功能设计为管理员和销售员工、采购员工三部分。管理员为高级角色,可以管理系统里的所有信息,包括员工信息。本基于B/S的超市商品管理系统的功能结构设计图如下图3-1所示:
在这里插入图片描述

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序/vue/爬虫/c#/asp.net

系统实现

4.1用户登录功能的详细实现
用户登录界面起到验证身份的作用,本界面采用图片背景进行设计。在用户登录界面里设置了程序的名称和用户、密码、权限的文本框。在文本框下是登录按钮。用户在信息输入完成后可以使用这个按钮进行相对应的操作。用户登录功能的实现界面如下图4-1所示:
在这里插入图片描述

图4-1用户登录实现界面

4.2管理员权限的功能实现
4.2.1个人中心管理功能的详细实现
个人中心管理功能的作用为修改密码和添加、删除管理员用户。本功能可以实现新增管理员和减少管理员。个人中心管理功能的实现界面如下图4-2所示:
在这里插入图片描述

图4-2个人中心管理功能的界面实现

4.2.2员工信息管理功能的详细实现
管理员负责员工信息的录入和管理。员工信息包括销售员工和采购员工,员工的账号和密码则是由本功能进行添加。管理员查询员工信息的功能实现如下图4-3所示:
在这里插入图片描述

图4-3管理员查询员工信息的实现界面

4.2.3商品信息管理功能的详细实现
管理员可以对商品的信息进行管理、审核。管理员查询商品信息的实现界面如下图4-4所示:
在这里插入图片描述

图4-4管理员查询商品信息的实现界面

4.2.4供应商管理功能的详细界面实现
管理员可以对供应商信息进行管理和添加。管理员查询供应商信息的实现界面如下图4-5所示:
在这里插入图片描述

图4-5管理员查询供应商功能的运行界面

4.2.5商品销售管理功能的详细实现
管理员可以添加和管理商品的销售信息,查询商品销售功能的界面实现如下图4-6所示:
在这里插入图片描述

图4-6管理员查询商品销售功能的运行界面

4.2.6商品销售统计功能的详细实现
管理员可以对销售数据进行统计,功能的实现界面如下图4-7所示:
在这里插入图片描述

图4-7管理员商品销售统计功能的运行界面

4.2.7采购进退货管理功能的实现界面
管理员可以查看和管理采购的进货信息、退货信息,实现界面如下图4-8所示:
在这里插入图片描述

图4-8管理员查询采购进退货功能的实现界面

4.2.8基础数据管理功能的实现界面
基础数据包括商品类型和供应商类型,管理员可以设置不同的类型。实现界面如下图4-9所示:
在这里插入图片描述

图4-9基础数据管理功能的实现界面

4.3采购员工权限的功能详细实现
4.3.1采购进货管理功能的详细实现
采购员工功能里可以添加采购进货信息。采购员工添加采购进货功能的实现界面如下图4-10所示:

在这里插入图片描述

图4-10采购员工添加采购进货功能的运行界面

4.3.2采购退货管理功能的详细实现
采购员工在退货功能里可以添加退货信息和统计退货信息。采购员工添加采购退货功能的实现界面如下图4-11所示:
在这里插入图片描述

图4-11添加采购退货功能的运行界面

4.3.3商品管理功能的详细实现
采购员工在商品管理里可以查看到商品的库存,实现界面如下图4-12所示:
在这里插入图片描述

图4-12查询商品信息功能的运行界面

4.3.4供应商管理功能的详细实现
采购员工可以查询供应商,供应商查询实现界面如下图4-13所示:
在这里插入图片描述

图4-13供应商查询功能的运行界面

4.4销售员工的功能实现
销售员工主要负责商品的销售登记,实现界面如下图4-14所示:
在这里插入图片描述

图4-14销售员工的功能实现界面

核心代码

package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 采购进货
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/caigoujinhuo")
public class CaigoujinhuoController {
    private static final Logger logger = LoggerFactory.getLogger(CaigoujinhuoController.class);

    @Autowired
    private CaigoujinhuoService caigoujinhuoService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service
    @Autowired
    private CaigouyuangongService caigouyuangongService;
    @Autowired
    private GongyingshangService gongyingshangService;
    @Autowired
    private ShangpinService shangpinService;

    @Autowired
    private XiaoshouyuangongService xiaoshouyuangongService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("采购员工".equals(role))
            params.put("caigouyuangongId",request.getSession().getAttribute("userId"));
        else if("销售员工".equals(role))
            params.put("xiaoshouyuangongId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = caigoujinhuoService.queryPage(params);

        //字典表数据转换
        List<CaigoujinhuoView> list =(List<CaigoujinhuoView>)page.getList();
        for(CaigoujinhuoView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        CaigoujinhuoEntity caigoujinhuo = caigoujinhuoService.selectById(id);
        if(caigoujinhuo !=null){
            //entity转view
            CaigoujinhuoView view = new CaigoujinhuoView();
            BeanUtils.copyProperties( caigoujinhuo , view );//把实体数据重构到view中

                //级联表
                CaigouyuangongEntity caigouyuangong = caigouyuangongService.selectById(caigoujinhuo.getCaigouyuangongId());
                if(caigouyuangong != null){
                    BeanUtils.copyProperties( caigouyuangong , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setCaigouyuangongId(caigouyuangong.getId());
                }
                //级联表
                GongyingshangEntity gongyingshang = gongyingshangService.selectById(caigoujinhuo.getGongyingshangId());
                if(gongyingshang != null){
                    BeanUtils.copyProperties( gongyingshang , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setGongyingshangId(gongyingshang.getId());
                }
                //级联表
                ShangpinEntity shangpin = shangpinService.selectById(caigoujinhuo.getShangpinId());
                if(shangpin != null){
                    BeanUtils.copyProperties( shangpin , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setShangpinId(shangpin.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody CaigoujinhuoEntity caigoujinhuo, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,caigoujinhuo:{}",this.getClass().getName(),caigoujinhuo.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");
        else if("采购员工".equals(role))
            caigoujinhuo.setCaigouyuangongId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));


        ShangpinEntity shangpinEntity = shangpinService.selectById(caigoujinhuo.getShangpinId());
        if(shangpinEntity == null){
            return  R.error("查不到该商品");
        }
        shangpinEntity.setShangpinKucunNumber(shangpinEntity.getShangpinKucunNumber()+caigoujinhuo.getCaigoujinhuoNumber());
        shangpinService.updateById(shangpinEntity);


            caigoujinhuo.setInsertTime(new Date());
            caigoujinhuo.setCreateTime(new Date());
            caigoujinhuoService.insert(caigoujinhuo);
            return R.ok();

    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody CaigoujinhuoEntity caigoujinhuo, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,caigoujinhuo:{}",this.getClass().getName(),caigoujinhuo.toString());

            caigoujinhuoService.updateById(caigoujinhuo);//根据id更新
            return R.ok();

    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        caigoujinhuoService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        try {
            List<CaigoujinhuoEntity> caigoujinhuoList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            CaigoujinhuoEntity caigoujinhuoEntity = new CaigoujinhuoEntity();
//                            caigoujinhuoEntity.setShangpinId(Integer.valueOf(data.get(0)));   //商品 要改的
//                            caigoujinhuoEntity.setGongyingshangId(Integer.valueOf(data.get(0)));   //供应商 要改的
//                            caigoujinhuoEntity.setCaigouyuangongId(Integer.valueOf(data.get(0)));   //采购员工 要改的
//                            caigoujinhuoEntity.setCaigoujinhuoUuidNumber(data.get(0));                    //进货单号 要改的
//                            caigoujinhuoEntity.setCaigoujinhuoNumber(Integer.valueOf(data.get(0)));   //进货数量 要改的
//                            caigoujinhuoEntity.setCaigoujinhuoContent("");//照片
//                            caigoujinhuoEntity.setInsertTime(date);//时间
//                            caigoujinhuoEntity.setCreateTime(date);//时间
                            caigoujinhuoList.add(caigoujinhuoEntity);


                            //把要查询是否重复的字段放入map中
                                //进货单号
                                if(seachFields.containsKey("caigoujinhuoUuidNumber")){
                                    List<String> caigoujinhuoUuidNumber = seachFields.get("caigoujinhuoUuidNumber");
                                    caigoujinhuoUuidNumber.add(data.get(0));//要改的
                                }else{
                                    List<String> caigoujinhuoUuidNumber = new ArrayList<>();
                                    caigoujinhuoUuidNumber.add(data.get(0));//要改的
                                    seachFields.put("caigoujinhuoUuidNumber",caigoujinhuoUuidNumber);
                                }
                        }

                        //查询是否重复
                         //进货单号
                        List<CaigoujinhuoEntity> caigoujinhuoEntities_caigoujinhuoUuidNumber = caigoujinhuoService.selectList(new EntityWrapper<CaigoujinhuoEntity>().in("caigoujinhuo_uuid_number", seachFields.get("caigoujinhuoUuidNumber")));
                        if(caigoujinhuoEntities_caigoujinhuoUuidNumber.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(CaigoujinhuoEntity s:caigoujinhuoEntities_caigoujinhuoUuidNumber){
                                repeatFields.add(s.getCaigoujinhuoUuidNumber());
                            }
                            return R.error(511,"数据库的该表中的 [进货单号] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                        caigoujinhuoService.insertBatch(caigoujinhuoList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }






}

论文参考

在这里插入图片描述

目 录
摘 要 1
Abstract 2
第1章 绪论 5
1.1课题研究背景与现状 5
1.2课题实现目的和研究意义 5
1.3课题研究内容 6
1.4论文结构安排 6
第2章 系统分析 7
2.1系统开发中使用相关技术介绍 7
2.1.1Java介绍 7
2.1.2Mysql数据库介绍 7
2.1.3B/s架构介绍 8
2.2系统可行性分析 8
2.2.1经济可行性分析 9
2.2.2操作可行性分析 9
2.2.3技术可行性分析 9
2.3系统需求分析 9
2.4系统性能分析 10
2.5系统功能分析 10
2.6系统操作流程分析 12
第3章 系统设计 13
3.1系统功能结构设计 13
3.2数据库设计 13
3.2.1数据ER图设计 13
3.2.2数据库表设计 16
第4章 系统详细实现 21
4.1用户登录功能的详细实现 21
4.2管理员权限的功能实现 21
4.2.1个人中心管理功能的详细实现 21
4.2.2员工信息管理功能的详细实现 22
4.2.3商品信息管理功能的详细实现 22
4.2.4供应商管理功能的详细界面实现 23
4.2.5商品销售管理功能的详细实现 23
4.2.6商品销售统计功能的详细实现 24
4.2.7采购进退货管理功能的实现界面 25
4.2.8基础数据管理功能的实现界面 25
4.3采购员工权限的功能详细实现 25
4.3.1采购进货管理功能的详细实现 25
4.3.2采购退货管理功能的详细实现 26
4.3.3商品管理功能的详细实现 27
4.3.4供应商管理功能的详细实现 28
4.4销售员工的功能实现 28
第5章 系统测试 29
5.1系统测试的方法与选择 29
5.2测试环境与测试条件 29
5.3详细功能测试 29
5.3.1用户登录功能的测试 29
5.3.2商品信息管理功能的测试 30
5.3.3商品销售功能的测试 32
5.3.4商品采购管理功能的测试 33
5.3.5销售统计功能的测试 34
5.4测试总结 34
总 结 35
参考文献 36
致 谢 38

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值