医药采购之采购单模块需求
2015-11-17 13:57
232 查看
1 采购单模块需求
医院在采购药品时,先创建一个采购单,采购单内容包括本次采购的药品信息(采购量、采购金额),采购单创建成功后,需要提交到监管单位,由监管单位进行审核。审核通过后由供货商按照采购单的内容进行发货,医院收到药品后执行入库操作。操作流程:
第一步:填写采购单基本信息
采购单明细信息:药品信息id、采购量、采购金额。
添加采购药品:
从本地区供货商药品目录中找采购的药品信息。
采购量确定后,采购金额自动计算出来:
第四步:提交采购单后由监管单位进行审核
本系统实际操作由卫生院对本区域医院下的采购单进行审核。
卫生院首先查询采购单内容,确定没有问题进行审核。
第六步:医院执行入库操作
2 采购单数据模型
采购单基本信息表:记录了采购单主要信息。
采购单号:相当于订单号,方便管理需要
采购单名称:对采购单简短说明,名称
医院id:创建采购单单位的id(记录单位id而不是用户的id) (外键)
联系人:联系人和建单人可能不是一个人
联系电话:联系人的电话
建单人:创建采购单用户id
建单时间:创建采购单时间,(建议不要在数据库中设置默认值,对业务字段的维护统一在service)
提交时间:采购单创建完毕,提交采购单时记录时间
备注:采购单备注信息
采购单状态:(业务代码存储数据字典:1:未提交、2:已提交未审核、3:审核通过、4:审核不通过)
审核意见:监管单位对采购单审核时意见
审核时间:监管单位对采购单审核时间
对于审核,注意:如果审核业务功能复杂、需求变更可能性大,建议单独创建一个张审核表记录审核信息。
采购单明细信息表:
记录了采购单所采购的药品信息。
采购单id:明细所属的采购单,(外键)
药品信息id:采购单所包含药品,(外键)
供货企业id:采购药品的供货商,创建采购单时就确定了,(外键)
中标价:药品目录中的中标价,一种冗余存储的方法,避免药品目录表中价格变化,日后查询当时购买时定价
交易价:本系统默认中标价和交易价是相同的,通常订单表中包括两个价格:定价、交易价
采购量:对药品购买的数量。
采购金额:等于交易价 * 采购量
采购状态:该药品当前采购状态1、未确认送货 2、已发货、3、已入库、4无法供货
3 分表存储方案
为什么要分表存储?
对于较大的城市,最小的医疗单位数量较大,每年的采购记录数达到上千万,考虑系统可持续性,时间越长采购单表中记录数就越多,对于较复杂的业务(比如统计分析),执行速度就会很慢。从数据库级别出发在表上进行优化不能根据解决性能问题,需要从根本上解决数据存储问题,可以按照一定规则对表进行分割存储。
案例:
全国中小学生成绩管理系统。
记录了全国中小学生成绩信息(主要记录平时成绩),以省为单位设计数据库,成绩记录数非常巨大,系统设计时考虑到数量大会导致查询及统计速度很慢。
按照用户的需求定分表规则,用户是按照学期进行成绩 查询和统计,分表规则定为按学期进行表的创建,每学期创建一张成绩表。
分表规则:
成绩表+4位年份+学期代码
本系统分表规则:
用户按照年份进行采购信息统计、查询,本系统定为按年来创建采购单表。
动态表命名规则:
采购单基本信息表:Yycgd+4位年份
采购单明细表:yycgdmx+4位年份
动态创建表方法:
写一个创建表的存储过程,由存储过程自动创建表,及表相关的对象(触发器、相关的序列、索引、外键),
存储过程的调用由定时任务(操作系统定时任务)来调用。
4 如何实现动态表mapper
4.1 逆向工程如何操作?
逆向工程生成动态表的mapper文件。不能在逆向工程的配置文件中指定动态表名,比如:yycgd2014,如果这样操作,用户得每年作这个工作。
采用方案:
在数据库中建立一张模版表,模版表结构和动态表结构一样。在逆向工程中生成模版表的mapper文件,生成之后修改生成的mapper文件中表名的组织方式,修改为表名+4位年份,4位年份通过变量传入。
4位年份变量名:businessyear
逆向工程生成的mapper接口调用时一定传入businessyear,注意生成mapper接口中参数是简单类型的无法使用!!!!
4.2 自定义mapper如何操作?
需要程序员自已写sql语句。
Sql语句中如果有动态表,需要在动态表名后边加${businessyear},注意自定义的mapper的parameterType指定的类型中要businessyear属性。
比如:
Select * from yycgd${businessyear}yycgd,yycgdmx${businessyear} yycgdmx
where yycgd.id = yycgdmx.yycgdid
相关文章推荐
- VS2013 Windows API 串口通信编程--多线程异步方式
- 贫血模型和充血模型
- 观《绣春刀》后作
- 360加固之libjiagu.so脱壳及dex dump
- Android跨进程通信----AIDL使用方法
- C++函数学习笔记
- myeclipse 编辑java中的变量时,高亮显示
- 一步步调试解决iOS内存泄漏
- 记住密码功能 angular js实现
- 界面干货盘点 | 海量实用UI工具及示例等你来体验!
- Android 提示框的几种类型
- Android VideoView播放视频控制:开始、暂停、快进(3)
- Codeforces Round #321 (Div. 2) C. Kefa and Park time limit per test
- 第二篇 顾问实施ERP与医生看病过程类比
- angular中的表单验证
- iOS开发系列--通知与消息机制
- How to read Userenv Log - Part 1 Machine Policy
- JS开发HTML5游戏《神奇的六边形》(四)
- 学习笔记:模式学习-生成器模式
- boost