62. 現在開始做分銷商這一塊的功能,主要有乙個樹形的功能。這個樹形結構功能我們做得不是很好,不太靈活 ,關於這個樹形結構有一些元件,做的比較好。在這個專案裡不使用。
63. 先來看一下,樹的幾種設計方式:
1,不帶冗餘字段,id,pid 一般使用id,pid已經足夠了。但是這種方式在
遍的時候有乙個效率的問題,因為我要看一下下面有沒有結點。
2, 帶冗餘字段 id,pid,isleaf,childrencount 這種方式:通常引入乙個看它是不是葉子,我也可以加入他有多少孩子。這樣我容易算出來 ,我拿到這個欄位一看,下面有多少孩子我知道了。而沒有必要每次算,
3, 採用固定的字串,00 01 001 0001
1. 00所有分銷商
2. 01華北區
3. 001北京市
4. 0001北京醫藥股份****
64. 再來看一下這張分銷商資訊的表,這個乙個自連線,在這裡有乙個pid,pid裡面的值全部**於id,
65. 分銷商在這棵樹形結構上都 是平等的。比如說北京市下面有北京醫藥股份****,這可能是一級分銷商,如果還有乙個二級分銷商也是在北京市下面,不會在北京醫藥股份****下面還顯示二級。
66. 我們分銷商要屬於乙個區域,華北區,北京市,這些都是區域,區域下面掛了分銷商,我們的設計是這樣的,就放在一張表裡面,這張表裡面既放了區域又放了分銷商,以前 提到過,這樣不太好,冗餘量太大,因為假如說是區域的話,它有名稱,id,pid,那級別,分銷商**,其它的都沒有,那麼就都冗餘了, 另外還有乙個終端客戶表,裡面也有乙個樹形結構要做,其實和分銷商差不多,那麼在終端客戶裡面你又會重複寫區域相關的記錄,如北京 ,,,,,,當時 說過最好是把樹形結構區域抽出來。區域是乙個樹形結構,分銷商只屬於它,所以單獨建一張分銷商表,再抽乙個區域這樣會好點。分銷商,終端都不是樹形結構,只要把這兩個往上掛就可以了。區域是乙個樹形結構,但是我們沒有採用這種方式,就放一張表裡面,因為放一張表裡面,大家要處理一些事情,有點麻煩,為了給大家增加一點難度,左連線,右連線,
* 得到頂級目錄
* @param regioncolumnid
* @return
public int getmytopregioncolumnid(int regioncolumnid) else {
return getmytopregioncolumnid(regioncolumn.getparentid());
/** 得到欄目樹 **/
public string getcatetree(string tree, int rootcolumnid,int regionid) {
regioncolumn rootbean = regioncolumndao.getbeanbyid(rootcolumnid);
stringbuffer treestrbuf = new stringbuffer();
if (rootbean != null) {
+ "\",");
listsublist = getsubcategory(rootcolumnid, 0, regionid);
if (sublist != null && sublist.size() > 0) {
dumpcatalogtree(tree, sublist, treestrbuf, rootcolumnid,regionid);
return treestrbuf.tostring();
public string getcatetree(string tree, int regionid){
return this.getcatetree(tree, 0, regionid);
/** 遞迴得到樹 **/
private void dumpcatalogtree(string tree, listlisbean,
stringbuffer treestrbuf, int parentid,int regionid) {
for (regioncolumn bean : lisbean) {
+ bean.getname() + "\",");
if (bean.getidentifier() != null
&& bean.getidentifier().equals("qzz"))
else if (bean.getidentifier() != null
&& bean.getidentifier().equals("zpr"))
else
+ bean.getregioncolumnid() + "',");
listsublist = getsubcategory(bean
.getregioncolumnid(), 0,regionid);
if (sublist != null && sublist.size() > 0) {
dumpcatalogtree(tree, sublist, treestrbuf, bean
.getregioncolumnid(),regionid);
public regioncolumn getregioncolumn(int id) {
return regioncolumndao.getbeanbyid(id);
public listgetsubcategory(int cataid, int rootcloumnid,int regionid) {
return regioncolumndao.getsubcategory(cataid, rootcloumnid,regionid);
public int gettopregioncolumnid(int cata_id) {
return regioncolumndao.gettopregioncolumnid(cata_id);
專案中工廠 策略設計模式的使用
專案中需要同步中臺基礎資料事件包含 專案整體架構 針對這些不同的資料,都有增加 編輯 刪除操作 策略介面和一組實現這個介面的策略類 基於介面而非實現程式設計,可以靈活地替換不同的策略 author lc desc 資料處理介面定義 date 2021 1 7 public inte ce syncd...
BI專案中ETL設計與思考
etl即資料抽取 extract 轉換 transform 裝載 load 的過程,它是構建資料倉儲的重要環節。etl是將業務系統的資料經過抽取 清洗轉換之後載入到資料倉儲的過程,目的是將企業中的分散 零亂 標準不統一的資料整合到一起,為企業的決策提供分析依據。etl是bi專案重要的乙個環節。通常情...
BI專案中ETL設計與思考
etl是將業務系統的資料經過抽取 清洗轉換之後載入到資料倉儲的過程,目的是將企業中的分散 零亂 標準不統一的資料整合到一起,為企業的決策提供分析依據。etl是bi專案重要的乙個環節。通常情況下,在bi專案中etl會花掉整個專案的1 3的時間,etl設計的好壞直接關接到bi專案的成敗。etl的設計分三...