基于SSM+Vue的物流管理系统的设计与实现~
开发语言:Java
数据库:MySQL
技术:Spring+SpringMVC+MyBatis+Vue
工具:IDEA/Ecilpse、Navicat、Maven
系统展示
管理员界面
用户界面
配送员界面
摘要
本物流管理系统设计目标是实现物流的信息化管理,提高管理效率,使得物流管理作规范化、科学化、高效化。本文重点阐述了物流管理系统的开发过程,以实际运用为开发背景,基于SSM框架,运用了Java编程语言和MYSQL数据库进行开发,充分保证系统的安全性和稳定性。本系统界面良好,操作简单方便,通过系统概述、系统分析、系统设计、数据库设计、系统测试这几个部分,详细的说明了系统的开发过程,最后并对整个开发过程进行了总结,实现了物流相关信息管理的重要功能。本物流管理系统运行效果稳定,操作方便、快捷,界面友好,是一个功能全面、实用性好、安全性高,并具有良好的可扩展性、可维护性的物流管理平台。本系统可运用SSM框架,结构清晰明了,网页采用的是JSP进行开发,相比Html更适合。系统使用Java语言编写,JAVA语言有着庞大的用户以及学习群体。数据库采用MySQL。这些都是比较基础,使用较为广泛的技术,因此具有技术可行性。
研究意义
当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。对于物流管理方面来说,虽然现在已经有利用信息技术运作物流管理的例子,但大都处于起步阶段,有的仅仅是一些静态的网页设计或单纯的搬一些必需的表格上电脑,缺乏互动性,用户不能参与,无法实现寄件申请,这些并没有很好的利用信息技术实现真正的物流管理自动化。因此为了提高物流管理效率,选择开发本物流管理系统。本物流管理系统实现了物流管理自主化、智能化,达到提高管理效率和质量,满足物流管理要求,节省人力资源的目的。进入到这个测试环节,说明系统的功能大致上是不存在问题了,这个部分主要就是对系统功能进行再次确认,看看系统功能是不是符合需求规格说明书上面的内容,此外,也需要对程序的性能进行检测,还有系统具有的其他特点是不是都能满足用户的需求。如果系统是专门针对具体某个用户而开发的,那么系统的验收测试就是这个用户来进行,如果系统的使用者是许多用户的话,那么采用的就是Alpha测试和Beta测试来揭露错误。
研究目的
Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任何地方都可以运行。除此之外,它还拥有简单的语法和实用的类库,让编程人员可以尽可能将精力集中在问题的求解上,并且许多开源项目和科研成果都是采用它实现的。所谓数据库,实际上就是一个容器,按照数据结构来组织、存储和管理。数据库的作用就是为大量的信息进行管理并提供高效的解决方案。MySQL支持标准化数据库查询语言SQL。MySQL是一款非常适合个人开发者或小型组织开发团体的数据库管理系统,因为它是开源并且免费的,体积小、速度快、成本低以及其最重要的一点开放源码,深受程序设计人员的喜爱,这也让它成为了许许多多中小型开发网站数据库的首选,同时提供了多种开发的连接API。从逻辑上B/S架构可以分为三层结构体系,客户机层浏览器,Web层和DB服务器层。客户机层可以将用户所需要的数据信息通过后端数据库数据模块的读取,显示到用户的客户层浏览器中。Web层主要是实现浏览器上的功能,来分析处理数据进行端口的对接。可以访问COM,ADO等对象。DB服务器层是整个B/S框架的核心,为其他技术提供数据库的支持,并对各种数据库进行更新,删除,添加,查询等功能。每一套系统的开发,都得花费一定的时间去研究。需要使用的软件也是有很多需要花钱。本系统使用的MyEclipse、MySQL数据库及Google Chrome浏览器等软件都是网上均可以下载使用的,供程序员免费使用,无需收费。从开发角度来说,成本低,因此具有经济可行性。
代码
java
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.PeisongxinxiEntity;
import com.entity.view.PeisongxinxiView;
import com.service.PeisongxinxiService;
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 2021-04-12 20:16:54
*/
@RestController
@RequestMapping("/peisongxinxi")
public class PeisongxinxiController {
@Autowired
private PeisongxinxiService peisongxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,PeisongxinxiEntity peisongxinxi,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("peisongyuan")) {
peisongxinxi.setPeisongyuangonghao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<PeisongxinxiEntity> ew = new EntityWrapper<PeisongxinxiEntity>();
PageUtils page = peisongxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, peisongxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,PeisongxinxiEntity peisongxinxi, HttpServletRequest request){
EntityWrapper<PeisongxinxiEntity> ew = new EntityWrapper<PeisongxinxiEntity>();
PageUtils page = peisongxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, peisongxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( PeisongxinxiEntity peisongxinxi){
EntityWrapper<PeisongxinxiEntity> ew = new EntityWrapper<PeisongxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( peisongxinxi, "peisongxinxi"));
return R.ok().put("data", peisongxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(PeisongxinxiEntity peisongxinxi){
EntityWrapper< PeisongxinxiEntity> ew = new EntityWrapper< PeisongxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( peisongxinxi, "peisongxinxi"));
PeisongxinxiView peisongxinxiView = peisongxinxiService.selectView(ew);
return R.ok("查询配送信息成功").put("data", peisongxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
PeisongxinxiEntity peisongxinxi = peisongxinxiService.selectById(id);
return R.ok().put("data", peisongxinxi);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
PeisongxinxiEntity peisongxinxi = peisongxinxiService.selectById(id);
return R.ok().put("data", peisongxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody PeisongxinxiEntity peisongxinxi, HttpServletRequest request){
peisongxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(peisongxinxi);
peisongxinxiService.insert(peisongxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody PeisongxinxiEntity peisongxinxi, HttpServletRequest request){
peisongxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(peisongxinxi);
peisongxinxiService.insert(peisongxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody PeisongxinxiEntity peisongxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(peisongxinxi);
peisongxinxiService.updateById(peisongxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
peisongxinxiService.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<PeisongxinxiEntity> wrapper = new EntityWrapper<PeisongxinxiEntity>();
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("peisongyuan")) {
wrapper.eq("peisongyuangonghao", (String)request.getSession().getAttribute("username"));
}
int count = peisongxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
总结
系统测试是通过在设定的特定的环境下执行程序来检测环境发生错误的不可或缺的阶段。系统测试包括安全测试、压力测试、回复测试等等,这些是保障我们所开发的程序与系统的优良质感非常为之重要的部分。在项目的开发过程中,出现各种漏洞各种错误是极其正常的事情,有些错误可以凭借着开发工具发现,迅速找出并修改,而有些错误漏洞则是在一些细节上出现逻辑错误,导致引起一些列的错误,这类错觉有时藏得很深,会让我们在排除的过程中浪费大量的时间和精力。但随着时间的推移,经验的上涨,以后发现这类错误的时间一定会慢慢缩小。系统测试的目的主要在于检查所实现的代码成品能否满足最初设定的目标以及系统需求,从测试的过程中发现与所需要的功能不同的错误,包括达不到预定需求甚至与预定需求完全矛盾的错误,并且在后续的开发上进行更改,甚至提出更加符合项目的新需求。测试的顺序就是先进行单元测试,这个测试没有问题之后,才是进行集成测试,紧接着就是进行程序的确认测试。接下来就对这几个在程序测试中占有一定分量的测试步骤进行阐述。