前情參考
不知不覺,做開發已有2年,傳統行業的IT開發,需求的大概是全能手,SAP上了一期,對接了SAP,瞭解了一些ABAP語法,寫了幾個介面,慢慢的對語言不在執著,對技術也不再執著,因為出身工廠,對工廠業務還算熟悉,對解決方案的思考還算比較熱衷。所以就沉浸在計算的一塊,但是技術演算法認知的先天不足,所以想請大佬把把脈,以後的學習方向。比如以下一題:
- 一個財務的一個清賬模擬功能
- 已知系統目前有幾千個客戶
- 計算週期為一月一次清賬
- 大概業務邏輯如下:
- 有3個陣列,第一個陣列是客戶組,大概有幾千條。第二個陣列是各個收款明細,有幾千條,不一定全部客戶都有,第三個陣列是應收發票,大概有幾千條,不一定全部客戶都有
- 需求是每個客戶的收款與發票對碰核銷,記錄每筆核銷的記錄及每個客戶的期末餘額。
目前這個模組我是通過暴力遍歷實現的,但是速度太慢了,邏輯如下
- 遍歷每個客戶
- 讀取該客戶的收款及發票
- 遍歷收款,取發票一條一條核銷,一條銷完,換另一張發票,未銷完,記錄發票INDEX及剩餘金額
- 最後將結果批量插入資料庫。
大概6000多條核銷明細花了我30分鐘+ 不可忍受。
因為沒到月末,基本收款及發票是不一定真實的,有可能會沖銷掉。實時清賬就有可能反清賬,所以目前清賬功能財務需求是預清賬,點選就跑,期末定了再關賬。
第二個問題是關於動態計算的表示式引擎問題,2W條資料動態計算,用了C#的庫,居然還要幾分鐘。
大概需求如下
一個單據,有很多屬性,然後不同的屬性,會對應不同的成本及利潤計算公式。所以我把它放在前端用動態表示式的方式配置,而不是程式碼寫IF(因為情況大概目前有70+種,再加以後的新的營銷活動啥的,財務提一個需求就要改一次程式碼太麻煩,所以找了一些動態表示式的庫,通過前端配置觸發條件)
for example.
- 某個人(參與A活動),提成是,毛利提成》銷售額提成,則毛利提成,反之銷售額提成
- 某個人是負責A區域的,結果此張單成交區域在區域外,提成需打折。
- 某個活動提成不計成本,直接按某個比例算提成。等等。
1.目前邏輯是,遍歷2W條,先匹配布林條件生效判定(可能不止1個布林條件),但終歸70+種情況組組合,最後得到的演算法,然後計算提成。
因為用了C#的表示式引擎,Flee(Fast Lightweight Expression Evaluator),目前用時 3~5分鐘,但是這5分鐘不太適合體感使用,因為在結算的時候,表示式會調整的,然後重算驗證就等的不耐煩了。
題外話:公司的技術大佬是中小方案很熟練,BS/CS端直接上手,列印報表配置,運維都可以,中小企業不可少的人才,但是技術深度不行,喜歡程式碼一把梭,專案MVC還是我來了之後分的,以前直接控制器+靜態類打天下,我想了一下我又不想成為繫結公司的人才,所以對多語言的學習比較抗拒,對技術邏輯比較感興趣,對技術遇到的難題,也喜歡思考,但是非科班,所以很多時候都是暴力演算法,然後因公司上市,業務發展的複雜度也越來越高,傳統行業對IT技術人才是不太尊重,感覺目前的程式碼不重構,會因為複雜度,遲早黑盒子一樣的存在…..
本作品採用《CC 協議》,轉載必須註明作者和本文連結