资源描述
作者:尤帅
物流系统开发文档
物流系统开发文档 1
目录 1
1. 概述 2
2. 系统分析与总体设计 3
2.1系统分析 3
2.1.1需求描述 3
2.1.2用例分析 3
2.2总体设计 4
2.2.1系统软件结构设计 4
2.2.2功能模块设计 5
2.2.3数据库设计 5
2.2.4系统结构设计 8
2.2.5界面设计样式 10
2.2.6通用组件配置文件 12
3. 功能模块的详细设计与实现 12
3.1接单管理模块 12
3.1.1接单管理总体结构 12
3.1.2订单信息MVC模式的设计 12
3.1.3接单信息实体类的实现 13
3.1.4接单信息实体接口类 14
3.1.5接单信息实体接口的实现类 15
3.1.6接单信息业务逻辑类 17
3.1.7接单信息业务逻辑类的实现类 17
3.1.8接单信息控制类 19
3.1.9视图层的实现 24
3.2送货员信息管理模块 25
3.2.1送货员信息管理总体结构 26
3.2.2送货员信息MVC模式的设计 26
3.2.3送货员信息实体类的实现 27
3.2.4送货员信息实体接口类 29
3.2.5送货员信息实体接口的实现类 29
3.2.6送货员信息业务逻辑类 32
3.2.7送货员信息业务逻辑类的实现类 33
3.2.8送货员信息控制类 34
3.2.9视图层的实现 40
3.3送货管理模块 42
3.3.1送货管理总体结构 42
3.3.2送货管理MVC模式的设计 42
3.3.3送货管理实体类的实现 42
3.3.4送货管理实体接口类 44
3.3.5送货管理实体接口的实现类 44
3.3.6送货管理业务逻辑类 48
3.3.7送货管理业务逻辑类的实现 49
3.3.8送货管理控制类 53
3.3.9视图层的实现 58
3.4仓库管理模块 59
3.4.1仓库管理总体结构 59
3.4.2仓库管理MVC模式的设计 59
3.4.3仓库管理实体类的实现 59
3.4.4仓库管理实体接口类 61
3.4.5仓库管理实体接口的实现类 62
3.4.6仓库管理业务逻辑类 67
3.4.7仓库管理业务逻辑类的实现 67
3.4.8仓库管理控制类 70
3.4.9视图层的实现 74
3.5仓库管理模块 76
3.5.1视图层的实现 76
4. 系统配置 78
4.1物流系统给的数据库配置如下: 78
4.2引入Structs2支持 79
1. 概述
本报告对一个物流系统的分析、设计及编码实现进行了介绍。该报告说明了物流系统的需求,软件设计以及编码实现。
本系统采用J2EE进行实现,采用MVC模式设计结构,采用Struts2+Hibernate框架+MSQL数据库系统。
2. 系统分析与总体设计
2.1系统分析
2.1.1需求描述
物流系统是用于物流公司处理物流与配送的业务,这个系统主要具有以下功能:
1) 仓库管理员揽货点节后用户的货物、称重、打包、填单、收费,用于系统管理员将信息输入计算机中,要求将送货单号扫描入数据库。
2) 送货员到各个网点接送货物,将货物集中到物流仓库。
3) 仓库管理员每天将集中的货物根据送达目的地不同而分拣成不同区域。有送货员分别送到不同的地方或收货人手中。
4) 各个阶段均由系统管理员通过扫描进入数据库。
5) 客户可以根据送货单号查询到货物状态
6) 财务部分根据送货单的信息处理收货以及各相关人的结算。
2.1.2用例分析
用例图是用来显示外部参与者与系统的交互吗,能够更直观的描述系统的功能。从角色来看,物流系统主要分为5个角色,分别是:系统管理员、客户、送货员、仓库管理员、签收人。下图为物流系统的用例图。
2.2总体设计
2.2.1系统软件结构设计
2.2.2功能模块设计
子系统
模块名
子功能
描述
后台
订单管理模块
订单信息输入
管理员输入订单信息
订单查询
管理员查询订单信息
订单信息更新
管理员更新订单信息
送货员信息管理模块
送货员信息输入
管理员输入送货员信息
送货员信息更新
管理员更新送货员信息
送货员信息查询
管理员查询送货员信息
工资结算
管理员结算查询送货员的工资
送货管理模块
送货明细
管理员查询送货明细信息
订单签收
送货员送货,让客户签收
订单支付
客户付款
送货员工资结算
管理员结算送货员的工资
仓库管理模块
货物信息输入
管理员输入货物信息
货物分拣
管理员进行货物分拣处理
货物发送
管理员把货物让送货员发送
货物信息更新
管理员更新货物信息
2.2.3数据库设计
货物单
(t_send_foods)货物
编号
字段名
是否为空
长度
描述
1
id
not
int
主键
2
Consignor_name
not
Varchar(64)
发货员名字
3
Consignor_address
not
Varchar(64)
发货地址
4
Consignor_tel
not
Varchar(64)
发货人电话号码
5
Recess_name
not
Varchar(32)
收货人名字
6
Recess_tel
not
Varchar(32)
收货人电话号码
7
Recess_address
not
Varchar(32)
收货人地址
8
Charge_method
not
Varchar(64)
收费方法
9
cost
not
float
费用
10
Goods_weight
not
Varchar(32)
货物重量
11
Goods_volume
not
Varchar(32)
货物体积
12
Is_sign
not
Int(3)
是否签收
13
Is_cost
not
Int(3)
是否收费
14
acceptor
not
Varchar(3)
受理人
送货员
(t_delivery)送货员
编号
字段名
是否为空
长度
描述
1
id
not
int
主键
2
Worker_nub
not
Varchar(64)
职工号
3
Delivery_address
not
Varchar(64)
送货员家庭地址
4
Delivery_tel
not
Varchar(64)
送货员电话号码
5
Delivery_name
not
Varchar(32)
送货员名字
6
sex
not
Varchar(32)
性别
7
age
not
Varchar(32)
年龄
8
Id_car
not
Varchar(64)
身份证号
9
Delivery_area
not
float
送货范围
入库明细表
(t_warehousing_detail)入库明细表
编号
字段名
是否为空
长度
描述
1
id
not
int
主键
2
Warehousing_date
not
Varchar(64)
入库时间
3
Send_id
not
int
送货单号
4
Warehouse_manager
not
Varchar(64)
仓库管理员
5
Warehousing_area
not
Varchar(32)
入库存放区
分拣明细表
(t_manage_detail)入库明细表
编号
字段名
是否为空
长度
描述
1
id
not
int
主键
2
manage_date
not
Varchar(64)
分拣时间
3
Send_id
not
int
送货单号
4
Manage_name
not
Varchar(64)
分拣员
5
area
not
Varchar(32)
目的地区域
送货明细表
(t_detail)送货明细表
编号
字段名
是否为空
长度
描述
1
id
not
int
主键
2
Send_date
not
time
送货时间
3
Send_id
not
int
送货单号
4
Charge__method
not
Varchar(64)
收费方法
5
Consignor_name
not
Varchar(32)
发货员名字
6
Delivery_name
not
Varchar(32)
送货员名字
7
Real_cost
not
Varchar(32)
实收费用
8
Send_status
not
Varchar(64)
送货状态
9
Sign_name
Varchar(64)
签收人姓名
10
Is_sign
Varchar(64)
是否签收
费用结算表
(t_settlement)送货明细表
编号
字段名
是否为空
长度
描述
1
id
not
int
主键
2
settlement_date
not
time
结算时间
3
Send_id
not
int
送货职工号
4
Send_nub
not
Varchar(64)
送货数量
5
Lose_debits
not
Varchar(32)
损耗扣款
6
Real_money
not
Varchar(32)
实发总数
7
Total_commission
not
Varchar(32)
提成总数
8
salary
not
Varchar(64)
底薪
物流系统数据库表及其关系
2.2.4系统结构设计
系统采用分层结构,整体上分为4层:视图层、控制层、业务逻辑层和数据访问层
项目名称为logisticsSys。数据访问层与业务逻辑层采用SH框架的Struts2+Hibernate技术实现。视图层和控制层采用JSP技术实现。
包名
说明
org.logistic.action
控制类包
org.logistic.dao
数据访问层接口包
org.logistic.dao.impl
数据访问层实现类包
org.logistic.entity
数据模型类包,实体包
org.logistic.service
业务逻辑层接口包
org.logistic.service.impl
业务逻辑层实现类
org.logistic.util
配置文件包
logisticsSys包的划分
WebRoot 文件的划分
2.2.5界面设计样式
该部分为界面设计的公共部分,给界面提供样式。
2.2.6通用组件配置文件
3. 功能模块的详细设计与实现
3.1接单管理模块
3.1.1接单管理总体结构
3.1.2订单信息MVC模式的设计
层次
功能
所在的包/位置
程序
M
接单信息管理相关实体接口类
org.logistic.dao
SendFoodsDao.java
接单信息管理相关实体接口实现类
org.logistic.dao.impl
SendFoodsDao,impl.java
接单信息管理相关实体类
org.logistic.entity
SendFoods.java
接单信息管理相关实体类的配置
org.logistic.entity
SendFoods.hbm.xml
V
接单信息管理逻辑类
org.logistic.service
SendFoodsService.java
接单信息管理的逻辑实现类
org.logistic.service.impl
SendFoodsService,impl.java
接单信息管理相关实体类
org.logistic.action
SendFoodsAction.java
C
接单输入页面
logisticsSys\jsp
Send_foods_Add.jsp
接单信息列表页面
logisticsSys\jsp
Send_foods_list.jsp
接单信息编辑页面
logisticsSys\jsp
Send_foods_update.jsp
接单入库页面
logisticsSys\jsp
warehourse.jsp
3.1.3接单信息实体类的实现
SendFoods.java
public class SendFoods {
private int id;
private String consignorName;
private String consignorAddress;
private String consignorTel;
private String recessName;
private String recessTel;
private String chargeMethod;
private float cost;
private String goodsWeight;
private String goodsVolume;
private boolean isSign;
private boolean isCost;
private String acceptor;
private String recessAddress;
}
SendFoods.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"
<hibernate-mapping>
<class name="org.logistic.entity.SendFoods" table="t_send_foods">
<id name="id" type="int" unsaved-value="null">
<generator class="identity"/>
</id>
<property name="consignorName"><column name="consignor_name"></column>
</property>
<property name="consignorAddress" ><column name="consignor_address"></column>
</property>
<property name="consignorTel"><column name="consignor_tel"></column>
</property>
<property name="recessName" ><column name="recess_name"></column>
</property>
<property name="recessAddress" ><column name="recess_address"></column>
</property>
<property name="recessTel"><column name="recess_tel"></column>
</property>
<property name="cost"><column name="cost"></column>
</property>
<property name="chargeMethod"><column name="charge_method"></column>
</property>
<property name="goodsWeight"><column name="goods_weight"></column>
</property>
<property name="goodsVolume"><column name="goods_volume"></column>
</property>
<property name="isSign"><column name="is_sign"></column>
</property>
<property name="isCost"><column name="is_cost"></column>
</property>
<property name="acceptor"></property>
</class>
</hibernate-mapping>
3.1.4接单信息实体接口类
SendFoodDao.java
public interface SendFoodsDao extends IBaseDao<SendFoods>{
public boolean warehouse(WarehousingDetail warehousingDetail);
public String getHQL(SendFoods sendFoods);
}
3.1.5接单信息实体接口的实现类
SendFoodDaoImpl.java
public class SendFoodsDaoImpl extends HibernateSession implements SendFoodsDao {
public boolean delete(int id) {
return super.deleteEntityBean(SendFoods.class,id);
}
@SuppressWarnings("unchecked")
public List<SendFoods> findAll(String sendFoods) {
return super.getQueryList("from "+sendFoods);
}
public boolean save(SendFoods sendFoods) {
return super.insertEntityBean(sendFoods);
}
public boolean update(SendFoods sendFoods) {
return super.updateEntityBean(sendFoods);
}
@SuppressWarnings("unchecked")
public List<SendFoods> findById(int id) {
String sql = "from SendFoods where id="+id;
return super.getQueryList(sql);
}
/**
* 分页查询
* @param hql 查询的条件
* @param offset 开始记录
* @param length 一次查询几条记录
* @return
*/
@SuppressWarnings("unchecked")
public List<SendFoods> findBySQLForPage(String hql, int offset, int length) {
return super.getQueryList(hql, offset, length);
}
/**
* 查询所有记录数
* @return 总记录数
*/
public int getAllRowCount(String hql) {
return super.getQueryList(hql).size();
}
public boolean warehouse(WarehousingDetail warehousingDetail) {
String hql1="from WarehousingDetail w where w.sendId='"+warehousingDetail.getSendId()+"'";
WarehousingDetail w=(WarehousingDetail)super.getEntityBean(hql1);
//如果查询有结果,则入库失败
if(w==null){
warehousingDetail.setWarehousingDate(new Date());
return super.insertEntityBean(warehousingDetail);
}
return false;
}
public String getHQL(SendFoods sendFoods){
String hql = "from SendFoods s"; //查询语句
if(sendFoods!=null){
if(sendFoods.getConsignorName()!=null){
hql+=" where s.consignorName='"+sendFoods.getConsignorName()+"'";
}
else if(sendFoods.getConsignorTel()!=null){
hql+=" where s.consignorTel='"+sendFoods.getConsignorTel()+"'";
}
else if(sendFoods.getAcceptor()!=null){
hql+=" where s.acceptor='"+sendFoods.getAcceptor()+"'";
}
else if(sendFoods.getRecessTel()!=null){
hql+=" where s.recessTel='"+sendFoods.getRecessTel()+"'";
}
else {
if(sendFoods.getIsSign()){
hql+=" where s.isSign=1";
}
else{
hql+=" where s.isSign=0";
}
}
}
return hql;
}
}
3.1.6接单信息业务逻辑类
SendFoodsService.java
public interface SendFoodsService {
public boolean delete(int id);
public List<SendFoods> findAll(String table);
public List<SendFoods> findById(int id);
public boolean save(SendFoods sendFoods);
public boolean update(SendFoods sendFoods);
public PageBean queryForPage(int pageSize,int currentPage,SendFoods sendFoods);
public int getAllRowCount(String hql);
public boolean warehouse(WarehousingDetail warehousingDetail);
}
3.1.7接单信息业务逻辑类的实现类
SendFoodsServiceImpl.java
public class SendFoodsServiceImpl implements SendFoodsService {
private SendFoodsDao sendFoodsDao = new SendFoodsDaoImpl();
public boolean delete(int id) {
return sendFoodsDao.delete(id);
}
public List<SendFoods> findAll(String table) {
return sendFoodsDao.findAll(table);
}
public List<SendFoods> findById(int id) {
return sendFoodsDao.findById(id);
}
public boolean save(SendFoods sendFoods) {
return sendFoodsDao.save(sendFoods);
}
public boolean update(SendFoods sendFoods) {
sendFoodsDao.findById(sendFoods.getId());
return sendFoodsDao.update(sendFoods);
}
public SendFoodsDao getSendFoodsDao() {
return sendFoodsDao;
}
public void setSendFoodsDao(SendFoodsDao sendFoodsDao) {
this.sendFoodsDao = sendFoodsDao;
}
/**
* 分页查询
* @param hql 查询的条件
* @param offset 开始记录
* @param length 一次查询几条记录
* @return
*/
public PageBean queryForPage(int pageSize, int page,SendFoods sendFoods) {
String hql = sendFoodsDao.getHQL(sendFoods); //查询语句
int allRow = sendFoodsDao.getAllRowCount(hql); //总记录数
int totalPage = PageBean.countTotalPage(pageSize, allRow); //总页数
final int offset = PageBean.countOffset(pageSize, page); //当前页开始记录
final int length = pageSize; //每页记录数
final int currentPage = PageBean.countCurrentPage(page);
List<SendFoods> list = sendFoodsDao.findBySQLForPage(hql,offset, length); //"一页"的记录
//把分页信息保存到Bean中
PageBean pageBean = new PageBean();
pageBean.setPageSize(pageSize);
pageBean.setCurrentPage(currentPage);
pageBean.setAllRow(allRow);
pageBean.setTotalPage(totalPage);
pageBean.setList(list);
pageBean.init();
return pageBean;
}
/**
* 查询所有记录数
* @return 总记录数
*/
public int getAllRowCount(String hql) {
return sendFoodsDao.getAllRowCount(hql);
}
//进库
public boolean warehouse(WarehousingDetail warehousingDetail) {
return sendFoodsDao.warehouse(warehousingDetail);
}
}
3.1.8接单信息控制类
SendFoodsAction.java
public class SendFoodsAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private SendFoodsService sendFoodsService = new SendFoodsServiceImpl();
private int page = 1;
private int pageSize = 10;
private PageBean pageBean; //包含分布信息的bean
private SendFoods sendFoods;
private List<SendFoods> sendFoodsList;
private String select="";
private String text="";
private WarehousingDetail warehousingDetail;
private String id;
public WarehousingDetail getWarehousingDetail() {
return warehousingDetail;
}
public void setWarehousingDetail(WarehousingDetail warehousingDetail) {
this.warehousingDetail = warehousingDetail;
}
public List<SendFoods> getSendFoodsList() {
return sendFoodsList;
}
public void setSendFoodsList(List<SendFoods> sendFoodsList) {
this.sendFoodsList = sendFoodsList;
}
public String getSelect() {
return select;
}
public void setSelect(String select) {
this.select = select;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public SendFoods getSendFoods() {
return sendFoods;
}
public void setSendFoods(SendFoods sendFoods) {
this.sendFoods = sendFoods;
}
public void setSendFoodsService(SendFoodsService sendFoodsService) {
this.sendFoodsService = sendFoodsService;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public PageBean getPageBean() {
return pageBean;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public void setPageBean(PageBean pageBean) {
this.pageBean = pageBean;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
/**
* 获取货物单并分页
展开阅读全文