真實業務環境-需求分析思路(一)
智聯-我的待辦頁面增加查詢字段
寫本篇文章的目的是記錄一下我真實業務下的第一個需求,其次是分享我的實現思路和優化過程。文章的目的是幫助自己和其他開發人員在面對新需求時,更加系統地思考和執行,從而避免由于缺乏全局視角而帶來的潛在問題。
舉個例子:
數據流向:明確前端需要展示的數據及其來源。后端需要提供哪些接口?數據如何傳遞?
接口設計:如何設計 API 接口,以確保前端能方便地獲取數據,同時保證數據的完整性和安全性?
交互邏輯:用戶操作后的交互效果是什么?如何處理用戶的異常操作?
注意:本篇文章的需求實現并不難,如果是學代碼技術不建議看
需求分析
(智聯)我的待辦 ---> 查詢條件新增創建人省份

思路:
(1) 在前端添加一個輸入下拉框,這個下拉框中的數據和省份內容一致就可以(數據的獲取可復用)
- 在點擊查詢時,需要根據創建人省份去查詢我需要處理的工單(待辦工單)
- 修改后端list接口的查詢條件
(2) 工單不同狀態的數量統計需要修改
- 在進行數量統計時,也要對創建人省份字段進行判斷
- 修改queryCount接口的查詢條件
(3) 重置按鈕
- 在我們點擊重置時,新添加的這個字段需要置為null
- 修改前端數據
具體實現
添加前端按鈕
如果對項目不熟悉,可以通過系統中的菜單管理定位到前端組件路徑 workOrderSl/toDoOrder/index,然后根據該路徑找到代碼中的 index 組件。
看下圖:

el-row 表示行
el-col 表示列
el-form-item 一個表單項
el-select 表示這里是一個可選的輸入框 v-model 綁定對象中的數據
el-option 表示el-select中的選項 里面使用v-for表示循環
創建人省份、省份等都是一列,即

不同狀態的工單數量統計

在queryPro中存在queryCount方法
在這個方法中有四個狀態下的數量的統計,但是請求的都是后端的同一個接口

在formData請求屬性中添加新的字段屬性createPro

在后端這個數量統計的接口上需要加上creatorPro字段的判斷,如下:

查詢按鈕
和上面的接口實現一樣,在原有的基礎上擴充一個字段,只需要在后端sql的 where 后面加一個條件

重置按鈕

當我們點擊重置按鈕時就會觸發resetFormData方法將 所有的屬性 置為null ,所以這里需要添加新的字段,否則重置對新的字段沒有作用
隨后調用queryPro()重新查詢數據
resetFormData() {
this.formData = {
creatorPro: null
}
this.queryPro()
}
后臺-工單受理組人員姓名的模糊查詢
記錄該需求是因為在該需求在測試時發現了代碼bug,并且該bug很有意思
本文用于學習實際項目bug的排查思路,順帶學一點PageHelper知識!!!
需求分析
將姓名字段的精準查詢優化為模糊查詢
- 在后端SQL查詢條件where處將姓名字段的判斷變成模糊查詢 --- 入門級別

代碼Bug分析
原始代碼產生分頁相關的bug
- 如果有比較好的排查問題的思路,可以很快的找到問題 ---- 中簡單級別
問題展示
在無條件的情況下查詢出所有的添加成員,共8000多條

查詢 "運維001" 無數據回顯(優化模糊查詢前后均存在這個bug)
這個在知道時分頁的原因之后,發現只有第一頁的數據可以查找到,后面的所有的數據均無法找到

問題排查
思路:
后端查詢時,根據name查詢的邏輯有問題?
- 這里部分數據可以查詢到的就說明name查詢邏輯沒有問題
- 這里我去分析了后端的代碼發現是沒有問題的,所以問題不是在這里
剛開始并不清楚只有第一頁能查到,所以就想到為什么只有一部分數據不可以查詢,難道是因為某些 用戶對象數據 是無法被查到的?
這個仔細一想就不可能。
- 因為當時認為只有一部分數據不可以查詢,所以我就想可能是數據的問題?
- 然后在debug的時候看到sql在查詢的時候有一個 not in ("id","id","id") 然后就印證了自己的這個想法
- 但是后續添加一個人員后發現這個id多了一個正是添加的那個人的id,發現這里的這個ids是 已添加人員(剛熟悉這個項目,業務不熟悉,然后前后端項目中又沒有excludeids的注釋),所以并不是數據的問題,所以問題不在這里

初始思路就是這樣的,但是在debug的過程中發現問題都不是這些。
debug發現數據獲取都是沒有問題的

這里查詢到一個數據,說明后端是存在這個數據

但是這里沒有查到數據

說明問題肯定是出在這里!!!
然后我去控制臺看了sql代碼
SELECT p.id, p.province, p.city, p.employee_code, p.employee_name, p.org_id, (SELECT INSERT(p.employee_phone, 4, 4, '****')) AS employee_phone, p.type, p.state, p.isValid, p.creator_id, p.creator, p.create_time, p.update_time FROM employee_pro_10096 p WHERE 1 = 1 AND p.employee_name LIKE concat('%', '運維01', '%') LIMIT 10, 10;
拉到navicat中運行,發現確實沒有任何數據

發現limit 參數起始數據直接從第10條開始查詢?
如果查詢的數據沒有10條,那查詢的結果集就會為空
所以這里的分頁的參數計算肯定是有問題的

這里的計算是有問題的!!!
比如:當我們在前端界面第二頁進行查詢 "運維01" ,那么傳到后端的pageNo = 2 ,那么這里計算的startRow = (2 - 1) * 10 這樣就導致了問題。

然后補齊思路

繼續測試:
這里劉的模糊查詢出來有280條數據
然后我這里去30頁查詢,出現了bug


debug解決:
這里發現我們的startRow成功設置,但是我們的pageNo并沒有成功設置(記得前端接收pageNo)
所以將if判斷從里面移出來,同時也避免了其他代碼復用這個類時造成意外的沖突!!!


修改代碼如下:

繼續測試:
發現忘記思考一個點,就是當我們的當前頁數和itemCount相同時
比如說當前頁為29頁,if條件就會變成 (29-1)*10 > 280
- 所以修改判斷條件為 >=
最后測試:
站在用戶的角度去思考!!!
我們去搜索某個名字的時候,不需要 當前頁在第幾頁就把數據顯示到第幾頁,而是默認第一頁就可以了(這個你可以試試,作為用戶正常的邏輯思維是這樣的)
所以當(pageNo * pageSize) > itemCount 直接將頁碼置為1,防止出現最開始討論的問題

到這里需求及bug就完成了。
這里因為項目耦合性太強了,所以這里沒法使用PageHelper。這里建議學一下pageHelper的原理,看看和這個項目中的邏輯的差別,學習一下。
本文來自博客園,作者:Liberty碼農志,轉載請注明原文鏈接:http://www.rzrgm.cn/zhiliu/p/18319813

浙公網安備 33010602011771號