真實業務環境-需求分析思路(一)

柳~發表於2024-07-23

智聯-我的代辦頁面增加欄位

(智聯)我的待辦 ---> 查詢條件加上新欄位 建立人省份

寫本篇文章的目的是記錄一下我真實業務下的第一個需求,其次是為了培養良好的實現需求的思路

由於後端程式碼不能外傳,故只能自己偷偷學習,筆記上面不能展示

注意:本篇文章的需求實現並不難,如果是學程式碼技術不建議看

需求分析

對智聯-我的工單中的我的代辦工單的最佳化

新增建立人省份欄位

思路:

(1) 在前端新增一個輸入下拉框,這個下拉框的內容和省份內容一致就可以。

  • 在點選查詢時,需要根據建立人省份去查詢我需要處理的工單(待辦工單)
  • 修改後端list介面的查詢條件

(2)工單不同狀態的數量統計需要修改

  • 在進行數量統計時,也要對建立人省份欄位進行判斷
  • 修改queryCount介面的查詢條件

(3)重置按鈕

  • 在我們點選重置時,新新增的這個欄位需要置為null
  • 修改前端資料

image-20240717110303118

具體實現

新增前端按鈕

根據系統中的選單管理找到代辦的index元件(你也可以在router.index.js)

直接複製前面的item項然後直接複用

el-row 表示行

el-col 表示列

el-form-item 一個表單項

el-select 表示這裡是一個可選的輸入框 v-model 繫結物件中的資料

el-option 表示el-select中的選項 裡面使用v-for表示迴圈

image-20240718100132534

<el-form :model = "formData" label-width="100px" class="form-button">

<el-form>是 Element UI 庫中的一個表單元件,它用於建立和管理表單。

:model="formData" 是Vue.js的一個動態屬性(使用冒號字首) ,它將表單的值繫結到Vue例項物件formData上。這意味著表單中的所有的輸入元件(input、select、checkbox等)都會自動與formData物件中的屬性同步。當使用者在表單中輸入內容時,formData物件中的資料會被自動更新。

label-width="100px" (標籤寬度)用於佈局美化

class="form-button" 給<el-form>標籤定義類名,css可以透過類名進行修飾美化

image-20240718110907803

不同狀態的工單數量統計

image-20240718105249736

在queryPro中存在queryCount方法

在這個方法中有四個狀態下的數量的統計,但是後面請求的都是後端的同一個介面

image-20240718105452629

在forData中新增新的欄位屬性createPro

在進行list和queryCount的介面中都需要該欄位

formData: {
  creatorPro: null
}

這裡後端的邏輯就不寫了,主要是思路的一個分析,這個需求很簡單

在原有的基礎上新增一個if標籤,然後進行數量統計的判斷

image-20240718110106970

查詢按鈕

和上面的介面實現一樣,在原有的基礎上擴充一個欄位,只需要在後端sql的 where 後面加一個條件

image-20240718110106970

重置按鈕

image-20240718110359558

當我們點選重置按鈕時就會觸發resetFormData方法將 所有的屬性 置為null ,所以這裡需要新增新的欄位,否則重置對新的欄位沒有作用

隨後呼叫queryPro()重新查詢資料

resetFormData() {
  this.formData = {
    creatorPro: null
  }
  this.queryPro()
}

後臺-工單受理組人員姓名的模糊查詢

記錄該需求是因為在該需求在測試時發現了程式碼bug,並且該bug很有意思

本文用於學習實際專案bug的排查思路,順帶學一點PageHelper知識!!!

需求分析

將姓名欄位的精準查詢最佳化為模糊查詢

  • 在後端SQL查詢條件where處將姓名欄位的判斷變成模糊查詢 --- 入門級別

image-20240718143938409

程式碼Bug分析

原始程式碼產生分頁相關的bug

  • 如果有比較好的排查問題的思路,可以很快的找到問題 ---- 中簡單級別

問題展示

在無條件的情況下查詢出所有的新增成員,共8000多條

image-20240718165926983

查詢 "運維001" 無資料回顯(最佳化模糊查詢前後均存在這個bug)

這個在知道時分頁的原因之後,發現只有第一頁的資料可以查詢到,後面的所有的資料均無法找到

image-20240718144141353

問題排查

思路:

後端查詢時,根據name查詢的邏輯有問題?

  • 這裡部分資料可以查詢到的就說明name查詢邏輯沒有問題
  • 這裡我去分析了後端的程式碼發現是沒有問題的,所以問題不是在這裡

剛開始並不清楚只有第一頁能查到,所以就想到為什麼只有一部分資料不可以查詢,難道是因為某些 使用者物件資料 是無法被查到的?

這個仔細一想就不可能。

  • 因為當時認為只有一部分資料不可以查詢,所以我就想可能是資料的問題?
  • 然後在debug的時候看到sql在查詢的時候有一個 not in ("id","id","id") 然後就印證了自己的這個想法
  • 但是後續新增一個人員後發現這個id多了一個正是新增的那個人的id,發現這裡的這個ids是 已新增人員(剛熟悉這個專案,業務不熟悉,然後前後端專案中又沒有excludeids的註釋),所以並不是資料的問題,所以問題不在這裡
  • image-20240718180106519

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

debug發現資料獲取都是沒有問題的

image-20240718190056428

這裡查詢到一個資料,說明後端是存在這個資料

image-20240718190513631

但是這裡沒有查到資料

image-20240718190610976

說明問題肯定是出在這裡!!!

然後我去控制檯看了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中執行,發現確實沒有任何資料

image-20240719110927568

發現limit 引數起始資料直接從第10條開始查詢?

如果查詢的資料沒有10條,那查詢的結果集就會為空

所以這裡的分頁的引數計算肯定是有問題的

image-20240719111300224

這裡的計算是有問題的!!!

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

image-20240719111327700

然後補齊思路

image-20240719141919069

繼續測試:

這裡劉的模糊查詢出來有280條資料

然後我這裡去30頁查詢,出現了bug

image-20240719143629510

image-20240719143810557

debug解決:

這裡發現我們的startRow成功設定,但是我們的pageNo並沒有成功設定(記得前端接收pageNo)

所以將if判斷從裡面移出來,同時也避免了其他程式碼複用這個類時造成意外的衝突!!!

image-20240719144206375

image-20240719143350970

修改程式碼如下:

image-20240719150709318

繼續測試:

發現忘記思考一個點,就是當我們的當前頁數和itemCount相同時

比如說當前頁為29頁,if條件就會變成 (29-1)*10 > 280

  • 所以修改判斷條件為 >=

最後測試:

站在使用者的角度去思考!!!

我們去搜尋某個名字的時候,不需要 當前頁在第幾頁就把資料顯示到第幾頁,而是預設第一頁就可以了(這個你可以試試,作為使用者正常的邏輯思維是這樣的)

所以當(pageNo * pageSize) > itemCount 直接將頁碼置為1,防止出現最開始討論的問題

image-20240719161612590

到這裡需求及bug就完成了。

這裡因為專案耦合性太強了,所以這裡沒法使用PageHelper。這裡建議學一下pageHelper的原理,看看和這個專案中的邏輯的差別,學習一下。

相關文章