计算机毕业设计-基于Java+SSM架构的超市商品管理系统项目开发实战(附源码+论文)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。

💞当前专栏:Java毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

🎀 Python毕业设计
🌎微信小程序毕业设计

开发环境

  • 开发语言:Java
  • 框架:ssm
  • JDK版本:JDK1.8
  • 服务器:tomcat7
  • 数据库:mysql 5.7
  • 数据库工具:Navicat12
  • 开发软件:eclipse/myeclipse/idea
  • Maven包:Maven3.3.9
  • 浏览器:谷歌浏览器

源码下载地址:

https://download.csdn.net/download/2301_76953549/89298640

论文目录

【如需全文请按文末获取联系】
在这里插入图片描述
在这里插入图片描述

一、项目简介

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

二、系统设计

2.1软件功能模块设计

本基于B/S的超市商品管理系统的功能结构设计图如下图3-1所示:
在这里插入图片描述

2.2数据库设计

(1)管理员的ER图中的属性有账号、密码、权限。管理员ER图如下图3-2所示:
在这里插入图片描述
(2)员工的ER图里的属性有账号、姓名、编号等,员工的ER图如下图3-3所示:
在这里插入图片描述

(3)商品信息的ER图里的属性有名称、类别、图片、价格、数量等,商品的ER图如下图3-4所示:
在这里插入图片描述
(5)销售信息ER图里的属性有编号、名称、价格、操作员、库存、数量等,销售信息ER图如下图3-6所示:
在这里插入图片描述

三、系统项目部分截图

3.1注册登陆功能

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

3.2管理员权限的功能实现

个人中心管理功能的详细实现
个人中心管理功能的作用为修改密码和添加、删除管理员用户。本功能可以实现新增管理员和减少管理员。个人中心管理功能的实现界面如下图4-2所示:
在这里插入图片描述
商品信息管理功能的详细实现
管理员可以对商品的信息进行管理、审核。管理员查询商品信息的实现界面如下图4-4所示:
在这里插入图片描述
供应商管理功能的详细界面实现
管理员可以对供应商信息进行管理和添加。管理员查询供应商信息的实现界面如下图4-5所示:
在这里插入图片描述
商品销售统计功能的详细实现
管理员可以对销售数据进行统计,功能的实现界面如下图4-7所示:
在这里插入图片描述
采购进退货管理功能的实现界面
管理员可以查看和管理采购的进货信息、退货信息,实现界面如下图4-8所示:
在这里插入图片描述

3.3采购员工权限的功能详细实现

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

3.4销售员工的功能实现

销售员工主要负责商品的销售登记,实现界面如下图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("/caigoutuihuo")
public class CaigoutuihuoController {
    private static final Logger logger = LoggerFactory.getLogger(CaigoutuihuoController.class);

    @Autowired
    private CaigoutuihuoService caigoutuihuoService;


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

    //级联表service
    @Autowired
    private CaigouyuangongService caigouyuangongService;
    @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 = caigoutuihuoService.queryPage(params);

        //字典表数据转换
        List<CaigoutuihuoView> list =(List<CaigoutuihuoView>)page.getList();
        for(CaigoutuihuoView 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);
        CaigoutuihuoEntity caigoutuihuo = caigoutuihuoService.selectById(id);
        if(caigoutuihuo !=null){
            //entity转view
            CaigoutuihuoView view = new CaigoutuihuoView();
            BeanUtils.copyProperties( caigoutuihuo , view );//把实体数据重构到view中

                //级联表
                CaigouyuangongEntity caigouyuangong = caigouyuangongService.selectById(caigoutuihuo.getCaigouyuangongId());
                if(caigouyuangong != null){
                    BeanUtils.copyProperties( caigouyuangong , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setCaigouyuangongId(caigouyuangong.getId());
                }
                //级联表
                ShangpinEntity shangpin = shangpinService.selectById(caigoutuihuo.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 CaigoutuihuoEntity caigoutuihuo, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,caigoutuihuo:{}",this.getClass().getName(),caigoutuihuo.toString());

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


        ShangpinEntity shangpinEntity = shangpinService.selectById(caigoutuihuo.getShangpinId());
        if(shangpinEntity ==null){
            return  R.error("查不到商品");
        }else if((shangpinEntity.getShangpinKucunNumber()-caigoutuihuo.getCaigoutuihuoNumber())<0){
            return R.error("退货数量不能大于库存数量");
        }
        shangpinEntity.setShangpinKucunNumber(shangpinEntity.getShangpinKucunNumber()-caigoutuihuo.getCaigoutuihuoNumber());
        shangpinService.updateById(shangpinEntity);


        caigoutuihuo.setInsertTime(new Date());
            caigoutuihuo.setCreateTime(new Date());
            caigoutuihuoService.insert(caigoutuihuo);
            return R.ok();

    }

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

            caigoutuihuoService.updateById(caigoutuihuo);//根据id更新
            return R.ok();

    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        caigoutuihuoService.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<CaigoutuihuoEntity> caigoutuihuoList = 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){
                            //循环
                            CaigoutuihuoEntity caigoutuihuoEntity = new CaigoutuihuoEntity();
//                            caigoutuihuoEntity.setShangpinId(Integer.valueOf(data.get(0)));   //商品 要改的
//                            caigoutuihuoEntity.setCaigouyuangongId(Integer.valueOf(data.get(0)));   //采购员工 要改的
//                            caigoutuihuoEntity.setCaigoutuihuoUuidNumber(data.get(0));                    //退货单号 要改的
//                            caigoutuihuoEntity.setCaigoutuihuoNumber(Integer.valueOf(data.get(0)));   //退货数量 要改的
//                            caigoutuihuoEntity.setCaigoutuihuoContent("");//照片
//                            caigoutuihuoEntity.setInsertTime(date);//时间
//                            caigoutuihuoEntity.setCreateTime(date);//时间
                            caigoutuihuoList.add(caigoutuihuoEntity);


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

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






}

获取源码或论文

如需对应的论文或源码,以及其他定制需求,也可以下方微❤联系。

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值