038医疗项目-模块四:采购单模块—采购单数据模型
上一篇文章我們知道了采購的需求。這篇文章我們就要看一下采購單模塊的數據庫怎么去建立。
我們設計時采用兩張表:
?
1:采購單基本信息表(YYCGD):
也就是對應的頁面上的:
?
?當然我們設計數據庫的時候不可能只有上面這些字段。我們看一下真實數據庫中是怎么設計的:
?
我們來看一下這些字段的意義:
采購單號:相當于訂單號,方便管理需要
采購單名稱:對采購單簡短說明,名稱
醫院id:創建采購單單位的id(記錄單位id而不是用戶的id) (外鍵)
聯系人:聯系人和建單人可能不是一個人
聯系電話:聯系人的電話
建單人:創建采購單用戶id
建單時間:創建采購單時間,(建議不要在數據庫中設置默認值,對業務字段的維護統一在service)
提交時間:采購單創建完畢,提交采購單時記錄時間
備注:采購單備注信息
采購單狀態:(業務代碼存儲數據字典:1:未提交、2:已提交未審核、3:審核通過、4:審核不通過)
審核意見:監管單位對采購單審核時意見
審核時間:監管單位對采購單審核時間
對于審核,注意:如果審核業務功能復雜、需求變更可能性大,建議單獨 創建一個張審核表記錄審核信息。
?
?
2:采購單明細信息表(YYCGDMX):
這張表對應的是:
?
各字段如下:
記錄了采購單所采購的藥品信息。
采購單id:明細所屬的采購單,(外鍵)
藥品信息id:采購單所包含藥品,(外鍵)
供貨企業id:采購藥品的供貨商,創建采購單時就確定了,(外鍵)
中標價:藥品目錄中的中標價,一種冗余存儲的方法,避免藥品目錄表中價格變化,日后查詢當時購買時定價
交易價:本系統默認中標價和交易價是相同的,通常訂單表中包括兩個價格:定價、交易價
采購量:對藥品購買的數量。
采購金額:等于交易價 * 采購量
采購狀態:該藥品當前采購狀態 1、未確認送貨? 2、已發貨、3、已入庫、4無法供貨
?
表之間的結構如下:
上面兩張表就是我們設計的表結構。但是因為數據量很大的問題,我們采用分表存儲的方式。如下:
具體的實現方法是:
?
?
?
?
?
我們的系統采用的分表規格是:
用戶按照年份進行采購信息統計、查詢,本系統定為按年來創建采購單表。
動態表命名規則:
采購單基本信息表:Yycgd+4位年份
采購單明細表:yycgdmx+4位年份
?
? 接下里講怎么去實現動態表呢:
其實所謂動態表就是兩部分:1:是存在數據庫里面的表。2:是Mapper文件接口。
1:
存在數據庫里面的表的生成方式:
我們不是自己去創建表,而是采用動態創建表的方式:寫一個存儲過程。由存儲過程自動創建表,及表相關的對象(觸發器,相關序列,索引,外鍵),存儲過程的調用由定時任務來調用。
存儲過程如下:
?
2:
我們的Mapper接口文件都是用Mybais的逆向工程來生成的。Yycgd+4位年份這樣是很難實現的,因為我們總不能在逆向工程里面直接把表格的名字寫死吧。
我們采取的方案:
在數據庫中建立 一張模版表(本文前面講的兩張表就是模板表),模版表結構和動態表結構一樣。在逆向工程中生成模版表的mapper文件,生成之后修改生成的mapper文件中表名的組織方式,修改為表名+4位年份,4位年份通過變量傳入。
4位年份變量名:businessyear
考慮businessyear變量傳入問題?
?
在parameterType中添加businessyear屬性,操作方法:將所有parameterType指定 的類型都繼承BusinessBasePo
?這些類都是要繼承businessyear屬性的。
?
?
?
?
?
逆向工程生成的mapper接口調用時一定傳入businessyear,注意生成mapper接口中參數是簡單類型的無法使用!!!!
?
?
?
?
?
?
Sql語句中如果有動態表,需要在動態表名后邊加${businessyear},注意自定義的mapper的parameterType指定的類型中要businessyear屬性。
?
比如:
?
Select * from yycgd${businessyear} yycgd,yycgdmx${businessyear} yycgdmx
?where yycgd.id = yycgdmx.yycgdid
?
總結
以上是生活随笔為你收集整理的038医疗项目-模块四:采购单模块—采购单数据模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java-net-php-python-
- 下一篇: html中轮换图片插件,jQuery轮播