記錄一次業務邏輯的分析過程

2021-08-18 20:26:24 字數 2090 閱讀 7523

首先簡單描述一下業務上的需求:要計算出差的補助。

計算規則如下:

1.有三組變數,分別為出差時間、規定勞動時間、出差地當地勞動時間(各自包含開始和結束時間)

2.原來的需求描述為:

出差時間在規定勞動時間內的話不計算補助。

出差開始時間早於規定勞動時間的話,差的時間作為補助時間來計算。但是差的時間內包含出差地當地的勞動時間的話要將其前後的時間作為補助時間計算。

出差結束時間晚於規定勞動時間的話,差的時間作為補助時間來計算。但是差的時間內包含出差地當地的勞動時間的話要將其前後的時間作為補助時間計算。

3.在規定勞動時間之前的出差時間稱為前補助時間,規定勞動時間之後的出差時間稱為後補助時間。

4.補助計算以小時計,只舍不入。

5.工作日的補助計算是前後時間單算,補助金額相加;非工作日的補助計算是前補助時間加上後補助時間,一塊算金額。

6.存在跨天選項,即有可能是從21點工作到第二天凌晨3點。

7.職務人員只考慮規定勞動時間。

乍一看這需求,字挺多,但是倒也不難理解。就是算出來出差時間既不在規定勞動時間也不在當地勞動時間的時間就ok了唄。

首先祭出if else**。

似乎有一些麻煩,算了,先想單一的,工作日的計算。

首先,獲取各個時間。starttime,endtime,rulestarttime,ruleendtime,localstarttime,ruleendtime

第一種情況,最簡單的,規定勞動時間和當地勞動時間正好重合了;

if rulestarttime==localstarttime&&ruleendtime==ruleendtime:

beforetime=rulestarttime-starttime>0?rulestarttime-starttime:starttime-rulestarttime

繼續,稍微複雜一點,規定勞動時間開始時間晚於當地勞動時間開始時間;

再來,規定勞動時間開始時間早於當地勞動時間開始時間,也不難;

等等,還有一種情況,規定勞動時間的結束時間也早於當地勞動時間的結束時間,

還有,當地勞動時間開始時間介於規定勞動時間開始時間和結束時間中間;

厲害了word哥,這還沒算上工作日和休息日、跨天、職務的區分,光乙個前補助時間就這麼多條件了,並且最可怕的是,可能還沒想全。

看來這個if else**不太靈光,又傻,**量還高,並且邏輯上不安全。

那就得想一下了,回到之前那句話:算出來出差時間既不在規定勞動時間也不在當地勞動時間的時間。

簡單一想,這不就是求出來出差時間這個集合與(規定勞動時間與當地勞動時間的合集)的差集嗎?

第乙個念頭是區間,有現成的可以表示區間的資料結構嗎,仔細想了想想不著。湊合用array[2]吧。也能達到目的。

這個方法好!是真好,我接下來只需要實現兩個方法;

function  求合集(arr1,arr2)

function 求差集(arr1,arr2)

開始面向過程。。。

還是不行,why?還得考慮 規定勞動時間與當地勞動時間的合集 不連續的情況,不連續的話求差集要分開算。而分開算的差集也有可能不是連續的。最長可能為三段

那麼還是得呼叫2的3次方次 function 求差集。太麻煩了,不想弄。還是得多動腦子少編碼。

可是光想這幾個方法的實現已經耗費了大半個晚上的時間,老婆喊著要睡覺了。

躺床上就在想,數學上的集合不好使,用程式設計上的集合,全列出來。

第二天起來,思路一寫,哈哈,問題解決了。

時間全部換算成分鐘制,區間寫入array,求合集,直接用set。求差集,直接for not in,set;

求出差集之後,判斷一下是否連續,也很簡單,首尾之差是否等於陣列的長度。不連續就拆分一下。

拆分完了,每一段分別比較一下和規定勞動時間的大小,確定是前補助時間還是後補助時間。完事,除以60,得到小時數。美滋滋。

並且我這個只給你算出來時間,至於你要怎麼用時間,怎麼算補助,是什麼職位,後邊簡單一算就行了。so easy。

編**有趣,哈哈。

現在看來這個抽象思想,建模思想真是好。不然我們小時候做應用題為什麼要列方程而不是窮舉呢?

並且也給我解決問題提供了一種思路,多總結規律,抽象出數學模型,問題就會簡單的多。

最重要的,多思考,用腦子程式設計。

記錄一次sql優化過程

對於我這種剛剛進入dba行業的人來說sql優化是一件很難的事情。所以今天看了一下別人優化的過程順手記錄的一筆。select distinct vi.policy no from odsdata.policy extend info ei,policy vehicle info vi,policy b...

記錄一次java優化過程

昨天乙個朋友問我乙個問題,說他們tomcat伺服器,啟動之後,執行特別慢,特別是第一次訪問,有時要十幾分鐘才有響應。我幫他做了下分析,記錄一下。說到tomcat啟動後執行慢,大家首先想到的是,jsp檔案在首次執行時,系統會將jsp編譯成相應的servlet,所以慢是應該的,第一次執行之後,就不再需要...

記錄一次RAC公升級的過程

以下內容僅在虛擬機器中進行過測試 gi 版本,11.2.0.3公升級到11.2.0.4 db版本 11.2.0.3公升級到11.2.0.4 公升級過程 1 舊版本的gi處於執行狀態,安裝11.2.0.4的gi的圖形介面。在介面上選擇upgrade gi 2 根據提示,在各個節點上執行rootupgr...