文末获取源码
开发语言:Java
框架:SSM
技术:Jsp
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7/8.0
数据库工具:Navicat11
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器
随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,高校物资采购管理系统就是信息时代变革中的产物之一。
任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场进行调研,论文需求进行分析,概要设计,系统详细设计,测试和编码等步骤,设计并实现了高校物资采购管理系统。系统选用B/S模式,应用java开发语言, MySQL为后台数据库。系统主要包括个人中心,供应商管理,学院管理,公告信息管理,采购信息管理,采购信息管理,招标信息管理,投标信息管理,中标通知管理等功能模块。
本文首先介绍了高校物资采购管理系统的技术发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及E/R图。然后,设计框架并根据设计的框架编写代码以实现系统的各个功能模块。最后,对初步完成的系统进行测试,对功能、单元和性能进行测试。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。
系统功能需求分析是通过软件开发者在参与市场调研,与管理者及用户交流后经过详细缜密的思考,再讨论研究后得出的初步系统开发所需实现功能。这是开发系统的开始,也是相当关键的一步,如果不在这个阶段制定系统所需模块,日后会带来不必要的麻烦。因此,必须严肃认真,全身心投入去做好这个步骤。
本系统采用从上往下的步骤开发,基本功能如下:
本课题要求实现一套高校物资采购管理系统,系统主要包括(管理员,供应商和学院)三个模块等功能。
通过市场调研及咨询研究,了解了用户及管理者的使用需求,于是制定了管理员,供应商和学院等模块。功能结构图如下所示:
系统进行登录,进入系统前在登录页面根据要求填写用户名和密码,选择角色等信息,点击登录进行登录操作,如图
管理员登录系统后,可以对个人中心,供应商管理,学院管理,公告信息管理,采购信息管理,采购信息管理,招标信息管理,投标信息管理,中标通知管理进行相应的操作管理,如图
供应商管理
在供应商管理页面可以对供应编号,供应名称,供应地址,联系电话等内容进行查看,修改和删除等操作,如图
学院管理
在学院管理页面可以对学院编号,学院名称,学院地址,联系电话,邮箱等内容进行查看,修改和删除等操作,如图
公告信息管理
在公告信息管理页面可以对标题,发布时间等内容进行查看,修改和删除等操作,如图
采购信息管理
在采购信息管理页面可以对采购单号,商品名称,规格,数量,商品描述,采购日期,学院编号,学院名称,是否审核,审核回复等内容进行审核,招标,查看和删除操作,如图
招标信息管理
在招标信息管理页面可以对招标编号,商品名称,规格,数量,商品描述,招标时间,招标状态等内容进行查看,修改和删除等操作;如图
投标信息管理
在投标信息管理页面可以对投标编号,商品名称,规格,报价,投标说明,投标时间,供应编号,供应名称,联系电话,是否审核,审核回复等内容进行审核,中标通知,查看和删除等操作;如图
中标通知管理
在中标通知管理页面可以对投标编号,商品名称,规格,报价,中标时间,通知内容,供应编号,供应名称等内容进行查看,修改和删除等操作;如图
供应商登录进入系统可以对个人中心,公告信息管理,招标信息管理,投标信息管理,中标通知管理等功能进行相应操作,如图
公告信息管理
在公告信息管理页面可以对标题,发布时间等内容进行查看操作,如图
招标信息管理
在招标信息管理页面可以对招标编号,商品名称,规格,数量,商品描述,招标时间,招标状态等内容进行投标和查看等操作;如图
投标信息管理
在投标信息管理页面可以对投标编号,商品名称,规格,报价,投标说明,投标时间,供应编号,供应名称,联系电话,是否审核,审核回复等内容进行查看,修改和删除等操作;如图
中标通知管理
在中标通知管理页面可以对投标编号,商品名称,规格,报价,中标时间,通知内容,供应编号,供应名称等内容进行查看等操作;如图
学院登录进入系统可以对个人中心,公告信息管理,采购信息管理等功能进行相应操作,如图
公告信息管理
在公告信息管理页面可以对标题,发布时间等内容进行查看操作,如图
采购信息管理
在采购信息管理页面可以对采购单号,商品名称,规格,数量,商品描述,采购日期,学院编号,学院名称,是否审核,审核回复等内容进行查看,修改和删除操作,如图
采购信息
/**
* 采购信息
* 后端接口
* @author
* @email
* @date 2022-04-06 11:02:20
*/
@RestController
@RequestMapping("/caigouxinxi")
public class CaigouxinxiController {
@Autowired
private CaigouxinxiService caigouxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map params,CaigouxinxiEntity caigouxinxi,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("xueyuan")) {
caigouxinxi.setXueyuanbianhao((String)request.getSession().getAttribute("username"));
}
EntityWrapper ew = new EntityWrapper();
PageUtils page = caigouxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, caigouxinxi), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map params,CaigouxinxiEntity caigouxinxi,
HttpServletRequest request){
EntityWrapper ew = new EntityWrapper();
PageUtils page = caigouxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, caigouxinxi), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( CaigouxinxiEntity caigouxinxi){
EntityWrapper ew = new EntityWrapper();
ew.allEq(MPUtil.allEQMapPre( caigouxinxi, "caigouxinxi"));
return R.ok().put("data", caigouxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(CaigouxinxiEntity caigouxinxi){
EntityWrapper< CaigouxinxiEntity> ew = new EntityWrapper< CaigouxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( caigouxinxi, "caigouxinxi"));
CaigouxinxiView caigouxinxiView = caigouxinxiService.selectView(ew);
return R.ok("查询采购信息成功").put("data", caigouxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
CaigouxinxiEntity caigouxinxi = caigouxinxiService.selectById(id);
return R.ok().put("data", caigouxinxi);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
CaigouxinxiEntity caigouxinxi = caigouxinxiService.selectById(id);
return R.ok().put("data", caigouxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody CaigouxinxiEntity caigouxinxi, HttpServletRequest request){
caigouxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(caigouxinxi);
caigouxinxiService.insert(caigouxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody CaigouxinxiEntity caigouxinxi, HttpServletRequest request){
caigouxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(caigouxinxi);
caigouxinxiService.insert(caigouxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody CaigouxinxiEntity caigouxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(caigouxinxi);
caigouxinxiService.updateById(caigouxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
caigouxinxiService.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 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 wrapper = new EntityWrapper();
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("xueyuan")) {
wrapper.eq("xueyuanbianhao", (String)request.getSession().getAttribute("username"));
}
int count = caigouxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
上传文件
@RequestMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file, String type,HttpServletRequest request) throws Exception {
if (file.isEmpty()) {
throw new EIException("上传文件不能为空");
}
String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
String fileName = new Date().getTime()+"."+fileExt;
File dest = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
file.transferTo(dest);
/**
* 如果使用idea或者eclipse重启项目,发现之前上传的图片或者文件丢失,将下面一行代码注释打开
* 请将以下的"D:\\ssmpiv99\\src\\main\\webapp\\upload"替换成你本地项目的upload路径,
* 并且项目路径不能存在中文、空格等特殊字符
*/
//FileUtils.copyFile(dest, new File("D:\\ssmpiv99\\src\\main\\webapp\\upload"+"/"+fileName)); /**修改了路径以后请将该行最前面的//注释去掉**/
if(StringUtils.isNotBlank(type) && type.equals("1")) {
ConfigEntity configEntity = configService.selectOne(new EntityWrapper().eq("name", "faceFile"));
if(configEntity==null) {
configEntity = new ConfigEntity();
configEntity.setName("faceFile");
configEntity.setValue(fileName);
} else {
configEntity.setValue(fileName);
}
configService.insertOrUpdate(configEntity);
}
return R.ok().put("file", fileName);
}
供应商注册
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody GongyingshangEntity gongyingshang){
//ValidatorUtils.validateEntity(gongyingshang);
GongyingshangEntity user = gongyingshangService.selectOne(new EntityWrapper().eq("gongyingbianhao", gongyingshang.getGongyingbianhao()));
if(user!=null) {
return R.error("注册用户已存在");
}
Long uId = new Date().getTime();
gongyingshang.setId(uId);
gongyingshangService.insert(gongyingshang);
return R.ok();
}