👉文末查看项目功能视频演示+获取源码+sql脚本+视频导入教程视频
1 、功能描述
基于SSM的超市进存销管理系统8拥有两种角色:管理员和员工
管理员:商品管理、供应商管理、入库出库管理、退货管理、采购管理等
员工:入库、出库、采购、退货等
1.1 背景描述
进存销管理系统是为了解决企业在物流管理过程中存在的信息传递不畅、库存管理困难以及销售数据统计复杂的问题而设计的一种软件系统。传统的进存销管理方式往往依赖手工记录和人工处理,容易出现信息丢失、错误记录以及业务处理延误等问题。而进存销管理系统的出现能够有效地解决这些问题。该系统提供了供应商管理、库存管理、销售管理、财务管理等功能,可以实时记录和管理供应链中物流、库存、销售等各环节的信息,方便企业进行供应链查询和数据分析。同时,系统还能够帮助企业进行库存预警和货物调配,提高了企业的运营效率。采用进存销管理系统可以提供更好的供应链管理体验,提高企业的管理水平,为企业提供更精确、高效的物流管理服务。
2、项目技术
后端框架:SSM(Spring、SpringMVC、Mybatis)
前端技术:jsp
2.1 SSM
SSM(Spring+SpringMVC+MyBatis)是目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统。其中,Spring就像是整个项目中的粘合剂,负责装配bean并管理其生命周期,实现控制反转(IoC)的功能。SpringMVC负责拦截用户请求,通过DispatcherServlet将请求匹配到相应的Controller并执行。而MyBatis则是对JDBC的封装,让数据库底层操作变得透明,通过配置文件关联到各实体类的Mapper文件,实现了SQL语句映射。
2.2 mysql
MySQL是一款Relational Database Management System,直译过来的意思就是关系型数据库管理系统,MySQL有着它独特的特点,这些特点使他成为目前最流行的RDBMS之一,MySQL想比与其他数据库如ORACLE、DB2等,它属于一款体积小、速度快的数据库,重点是它符合本次毕业设计的真实租赁环境,拥有成本低,开发源码这些特点,这也是选择它的主要原因。
3、开发环境
- JAVA版本:JDK1.8(最佳)
- IDE类型:IDEA、Eclipse都可运行
- 数据库类型:MySql(5.7、8.x版本都可)
- tomcat版本:Tomcat 7-10版本均可
- maven版本:无限制
- 硬件环境:Windows
4、功能截图+视频演示+文档目录
4.1 登录
4.2 管理员模块
4.3 员工模块
4.4 文档目录
5 、核心代码实现
5.1 配置代码
validationQuery=SELECT 1
jdbc_url=jdbc:mysql://127.0.0.1:3306/jspm1y6h3?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&allowPublicKeyRetrieval=true
jdbc_username=root
jdbc_password=root
5.2 其它核心代码
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.ShangpinrukuEntity;
import com.entity.view.ShangpinrukuView;
import com.service.ShangpinrukuService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;
/**
* 商品入库
* 后端接口
* @author
* @email
* @date 2022-04-25 18:09:26
*/
@RestController
@RequestMapping("/shangpinruku")
public class ShangpinrukuController {
@Autowired
private ShangpinrukuService shangpinrukuService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,ShangpinrukuEntity shangpinruku,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yuangong")) {
shangpinruku.setYuangonggonghao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<ShangpinrukuEntity> ew = new EntityWrapper<ShangpinrukuEntity>();
PageUtils page = shangpinrukuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinruku), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,ShangpinrukuEntity shangpinruku,
HttpServletRequest request){
EntityWrapper<ShangpinrukuEntity> ew = new EntityWrapper<ShangpinrukuEntity>();
PageUtils page = shangpinrukuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinruku), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( ShangpinrukuEntity shangpinruku){
EntityWrapper<ShangpinrukuEntity> ew = new EntityWrapper<ShangpinrukuEntity>();
ew.allEq(MPUtil.allEQMapPre( shangpinruku, "shangpinruku"));
return R.ok().put("data", shangpinrukuService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(ShangpinrukuEntity shangpinruku){
EntityWrapper< ShangpinrukuEntity> ew = new EntityWrapper< ShangpinrukuEntity>();
ew.allEq(MPUtil.allEQMapPre( shangpinruku, "shangpinruku"));
ShangpinrukuView shangpinrukuView = shangpinrukuService.selectView(ew);
return R.ok("查询商品入库成功").put("data", shangpinrukuView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
ShangpinrukuEntity shangpinruku = shangpinrukuService.selectById(id);
return R.ok().put("data", shangpinruku);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
ShangpinrukuEntity shangpinruku = shangpinrukuService.selectById(id);
return R.ok().put("data", shangpinruku);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ShangpinrukuEntity shangpinruku, HttpServletRequest request){
shangpinruku.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(shangpinruku);
shangpinrukuService.insert(shangpinruku);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody ShangpinrukuEntity shangpinruku, HttpServletRequest request){
shangpinruku.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(shangpinruku);
shangpinrukuService.insert(shangpinruku);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody ShangpinrukuEntity shangpinruku, HttpServletRequest request){
//ValidatorUtils.validateEntity(shangpinruku);
shangpinrukuService.updateById(shangpinruku);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
shangpinrukuService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<ShangpinrukuEntity> wrapper = new EntityWrapper<ShangpinrukuEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yuangong")) {
wrapper.eq("yuangonggonghao", (String)request.getSession().getAttribute("username"));
}
int count = shangpinrukuService.selectCount(wrapper);
return R.ok().put("count", count);
}
}