项目介绍
进入信息时代以来,很多数据都需要配套软件协助处理,这样可以解决传统方式带来的管理困扰。比如耗时长,成本高,维护数据困难,数据易丢失等缺点。本次使用数据库工具MySQL和编程技术SSM开发的疫情物资管理系统,可以实现目标用户群需要的功能,包括物资信息管理,物资出入库管理,物资申领管理,物资采购管理,财务报销管理等功能。
总之,疫情物资管理系统是基于计算机进行数据的处理,则可以短时间内批量完成数据的管理,就连基本的数据录入,更改错误的数据,统计数据等操作要求都可以轻松完成,这样的系统的运用可以减少很多繁琐的工作量,让数据的管理人员提升效率,节省数据处理投入的资金和时间。同时,疫情物资管理系统本身就有配套的数据库,用于保存系统的后台数据,对于数据保存的容量则是传统模式不能相比的,在数据安全性上,也有相应的加密技术提供保护,所以数据泄露和被人窃取都不是易事。
4.2功能模块设计
下图为管理员的功能设计,管理员管理物资申领,物资出入库,物资采购,财务报销。
下图为采购员的功能设计,采购员查询物资和财务报销,管理物资采购。
下图为后勤人员的功能设计,后勤人员对物资进行出入库操作,统计物资出入库的数据,审核并统计物资申领信息。
下图为财务人员的功能设计,财务人员查询物资采购,审核财务报销信息。
开发环境
编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序ue/爬虫/c#/asp.net
系统实现
5.1 管理员功能实现
5.1.1 采购员管理
管理采购员是管理员的功能。其运行效果图如下。采购员信息是由采购员姓名,部门,职务等组成,管理员提交采购员的姓名可以获取采购员信息,管理员可以在本页面修改采购员资料。
图5.1 采购员管理页面
5.1.2 后勤人员管理
管理后勤人员是管理员的功能。其运行效果图如下。后勤人员是本系统的一个角色,管理员可以修改,查询,删除后勤人员信息。
图5.2 后勤人员管理页面
5.1.3 财务人员管理
管理财务人员是管理员的功能。其运行效果图如下。本模块主要让管理员增删改查财务人员信息。
图5.3 财务人员管理页面
5.2 采购员功能实现
5.2.1 查询物资信息
查询物资信息是采购员的功能。其运行效果图如下。查询物资信息可以选择根据物资类别查询,也能根据物资名称查询。
图5.4 查询物资信息页面
5.2.2 物资采购管理
管理物资采购是采购员的功能。其运行效果图如下。物资采购信息包括待办事项,采购状态,采购的物资等,采购员可以新增采购,删除或修改本页面的物资采购信息。
图5.5 物资采购管理页面
5.3 后勤人员功能实现
5.3.1 物资信息管理
管理物资信息是后勤人员的功能。其运行效果图如下。后勤人员查询物资,对物资进行出库,对物资进行入库操作。
图5.6 物资信息管理页面
5.3.2 出库信息统计
统计出库信息是后勤人员的功能。其运行效果图如下。后勤人员查看出库信息统计报表,查看各种物资出库数量信息。
图5.7 出库信息统计页面
5.3.3 申领物资管理
管理申领物资信息是后勤人员的功能。其运行效果图如下。后勤人员需要审核申领物资信息,可以通过负责人或申请人信息查询物资申领信息。
图5.8 申领物资管理页面
5.3.4 申领物资统计
统计申领物资信息是后勤人员的功能。其运行效果图如下。后勤人员通过统计报表查看各种物资的申领数量信息。
图5.9 申领物资统计页面
5.4 财务人员功能实现
5.4.1 查询物资采购
查询物资采购是财务人员的功能。其运行效果图如下。财务人员根据采购状态,或根据采购的物资查询物资采购信息。
图5.10 查询物资采购页面
5.4.2 财务报销管理
管理财务报销信息是财务人员的功能。其运行效果图如下。财务人员审核财务报销信息,修改财务报销信息,查询财务报销信息。
图5.11 财务报销管理页面
核心代码
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.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.CaiwurenyuanEntity;
import com.entity.view.CaiwurenyuanView;
import com.service.CaiwurenyuanService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 财务人员
* 后端接口
* @author
* @email
* @date
*/
@RestController
@RequestMapping("/caiwurenyuan")
public class CaiwurenyuanController {
@Autowired
private CaiwurenyuanService caiwurenyuanService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
CaiwurenyuanEntity user = caiwurenyuanService.selectOne(new EntityWrapper<CaiwurenyuanEntity>().eq("caiwurenyuangonghao", username));
if(user==null || !user.getMima().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(), username,"caiwurenyuan", "财务人员" );
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody CaiwurenyuanEntity caiwurenyuan){
//ValidatorUtils.validateEntity(caiwurenyuan);
CaiwurenyuanEntity user = caiwurenyuanService.selectOne(new EntityWrapper<CaiwurenyuanEntity>().eq("caiwurenyuangonghao", caiwurenyuan.getCaiwurenyuangonghao()));
if(user!=null) {
return R.error("注册用户已存在");
}
Long uId = new Date().getTime();
caiwurenyuan.setId(uId);
caiwurenyuanService.insert(caiwurenyuan);
return R.ok();
}
/**
* 退出
*/
@RequestMapping("/logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("ssion")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
CaiwurenyuanEntity user = caiwurenyuanService.selectById(id);
return R.ok().put("data", user);
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
CaiwurenyuanEntity user = caiwurenyuanService.selectOne(new EntityWrapper<CaiwurenyuanEntity>().eq("caiwurenyuangonghao", username));
if(user==null) {
return R.error("账号不存在");
}
user.setMima("123456");
caiwurenyuanService.updateById(user);
return R.ok("密码已重置为:123456");
}
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,CaiwurenyuanEntity caiwurenyuan,
HttpServletRequest request){
EntityWrapper<CaiwurenyuanEntity> ew = new EntityWrapper<CaiwurenyuanEntity>();
PageUtils page = caiwurenyuanService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, caiwurenyuan), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("st")
public R list(@RequestParam Map<String, Object> params,CaiwurenyuanEntity caiwurenyuan, HttpServletRequest request){
EntityWrapper<CaiwurenyuanEntity> ew = new EntityWrapper<CaiwurenyuanEntity>();
PageUtils page = caiwurenyuanService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, caiwurenyuan), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("sts")
public R list( CaiwurenyuanEntity caiwurenyuan){
EntityWrapper<CaiwurenyuanEntity> ew = new EntityWrapper<CaiwurenyuanEntity>();
ew.allEq(MPUtil.allEQMapPre( caiwurenyuan, "caiwurenyuan"));
return R.ok().put("data", caiwurenyuanService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(CaiwurenyuanEntity caiwurenyuan){
EntityWrapper< CaiwurenyuanEntity> ew = new EntityWrapper< CaiwurenyuanEntity>();
ew.allEq(MPUtil.allEQMapPre( caiwurenyuan, "caiwurenyuan"));
CaiwurenyuanView caiwurenyuanView = caiwurenyuanService.selectView(ew);
return R.ok("查询财务人员成功").put("data", caiwurenyuanView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
CaiwurenyuanEntity caiwurenyuan = caiwurenyuanService.selectById(id);
return R.ok().put("data", caiwurenyuan);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
CaiwurenyuanEntity caiwurenyuan = caiwurenyuanService.selectById(id);
return R.ok().put("data", caiwurenyuan);
}
/**
* 后端保存
*/
@RequestMapping("ve")
public R save(@RequestBody CaiwurenyuanEntity caiwurenyuan, HttpServletRequest request){
caiwurenyuan.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(caiwurenyuan);
CaiwurenyuanEntity user = caiwurenyuanService.selectOne(new EntityWrapper<CaiwurenyuanEntity>().eq("caiwurenyuangonghao", caiwurenyuan.getCaiwurenyuangonghao()));
if(user!=null) {
return R.error("用户已存在");
}
caiwurenyuan.setId(new Date().getTime());
caiwurenyuanService.insert(caiwurenyuan);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody CaiwurenyuanEntity caiwurenyuan, HttpServletRequest request){
caiwurenyuan.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(caiwurenyuan);
CaiwurenyuanEntity user = caiwurenyuanService.selectOne(new EntityWrapper<CaiwurenyuanEntity>().eq("caiwurenyuangonghao", caiwurenyuan.getCaiwurenyuangonghao()));
if(user!=null) {
return R.error("用户已存在");
}
caiwurenyuan.setId(new Date().getTime());
caiwurenyuanService.insert(caiwurenyuan);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody CaiwurenyuanEntity caiwurenyuan, HttpServletRequest request){
//ValidatorUtils.validateEntity(caiwurenyuan);
caiwurenyuanService.updateById(caiwurenyuan);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
caiwurenyuanService.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<CaiwurenyuanEntity> wrapper = new EntityWrapper<CaiwurenyuanEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = caiwurenyuanService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
论文参考
目 录
第一章 绪论 1
1.1 研究背景 1
1.2 研究意义 1
1.3 研究内容 2
第二章 开发环境与技术 3
2.1 JSP技术 3
2.2 MySQL数据库 3
2.3 Java语言 4
2.4 SSM框架 4
第三章 系统分析 5
3.1可行性分析 5
3.1.1运行可行性分析 5
3.1.2经济可行性分析 5
3.1.3技术可行性分析 6
3.2系统流程分析 6
3.3 系统性能分析 8
3.3.1系统安全性 8
3.3.2系统可扩展性 9
3.3.3系统易维护性 9
3.4系统功能分析 9
第四章 系统设计 13
4.1布局设计原则 13
4.2功能模块设计 14
4.3数据库设计 17
4.3.1数据库E-R图 17
4.3.2 数据库表结构 20
第五章 系统实现 25
5.1 管理员功能实现 25
5.1.1 采购员管理 25
5.1.2 后勤人员管理 25
5.1.3 财务人员管理 26
5.2 采购员功能实现 26
5.2.1 查询物资信息 26
5.2.2 物资采购管理 27
5.3 后勤人员功能实现 27
5.3.1 物资信息管理 27
5.3.2 出库信息统计 28
5.3.3 申领物资管理 28
5.3.4 申领物资统计 29
5.4 财务人员功能实现 29
5.4.1 查询物资采购 29
5.4.2 财务报销管理 30
第六章 系统测试 31
6.1 系统测试的实施 31
6.2 系统测试用例 31
6.2.1 登录功能测试 31
6.2.2 添加部门功能测试 32
6.3 测试的结果 32
结 论 33
参考文献 34
致 谢 35