物流管理系统.docx
- 文档编号:29058352
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:32
- 大小:93.07KB
物流管理系统.docx
《物流管理系统.docx》由会员分享,可在线阅读,更多相关《物流管理系统.docx(32页珍藏版)》请在冰豆网上搜索。
物流管理系统
✧第一天国际物流杰信商贸+搭建环境
1.项目背景
杰信商贸是国际物流行业一家专门从事进出口玻璃器皿贸易的公司。
公司总部位于十一个朝代的帝王之都西安,业务遍及欧美。
随着公司不断发展壮大,旧的信息系统已无法满足公司的快速发展需求,妨碍公司成长,在此背景下,公司领导决定研发《杰信商贸综合管理平台》。
《杰信商贸综合管理平台》分三期完成。
一期完成仓储管理(包括:
采购单、仓库、货物、条形码、入库、出库、退货、盘点、库存、库存上限报警、统计查询)和展会管理(包括:
展会管理、出单管理),形成货物统一数字化管理。
二期完成货运全流程管理,包括购销合同、出货表统计、出口报运单、HOME装箱单、装箱单、委托书、发票、财务统计等。
三期完成决策分析(包括:
成本分析图、销售情况统计、重点客户、经营情况同期比对统计、工作绩效),为公司经营决策提供数据支持。
a)用例图
2.了解系统是所有功能模块
利用visio画系统功能结构图,目的让开发人员了解都有哪些业务模块,方便分工合作,根据每个页面模块的难度,复杂,投入的人力情况来衡量每个模块多少钱。
验收标准。
数据库建模,业界都使用PowerDesinger建模
3.系统架构
4.业务:
生产厂家
a)功能
在货物模块和附近模块,它们都有个生产厂家,讲生产厂家信息提出,成为一个单独的表。
b)需求调研《需求说明书》
生产厂家表FACTORY_C(_C业务后缀)
序号
名称
代码
是否
主键
类型(长度)
说明
编号
FACTORY_ID
是
VARCHAR2(40)
UUID
全称
FULL_NAME
否
VARCHAR2(200)
对应客户比较模糊,翻倍2到4倍
简称
FACTORY_NAME
否
VARCHAR2(50)
联系人
CONTACTS
否
VARCHAR2(30)
人名20/30
电话
PHONE
否
VARCHAR2(20)
手机
MOBILE
否
VARCHAR2(20)
传真
FAX
否
VARCHAR220)
验货员
INSPECTOR
否
VARCHAR2(30)
排序号
ORDER_NO
否
INT
备注
CNOTE
否
VARCHAR2(500)
如果感觉它可能和关键字冲突,给它加个C前缀
创建人
CREATE_BY
否
VARCHAR2(40)
权限字段,登陆人ID
创建部门
CREATE_DEPT
否
VARCHAR2(40)
登陆人所在部门的ID
创建时间
CREATE_TIME
否
TIMESTAMP
✧第二天生产厂家CRUD+购销合同
1.业务:
启用,停用
功能:
和杰信合作生产厂家突然有一天它以次品冒充优质品,杰信不跟这个厂家进行合作。
在货物中生产厂家选择框,不能选择这个不再合作的厂家。
在系统中不能直接删除这个厂家,因为我们的历史数据中含有对这个生产厂家的引用。
软件是采用“伪删除”方式来解决。
实际是在数据库表中加入列,作为标识,标识厂家是否可以被引用。
0停用1启用。
新增厂家默认1,可以修改某个厂家为停用。
在货物中选择厂家的下拉列表,只显示为启用。
2.加“启用”“停用”功能,修改状态。
3.货运管理核心流程:
购销合同
a)需求调研过程
软件企业就会到杰信去需求调研,
项目经理,他面对客户的高层中层领导,目的跟客户安排好调研日程。
设计人员,带领初级程序员到具体的业务部门调研。
聊天,围绕项目的目标,设计人员会自己记录谈话内容,(主干),初级程序员(所有内容)。
回来整理笔记,整理《需求调研报告》
报告中怎么体现纸质报表?
初级程序员将纸质报表转化成电子的。
b)购销合同业务分析
4.需求过程
杰信和生产厂家签到的合同,称为购销合同。
一个购销合同中包含多个货物信息,一个货物信息包括多个附件信息。
报表打印时,同一个生产厂家的货物信息才能放在同一个页上,不同生产厂家的货物信息不能放在同一个页上。
分析阶段,抠每个字段
5.出货表
设计方案一(传统设计)
合同表,货物表,附件表多次左连接,SQL极其复杂,由于附件值特殊,SQL不能直接完成,还需要代码去实现。
设计方案二(冗余设计)
通过冗余,都在货物表中,只需要合同表和货物表左连接即可。
6.分析过程
将用户的需求(大白话)转化为开发人员看得懂的数据库表,表之间的关系,业务逻辑。
给我们的开发人员看,开发人员依据设计来写代码。
复杂,大型项目画类图,序列图辅助开发人员开发。
在实际开发中,架构师搭建项目框架,框架的基类都有,基础工具类,统一样式表,统一的公用的js,图片。
公司提供一个CVS/SVN账号,配置环境,从中检出你负责的项目的代码。
代码一般以项目结构。
导入工程,在其上面开发新的业务模块。
7.业务需求
销售人员录入合同时,它为草稿状态,这时只能销售人员自己看到。
只有当销售人员检查合同无误,提交,状态变成“已上报”。
这时候,其他人员才可以看到。
销售的领导和船务专责才能看到。
利用这个状态字段来控制对当前用户是否可见。
(细粒度的权限控制-数据权限)
8.重点知识回顾
货运管理核心业务流程:
购销合同
1.定义
购销合同是杰信和生产厂家签订的合同。
2.业务复杂度
购销合同业务比较复杂,它是货运管理的一个流程,它包括三部分内容,合同的主信息和多个货物信息和多个附件信息。
合同主信息和货物是一对多,货物和附件信息是一对多。
3.从业务中迁出技术亮点
前期我参与了业务调研,重点负责购销合同。
给客户交流后,我编写了《需求说明书》,然后参数购销合同的表设计。
从需求说明书结合客户给的电子表格,我抽取出数据库表,利用PD进行建模。
设计:
1.跟客户聊天,要引导性和他们聊天。
业务基础术语,了解业务流程
2.深入内容,拿到客户手中现有某个模块表单,电子表格,填写的内容,每个内容要注意的事项。
来源:
手填,从其他模块来获取。
抠每个字段,电子表格中每个内容。
3.《详细说明书》功能的细化,业务逻辑说清楚,画图辅助开发,UML(类图、序列图、状态图)数据库建模细化。
目的:
开发人员可以依照详细设计开始开发。
详细设计本意能达到开发人员无需和客户沟通,就可以在设计人员的指导下就可以直接开发出客户满意的代码。
但实际中做不到。
设计不到位。
实际中开发往复比较多。
✧第三天购销合同+货物信息+附件信息
1.业务需求:
上报、取消
a)功能:
上报实现销售人员确定购销合同录入完毕,检查无误后,上报给领导,领导审核无误后,提交给船运部。
取消实现当船务专责未处理此相关的合同时,可以取消这个合同,重新修改合同内容,然后再次上报。
如果船运专责已经开始处理报运的业务,不能取消,必须走货物增补流程。
b)设计实现:
在表中增加状态字段,新增时默认状态为0草稿,当销售专责确认无误后,点击“上报”状态变为1已上报。
当船运专责未处理报运时,销售专责点击“取消”状态变为0,草稿。
状态为0时,只能销售专责自己看到,当状态为1时,他的领导和报运专责都可以看到。
✧?
第四天购销合同查看,SQL语句的Power
1.附件业务实现
随时携带主表的ID
2.购销合同查看
合同下货物,货物下面附件,在购销合同中全部浏览,体现货物和附件的关系。
构建对象关系
3.*细粒度权限控制
主菜单,左侧菜单,按钮,URL,方法,业界都称为粗粒度的权限控制。
日常的小系统,基于用户,角色,权限架构足够用。
在实际大型项目中,光有上面的用户角色,URL这样的控制粒度不够细致,还有数据访问权限。
1)对数据的访问列是可以自己定制的。
例如:
访问一个人员工资信息表,这个表中含有人员的工资。
2)对数据的访问行可以受权限控制。
例如:
工资表中有销售部人员的工资信息,还有船运部人员的工资信息。
当销售部领导登录时,他只能看到销售人员的工资信息,他不能看到船运部人员的工资信息。
3)直接浏览数据库表,工资列不能直接看到其值。
对这个数据库列进行加密。
上面统称为数据访问权限,这个权限加上角色用户这样这个系统才比较安全。
也称为细粒度的权限控制。
a)列访问控制:
单独建立表,权限分配某个角色能访问哪些列;
b)行访问控制:
1)只能看自己创建的记录,不能看到别人创建的记录
Wherecreate_by=当前登陆人ID
2)部门领导看到,他能看到本部门人员创建的记录,不能看到其他部门人员创建的记录
Wherecreate_dept=当前登陆人部门IDanduser_level<4
3)跨部门访问权限,分管领导跨部门,跨人员
再加一个配置表,分管领导可以管理的人和部门;
✧第七天异构数据库支持+出口报运核心业务
1.核心业务:
货运管理第二个流程,出口报运
a)定义:
做国际物流,货物要运往国外之前,向海关申报。
向海关申报符合国家标准的货物,和货物的体积和重量信息。
除了在合同中货物的基本信息外,在报运时新增7个字段,长,宽,高,毛重,净重,出口单价,含税。
分次报运
一个可以可以分多次来报运,体现在运输的货物数上。
例如:
10000货物,第一次报运运输6000,第二次报运运输4000.
可以多次报运,这种情况很少。
日常大多是一次报运。
b)分析设计
一个出口报运单来自多个购销合同(一对多);给货物信息新增的7个字段的内容。
创建一个出口报运单表
c)冗余设计
将货物信息冗余到报运单下的货物信息中。
一个实现读取数据快速,减小业务的复杂度,业务逻辑简单。
d)打断设计实现跳跃查询
避免关联层级过多,数据量大了后,访问奇慢。
打断设计。
(表设计不成为文规定,表之间的关联关系不超过4层)在设计时使用一个虚线箭头来表示表之间是存在关联关系,在设计时,不是往常的外键关系。
利用一个字段来存储主表和子表之间的关系。
X,Y
Wherecontract_idin(‘x’,’y’)。
经过打断设计,表之间的关系不存在,跳跃查询。
无需查询合同表,直接查询合同下的货物表。
(新增)
经过上面的设计,后续业务变的更加简单。
2.业务,劳保报表
领用周期不同
鞋
帽子
手套
毛巾
军大衣
洗衣粉
饭盒
…
班组1
10
10
5
班组2
20
20
3
6000个单元格
哪个单元格的内容进行修改,代码只修改修改的框。
给每个文本框增加一个隐藏域。
12000个信息要提交。
本来目的是优化,结果速度更慢。
最终每行添加一个隐藏域,当这行的数据进行了修改,在文本框的失去焦点事件onBlur,动态设置这个隐藏域为1。
在修改代码时根据这个值判断,只有1的时候,数据才进行修改。
不是1跳过。
批量新增,增加一个新增按钮,点一次调研一次addRecord方法,它的属性值,都为空串。
批量删除,表格dhtml提供删除行操作,remove,它把行从table中删除。
数据库并没有删除,删除多个框时,记录下它们的id值,拼成一个串,用逗号隔开。
后台代码判断这个隐藏域提交值不为空,删除这几个数据。
3.知识回顾
a)打断设计:
1.数据库设计先按照三范式,之后对一些需要优化的地方,使用反三范式设计(冗余)(以空间换设计)
2.实际业务非常复杂,关联层级过多,随着系统上线运行,用户的数据随着使用的时间,线性增长。
不成文规定:
关联层级在设计不超过4层。
打断设计,在主表中加一个字段,字段来存储两个表之间的关系。
多个的时候,之间用逗号隔开。
一般情况下都是一次报运,就是一个合同一次报运,个别情况下多个合同一次报运,极端情况下3个合同一次报运。
由于打断设计,实现“跳跃查询”。
报运需要合同下的货物信息时,无需通过多个合同对象,就可以直接查询货物的信息,通过这个打断设计的字段,利用SQL的in子查询。
b)核心业务:
货运管理,出口报运
业务,杰信获得订单后,安排多个生产厂家生产货物,与此同时杰信准备报关的材料,除了海关要求的一些制式文档和杰信系统打印的《出口商品报运单》,交给海关进行审核。
4.页面控制
a)报运单新增,暗度陈仓。
用户选择报运关联的多个合同,代码直接进行数据的保存。
保存相关合同的id集合,合同号集合,保存冗余的货物信息,保存冗余的附件信息。
b)批量修改
Mrecord自定义控件,来信息补录。
批量,在页面上利用DHTML动态表格技术,实现表格元素的动态增加,动态创建行,动态创建单元格,利用innerHTML动态向单元格插入文本框,带数据的。
在后台准备数据,拼接成js串,将它写入一个变量中,在页面的jQuery的ready事件中,调用这个变量,形成多个js串,依次执行。
动态添加到表格中。
由于js运行很快,用户感觉不到添加的过程,以为直接展示。
这样为用户提供一个非常方便的操作。
可以批量来修改货物信息。
每行利用一个隐藏域,来存放是否修改标识,这样在记录行数过多时,修改的效应也非常高。
Mrecord控件它可以实现动态新增,还可以实现批量删除,自动排序。
✧第八天装箱、委托、发票、财务业务+合同归档
货运管理包括:
购销合同、出口报运、装箱、委托、发票、财务统计。
1.装箱
海关批准杰信的申请,像船东申请集装箱,杰信找货代公司请他帮着订箱。
杰信找拖车公司,订拖车,拖车公司到码头拉空箱。
拉着空箱到生产厂家的仓库。
生产厂家在杰信的验货员的监督下,先将货物装到纸箱子中,然后在将纸箱子装入集装箱。
拖车拉着满箱到海关指定的码头指定的地方卸货。
这几个箱子风吹雨淋。
海关进行抽检。
直到船来了。
将集装箱放到船上。
开船从装运港出发,到目的港。
装箱时,产生发票号。
同时产生发票日期。
一个装箱单来自多个报运单(一对多)
2.发票,委托
在货物装船的同时,杰信就开具发票,这个发票只是一个通知单,它的内容就是告诉客户货物已经发出,请支付剩余款项。
同时快递客户一个提单。
客户收到发票通知后,支付剩余款项,同时当货物到达目的港后,客户拿着提单去提货。
客户联系货代公司,联系拖车公司,拖车拉着满箱到客户指定的仓库,卸货。
客户验货,整个货运流程完毕,杰信和客户的合同完成。
3.财务
财务模块不属于货运的业务流程。
它是杰信自己内部进行财务核算的模块。
统计这单合同有无赚取利润。
形成统计报表给领导展示。
4.一对一特殊设计
一个委托来自一个发票,一个发票来自一个委托,一个财务来自一个委托。
(一对一)
一对一的所有表内容可以合成一张表,结构不清晰,业务不清晰。
发票,委托,财务表的主键就是装箱单的ID。
上面三张表,它们的主键既外键。
主外键一个值。
举例,假定拿到ID,不论是装箱、委托、发票、财务,都可以查询它们其中任何一个数据。
实现跳跃查询。
财务需要货物信息和附件信息,通过打断设计,可以直接跳过发票、委托,直接找到装箱,通过装箱的打断设计字段,直接去搜索报运下的货物和附件信息。
因为之前进行了冗余设计,财务所需的货物信息和附件信息,在报运中都有。
查询效率提高数倍。
5.出口报运的状态
0-草稿1-已上报2-装箱3-委托4-发票5-财务
体现流程,客户随时想了解订单进展情况,流程的跟踪。
在报运的列表页面随时了解某个合同进行到哪里。
6.数据库优化
a)数据库表设计
●由原来重视节省空间,变为重视性能。
利用冗余,实现性能数倍提高。
●表的优化,监测数据执行时间。
分表1)分字段(纵向分表)精简完核心查询它只需要近30个字段。
原来需要1分多的查询,现在只1秒多展现页面。
2)数据(横向分表)一个表数据量过大。
业务中有些数据不常用,将这些不常用的数据放到另外一张表中,称这个表为历史表。
专门做一个历史查询的模块,提供用户还可以查询。
●表之间的关联关系不要太复杂。
打断设计
b)SQL优化,在做复杂关联关系,SQL优化极其重要。
Select*fromcontract_c,contract_product_c,ext_cproduct_c,factory_c
Wherecontract_id,contract_product_id,factory_id…
先找最小的结果集,只查询某个合同下的货物,只查询某个货物下的附件,只要查看这个合同
c)数据库的选型
●单个数据库优先选择Oracle,DB2
●集群mysql,读写分离,单独读数据数据库,单独写的数据库
●Web应用服务增加,可以增大访问量,同时分担数据库服务器压力。
分表,购销合同历史
当前的活动表,它和历史表的结构一样。
主模块中的所有表,历史中都有有。
例如:
购销合同,合同、货物、附件都需要对应的历史表。
创建domain
批量新增SQL,JDBCjdbcTemplespring
7.在一个系统架构中
一般访问数据两种方式
●hiberntate/mybatis完成数据的持久化:
新增,修改,删除,简单查询
●jdbc/jdbcTemlpate/dbutil批量操作,批量新增,批量修改,级联删除,统计查询
主要框架来完成日常业务,一般批量查询使用jdbc,对于这些模块,缓存就要注意使用。
有时不要配置缓存。
8.购销合同归档,取消归档
--合同表数据进行归档
INSERTINTOcontract_his_c
SELECT*FROMcontract_cWHEREcontract_idIN('x','y')
--货物的数据进行归档
INSERTINTOcontract_product_his_c
SELECT*FROMcontract_product_cWHEREcontract_product_idIN(SELECTcontract_product_idFROMcontract_product_cWHEREcontract_idIN('x','y'))
--附件的数据进行归档
INSERTINTOext_cproduct_his_c
SELECT*FROMext_cproduct_cWHEREext_cproduct_idIN(SELECText_cproduct_idFROMext_cproduct_cWHEREcontract_product_idIN(SELECTcontract_product_idFROMcontract_product_cWHEREcontract_idIN('x','y'))
--删除合同
DELETEFROMcontract_c
WHEREcontract_idIN('x','y')
--删除货物
DELETEFROMcontract_product_c
WHEREcontract_product_idIN(SELECTcontract_product_idFROMcontract_product_cWHEREcontract_idIN('x','y'))
--删除附件
DELETEFROMext_cproduct_c
WHEREext_cproduct_idIN(SELECText_cproduct_idFROMext_cproduct_cWHEREcontract_product_idIN(SELECTcontract_product_idFROMcontract_product_cWHEREcontract_idIN('x','y'))
9.知识回顾
a)业务:
货运管理,
购销合同,出口报运,home装箱单(预装箱),装箱,委托,发票(通知),财务统计。
b)【面试】工作流实现有什么好处?
杰信系统实现状态控制流程。
浏览每步流程开始时间,操作人,结束时间,审核人
突然在流程步骤中增加一步
工作流扩充流程时,非常方便,修改一下流程图,工作流自动记录所有操作的人和操作时间,操作意见。
状态的代码配合工作流来实现。
状态采用常量来定义,只有新增加的状态,才需要编码。
c)表设计
委托,发票,财务它们的表的主键既外键,它们的ID值都是装箱ID。
因为它们4个的关系都是一对一。
关联时最近配置,需要前面业务数据时,可以实现跳跃查询。
这样查询的效率高。
d)页面设计
装箱新增,它需要在新增页面表现装箱和报运的关系。
DivURL链接。
携带的信息ID,checkbox中;no也放到checkbox,用竖杠隔开,一个checkbox传递了两个值,无需再次查询数据库,提升性能,手工解串。
(大量(超过10个字段)或者信息比较敏感,不推荐使用这种方法,推荐还使用通过id查找其他内容)
✧?
第九天图形报表~让微软都羡慕的报表
1.Java要实现图形报表都有什么方式?
●jFreeChart纯javaAPI,利用生成一张图片。
●excel图形报表,poi不能直接操作图形报表控件。
变相解决,先做一个excel模板,插入好图表控件,然后利用poi动态设置它的数据。
用户打开excel,图表直接展现。
●第三方的报表软件,可视化开发。
开发效率极高。
可视化布局界面,配置数据源即可。
(SQL的结果集)。
收费。
数巨报表(10w,每年服务费1w)。
做一个应用程序,(C/S程序),IE上安装插件。
兼容性。
●amChartsFLASH,只需要构建数据xml。
1)需要swf控件,例如饼形通用
2)setting.xml不通用的
3)data.xml、data.txt,xml格式更加直观,不通用的
●sqlDao查询结果集的封装,通用
●工作原理
amCharts只需要一次配置,公用flash,改造index.html,访问公用的swfobject.js和公用的flashswf原来文件。
样式文件访问本地的,这样可以方便修改配置颜色,坐标,显示样式等。
数据data.xml文件。
将从数据库中读取的数据拼接成xml节点,写入到这个文本的文件中。
转向jStat.jsp统一转向对应的forward参数目录下的index.html。
(注意:
html浏览器默认都有缓存,在做index.html要去掉缓存)
21: 57GMT"> 2.jFreeChart、excel、amChartsPK比较 ●jFreeChart纯javaapi,缺点: 图形非常粗糙,它实际是利用jFreeChartapi生成的图片,表现力差,专门的api需要记忆。 a)生产厂家销售情况-饼形图 需求: 生产厂家销售情况,厂家+销售 SELECT f.factory_name,cp.sumnum FROM (SELECTfactory_id,factory_nameFROMfac
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 物流 管理 系统