第八天 装箱、委托、发票、财务业务+合同归档
货运管理包括:购销合同、出口报运、装箱、委托、发票、财务统计。
1.装箱
海关批准杰信的申请,像船东申请集装箱,杰信找货代公司请他帮着订箱。
杰信找拖车公司,订拖车,拖车公司到码头拉空箱。拉着空箱到生产厂家的仓库。
生产厂家在杰信的验货员的监督下,先将货物装到纸箱子中,然后在将纸箱子装入集装箱。
拖车拉着满箱到海关指定的码头指定的地方卸货。这几个箱子风吹雨淋。海关进行抽检。
直到船来了。将集装箱放到船上。开船从装运港出发,到目的港。
装箱时,产生发票号。同时产生发票日期。
一个装箱单来自多个报运单(一对多)
2.发票,委托
在货物装船的同时,杰信就开具发票,这个发票只是一个通知单,它的内容就是告诉客户货物已经发出,请支付剩余款项。
同时快递客户一个提单。客户收到发票通知后,支付剩余款项,同时当货物到达目的港后,客户拿着提单去提货。
客户联系货代公司,联系拖车公司,拖车拉着满箱到客户指定的仓库,卸货。客户验货,整个货运流程完毕,杰信和客户的合同完成。
3.财务
财务模块不属于货运的业务流程。它是杰信自己内部进行财务核算的模块。统计这单合同有无赚取利润。形成统计报表给领导展示。
4.一对一特殊设计
一个委托来自一个发票,一个发票来自一个委托,一个财务来自一个委托。(一对一)
一对一的所有表内容可以合成一张表,结构不清晰,业务不清晰。
发票,委托,财务表的主键就是装箱单的ID。
上面三张表,它们的主键既外键。主外键一个值。
举例,假定拿到ID,不论是装箱、委托、发票、财务,都可以查询它们其中任何一个数据。
实现跳跃查询。
财务需要货物信息和附件信息,通过打断设计,可以直接跳过发票、委托,直接找到装箱,通过装箱的打断设计字段,直接去搜索报运下的货物和附件信息。因为之前进行了冗余设计,财务所需的货物信息和附件信息,在报运中都有。查询效率提高数倍。
5.出口报运的状态
0-草稿 1-已上报 2-装箱 3-委托 4-发票 5-财务
体现流程,客户随时想了解订单进展情况,流程的跟踪。在报运的列表页面随时了解某个合同进行到哪里。
6.数据库优化
a)数据库表设计
由原来重视节省空间,变为重视性能。利用冗余,实现性能数倍提高。
表的优化,监测数据执行时间。
分表
1)分字段(纵向分表)精简完核心查询它只需要近30个字段。原来需要1分多的查询,现在只1秒多展现页面。
2)数据(横向分表)一个表数据量过大。业务中有些数据不常用,将这些不常用的数据放到另外一张表中,称这个表为历史表。专门做一个历史查询的模块,提供用户还可以查询。
表之间的关联关系不要太复杂。打断设计
b)SQL优化,在做复杂关联关系,SQL优化极其重要。
Select * from contract_c,contract_product_c,ext_cproduct_c,factory_c
Where contract_id,contract_product_id,factory_id…
先找最小的结果集,只查询某个合同下的货物,只查询某个货物下的附件,只要查看这个合同
c)数据库的选型
单个数据库优先选择Oracle,DB2
集群mysql,读写分离,单独读数据数据库,单独写的数据库
Web应用服务增加,可以增大访问量,同时分担数据库服务器压力。
分表,购销合同历史
当前的活动表,它和历史表的结构一样。
主模块中的所有表,历史中都有有。例如:购销合同,合同、货物、附件都需要对应的历史表。
创建domain
批量新增SQL,JDBC jdbcTemple spring
7.在一个系统架构中
一般访问数据两种方式
hiberntate/mybatis 完成数据的持久化:新增,修改,删除,简单查询
jdbc/jdbcTemlpate/dbutil批量操作,批量新增,批量修改,级联删除,统计查询
主要框架来完成日常业务,一般批量查询使用jdbc,对于这些模块,缓存就要注意使用。有时不要配置缓存。
8.购销合同归档,取消归档
合同表数据进行归档
INSERT INTO contract_his_c
SELECT * FROM contract_c WHERE contract_id IN ('x','y')
货物的数据进行归档
INSERT INTO contract_product_his_c
SELECT * FROM contract_product_c WHERE contract_product_id IN (SELECT contract_product_id FROM contract_product_c WHERE contract_id IN('x','y'))
附件的数据进行归档
INSERT INTO ext_cproduct_his_c
SELECT * FROM ext_cproduct_c WHERE ext_cproduct_id IN (SELECT ext_cproduct_id FROM ext_cproduct_c WHERE contract_product_id IN (SELECT contract_product_id FROM contract_product_c WHERE contract_id IN('x','y'))
删除合同
DELETE FROM contract_c
WHERE contract_id IN ('x','y'
)
删除货物
DELETE FROM contract_product_c
WHERE contract_product_id IN (SELECT contract_product_id FROM contract_product_c WHERE contract_id IN('x','y'))
删除附件
DELETE FROM ext_cproduct_c
WHERE ext_cproduct_id IN (SELECT ext_cproduct_id FROM ext_cproduct_c WHERE contract_product_id IN (SELECT contract_product_id FROM contract_product_c WHERE contract_id IN('x','y'))
9.知识回顾
a)业务:货运管理,
购销合同,出口报运,home装箱单(预装箱),装箱,委托,发票(通知),财务统计。
b)【面试】工作流实现有什么好处?
杰信系统实现状态控制流程。
浏览每步流程开始时间,操作人,结束时间,审核人
突然在流程步骤中增加一步
工作流扩充流程时,非常方便,修改一下流程图,工作流自动记录所有操作的人和操作时间,操作意见。状态的代码配合工作流来实现。状态采用常量来定义,只有新增加的状态,才需要编码。
c)表设计
委托,发票,财务它们的表的主键既外键,它们的ID值都是装箱ID。
因为它们4个的关系都是一对一。关联时最近配置,需要前面业务数据时,可以实现跳跃查询。这样查询的效率高。
d)页面设计
装箱新增,它需要在新增页面表现装箱和报运的关系。Div URL链接。
携带的信息ID,checkbox中;no也放到checkbox,用竖杠隔开,一个checkbox传递了两个值,无需再次查询数据库,提升性能,手工解串。(大量(超过10个字段)或者信息比较敏感,不推荐使用这种方法,推荐还使用通过id查找其他内容)