1、编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第84页 共84页作者:尤帅物流系统开发文档物流系统开发文档1目录11. 概述22. 系统分析与总体设计32.1系统分析32.1.1需求描述32.1.2用例分析32.2总体设计42.2.1系统软件结构设计42.2.2功能模块设计52.2.3数据库设计52.2.4系统结构设计82.2.5界面设计样式102.2.6通用组件配置文件123. 功能模块的详细设计与实现123.1接单管理模块123.1.1接单管理总体结构123.1.2订单信息MVC模式的设计123.1.3接单信息实体类的实现133.1.4接单信息实体接口类143.1.5接
2、单信息实体接口的实现类153.1.6接单信息业务逻辑类173.1.7接单信息业务逻辑类的实现类173.1.8接单信息控制类193.1.9视图层的实现243.2送货员信息管理模块253.2.1送货员信息管理总体结构263.2.2送货员信息MVC模式的设计263.2.3送货员信息实体类的实现273.2.4送货员信息实体接口类293.2.5送货员信息实体接口的实现类293.2.6送货员信息业务逻辑类323.2.7送货员信息业务逻辑类的实现类333.2.8送货员信息控制类343.2.9视图层的实现403.3送货管理模块423.3.1送货管理总体结构423.3.2送货管理MVC模式的设计423.3.3送
3、货管理实体类的实现423.3.4送货管理实体接口类443.3.5送货管理实体接口的实现类443.3.6送货管理业务逻辑类483.3.7送货管理业务逻辑类的实现493.3.8送货管理控制类533.3.9视图层的实现583.4仓库管理模块593.4.1仓库管理总体结构593.4.2仓库管理MVC模式的设计593.4.3仓库管理实体类的实现593.4.4仓库管理实体接口类613.4.5仓库管理实体接口的实现类623.4.6仓库管理业务逻辑类673.4.7仓库管理业务逻辑类的实现673.4.8仓库管理控制类703.4.9视图层的实现743.5仓库管理模块763.5.1视图层的实现764. 系统配置78
4、4.1物流系统给的数据库配置如下:784.2引入Structs2支持791. 概述本报告对一个物流系统的分析、设计及编码实现进行了介绍。该报告说明了物流系统的需求,软件设计以及编码实现。本系统采用J2EE进行实现,采用MVC模式设计结构,采用Struts2+Hibernate框架+MSQL数据库系统。2. 系统分析与总体设计2.1系统分析2.1.1需求描述物流系统是用于物流公司处理物流与配送的业务,这个系统主要具有以下功能:1) 仓库管理员揽货点节后用户的货物、称重、打包、填单、收费,用于系统管理员将信息输入计算机中,要求将送货单号扫描入数据库。2) 送货员到各个网点接送货物,将货物集中到物流
5、仓库。3) 仓库管理员每天将集中的货物根据送达目的地不同而分拣成不同区域。有送货员分别送到不同的地方或收货人手中。4) 各个阶段均由系统管理员通过扫描进入数据库。5) 客户可以根据送货单号查询到货物状态6) 财务部分根据送货单的信息处理收货以及各相关人的结算。2.1.2用例分析用例图是用来显示外部参与者与系统的交互吗,能够更直观的描述系统的功能。从角色来看,物流系统主要分为5个角色,分别是:系统管理员、客户、送货员、仓库管理员、签收人。下图为物流系统的用例图。2.2总体设计2.2.1系统软件结构设计2.2.2功能模块设计子系统模块名子功能描述后台订单管理模块订单信息输入管理员输入订单信息订单查
6、询管理员查询订单信息订单信息更新管理员更新订单信息送货员信息管理模块送货员信息输入管理员输入送货员信息送货员信息更新管理员更新送货员信息送货员信息查询管理员查询送货员信息工资结算管理员结算查询送货员的工资送货管理模块送货明细管理员查询送货明细信息订单签收送货员送货,让客户签收订单支付客户付款送货员工资结算管理员结算送货员的工资仓库管理模块货物信息输入管理员输入货物信息货物分拣管理员进行货物分拣处理货物发送管理员把货物让送货员发送货物信息更新管理员更新货物信息2.2.3数据库设计货物单(t_send_foods)货物编号字段名是否为空长度描述1idnotint主键2Consignor_namen
7、otVarchar(64)发货员名字3Consignor_addressnotVarchar(64)发货地址4Consignor_telnotVarchar(64)发货人电话号码5Recess_namenotVarchar(32)收货人名字6Recess_telnotVarchar(32)收货人电话号码7Recess_addressnotVarchar(32)收货人地址8Charge_methodnotVarchar(64)收费方法9costnotfloat费用10Goods_weightnotVarchar(32)货物重量11Goods_volumenotVarchar(32)货物体积12I
8、s_signnotInt(3)是否签收13Is_costnotInt(3)是否收费14acceptornotVarchar(3)受理人送货员(t_delivery)送货员编号字段名是否为空长度描述1idnotint主键2Worker_nubnotVarchar(64)职工号3Delivery_addressnotVarchar(64)送货员家庭地址4Delivery_telnotVarchar(64)送货员电话号码5Delivery_namenotVarchar(32)送货员名字6sexnotVarchar(32)性别7agenotVarchar(32)年龄8Id_carnotVarchar(
9、64)身份证号9Delivery_areanotfloat送货范围入库明细表(t_warehousing_detail)入库明细表编号字段名是否为空长度描述1idnotint主键2Warehousing_datenotVarchar(64)入库时间3Send_idnotint送货单号4Warehouse_managernotVarchar(64)仓库管理员5Warehousing_areanotVarchar(32)入库存放区分拣明细表(t_manage_detail)入库明细表编号字段名是否为空长度描述1idnotint主键2manage_datenotVarchar(64)分拣时间3Sen
10、d_idnotint送货单号4Manage_namenotVarchar(64)分拣员5areanotVarchar(32)目的地区域送货明细表(t_detail)送货明细表编号字段名是否为空长度描述1idnotint主键2Send_datenottime送货时间3Send_idnotint送货单号4Charge_methodnotVarchar(64)收费方法5Consignor_namenotVarchar(32)发货员名字6Delivery_namenotVarchar(32)送货员名字7Real_costnotVarchar(32)实收费用8Send_statusnotVarchar(
11、64)送货状态9Sign_nameVarchar(64)签收人姓名10Is_signVarchar(64)是否签收费用结算表(t_settlement)送货明细表编号字段名是否为空长度描述1idnotint主键2settlement_datenottime结算时间3Send_idnotint送货职工号4Send_nubnotVarchar(64)送货数量5Lose_debitsnotVarchar(32)损耗扣款6Real_moneynotVarchar(32)实发总数7Total_commissionnotVarchar(32)提成总数8salarynotVarchar(64)底薪 物流系统
12、数据库表及其关系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业务逻辑层实现
13、类org.logistic.util配置文件包logisticsSys包的划分 WebRoot 文件的划分2.2.5界面设计样式该部分为界面设计的公共部分,给界面提供样式。2.2.6通用组件配置文件3. 功能模块的详细设计与实现3.1接单管理模块3.1.1接单管理总体结构3.1.2订单信息MVC模式的设计层次功能所在的包/位置程序M接单信息管理相关实体接口类org.logistic.daoSendFoodsDao.java接单信息管理相关实体接口实现类org.logistic.dao.implSendFoodsDao,impl.java接单信息管理相关实体类org.logistic.entit
14、ySendFoods.java接单信息管理相关实体类的配置org.logistic.entitySendFoods.hbm.xmlV接单信息管理逻辑类org.logistic.serviceSendFoodsService.java接单信息管理的逻辑实现类org.logistic.service.implSendFoodsService,impl.java接单信息管理相关实体类org.logistic.actionSendFoodsAction.javaC接单输入页面logisticsSysjspSend_foods_Add.jsp接单信息列表页面logisticsSysjspSend_foo
15、ds_list.jsp接单信息编辑页面logisticsSysjspSend_foods_update.jsp接单入库页面logisticsSysjspwarehourse.jsp3.1.3接单信息实体类的实现SendFoods.javapublic class SendFoods private int id;private String consignorName;private String consignorAddress;private String consignorTel;private String recessName;private String recessTel;pri
16、vate 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!DOCTYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN 3.1.4接单信息实体
17、接口类SendFoodDao.javapublic interface SendFoodsDao extends IBaseDaopublic boolean warehouse(WarehousingDetail warehousingDetail);public String getHQL(SendFoods sendFoods);3.1.5接单信息实体接口的实现类SendFoodDaoImpl.javapublic class SendFoodsDaoImpl extends HibernateSession implements SendFoodsDao public boolean
18、delete(int id) return super.deleteEntityBean(SendFoods.class,id); SuppressWarnings(unchecked)public List findAll(String sendFoods) return super.getQueryList(from +sendFoods);public boolean save(SendFoods sendFoods) return super.insertEntityBean(sendFoods);public boolean update(SendFoods sendFoods) r
19、eturn super.updateEntityBean(sendFoods);SuppressWarnings(unchecked)public List 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 findBySQLF
20、orPage(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
21、 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
22、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=
23、+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.javapublic interface SendFoodsService public boolean del
24、ete(int id);public List findAll(String table);public List 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
25、(WarehousingDetail warehousingDetail);3.1.7接单信息业务逻辑类的实现类SendFoodsServiceImpl.javapublic class SendFoodsServiceImpl implements SendFoodsService private SendFoodsDao sendFoodsDao = new SendFoodsDaoImpl();public boolean delete(int id) return sendFoodsDao.delete(id);public List findAll(String table) ret
26、urn sendFoodsDao.findAll(table);public List 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 S
27、endFoodsDao 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) Strin
28、g 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.co
29、untCurrentPage(page); List 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); p
30、ageBean.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.javapublic class
31、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 sendFoodsList
32、; 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;pub
33、lic List getSendFoodsList() return sendFoodsList;public void setSendFoodsList(List 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
34、= 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 tex