如果想要获取相关的源码,笔记,和相关工具,对项目需求的二次开发,可以关注我并私信!!!
四 创建采购单的基本信息
1 需求
参考“采购单模块的操作流程”一节中的需求!
医院创建采购单时,需要先填写采购单基本信息,基本信息填写完成后,再填写采购单明细信息。
页面的内容如下:
采购单基本信息包括:采购年份、采购单名称、建单时间、提交时间、联系人、联系电话、备注、采购单状态。
2 dao
使用逆向工程向采购单基本信息动态表中(表名例如:YYCGD2018)插入一条记录。(在上面的“分表存储”一节中已经指定了动态表的生成规则!)
注意:在采购单基本信息动态表中有一个采购单编号bm字段:该字段的生成使用的是oracle的序列来动态的生成其采购单编号bm字段的!
下面的2.1、2.2中的内容,都是针对动态生成序列的采购单编号类这一问题来开展的!!
2.1 使用Oracle序列动态的生成采购单编号bm
既然采购单基本信息表和采购单详细信息表都是使用oracle动态生成的,那么采购单编号bm字段的生成也应该是由oracle动态的来生成!原因是为了在对采购单进行维护操作时方便获得所在的年份信息!(为何方便还是慢慢往下看吧)
我们规定:本系统中的采购单编号bm字段和采购单id字段都采用相同的命名规则:按年划分,4位年份+6位流水号,这点与动态表的命名规则相同(见上)。
其中,6位的流水号的生成是使用oracle的序列来生成的。
而采购单id字段之所以也采用该命名规则的理由可以参考“采购单基本信息的修改”一节中的内容!
当然,,下面的序列都是已经提前生成好了,创建序列的sql语句是由生成动态表的存储过程自动创建的。
在“本系统的分表规则”一节中有提到过该存储过程,而存储过程的创建和调用参考:“医药采购系统问题总汇”中的“动态表如何创建”一节中的内容!
oracle中提前生成的序列如图
其中,YYCGDBM序列对应模板表YYCGD,而YYCGDBM2014序列对应于动态表YYCGD2014!!当然,动态表的后4位年份是不断变化的。
定义序列的sql语句可以通过sql/plus中的“显示SQL”按钮来显示其sql语句:
start with 100040表示开始,maxvalue表最大是999999,都是6位的数字!
2.2 创建采购单编号bm的自定义mapper接口和mapper映射文件
我们要做的只是创建一个自定义的生成采购单编号的mpper.xml映射文件,及其自定义的生成采购单编号的mapper接口:
YycgdMapperCustom.xml中的自定义的生成采购单编号的映射文件所在目录如下:
最终,映射文件中的内容如下:
上面的sql语句中必须使用${value},其中变量value表示年份,而且必须使用value来表示,因为aprameterType输入参数传入的是简单类型。
至于文件中为什么要使用$符号以及value可以参考“Mybatis相关文档中的#和$符号的区别”!
然后,可以通过下面定义的YycgdMapperCustom.java接口中定义的year参数来接收!!!
YycgdMapperCustom.java接口中自定义的生成采购单编号的代码如下:
2.3 创建扩展类和包装类
扩展类源码
包装类源码:
3 service
接口功能:向采购单基本信息动态表yycgd中表插入一条。
接口参数:至于传入什么参数,要以yycgd表中的非空字段来作为参考!如下参数:
(1)useryyid:表示医院id.
(2)year:表示4位年份.
(3)yycgdCustom:表示采购单信息。
(4)建单时间CJTIME字段,使用系统默认的时间!
(5)设置采购单状态zt字段默认为1:“未提交”.
接口的实现类:向采购单基本信息动态表yycgd中表插入一条