web系統(tǒng)中,導(dǎo)入功能的設(shè)計(jì)要點(diǎn)

7 評(píng)論 12148 瀏覽 65 收藏 11 分鐘

相對(duì)于玉樹臨風(fēng)的功能界面,導(dǎo)入,顯得猥瑣又懶散。但對(duì)于Web系統(tǒng)而言,導(dǎo)入,有時(shí)恰是當(dāng)時(shí)境況下的最優(yōu)解。

一、一個(gè)漫不經(jīng)心的案例

業(yè)務(wù)場(chǎng)景:物流供應(yīng)商制定收費(fèi)規(guī)則(如下圖),訂單發(fā)貨之后,自動(dòng)進(jìn)行物流費(fèi)用核算。

從上圖可見,規(guī)則信息項(xiàng)包括:渠道名稱、國(guó)家、是否計(jì)材積重、材積重系數(shù)、重量區(qū)間、最低起重、運(yùn)算公式。

并且:

  • 一個(gè)渠道,可以對(duì)多個(gè)國(guó)家 。
  • 一個(gè)渠道+國(guó)家,可以有多個(gè)重量區(qū)間。
  • 一個(gè)渠道+國(guó)家,只能有一個(gè)最低起重,只能一個(gè)是否計(jì)材積重、以及材積重系數(shù)。
  • 一個(gè)渠道+國(guó)家+重量區(qū)間,只能有一個(gè)計(jì)算公式。
  • 一個(gè)渠道+國(guó)家+重量區(qū)間+起止時(shí)間,是唯一的。
  • ……

了解了以上,基本可以設(shè)置一個(gè)創(chuàng)建規(guī)則的結(jié)構(gòu):

這個(gè)原型的特點(diǎn)之一是丑,第二個(gè)特點(diǎn)是存在一定量的前端交互。

但這時(shí),出現(xiàn)一個(gè)客觀問題——前端開發(fā)人員不夠。

為了項(xiàng)目進(jìn)度,第一版,決定采用導(dǎo)入的方式。

為啥呢?因?yàn)閷?dǎo)入把頁(yè)面操作都省了。

二、導(dǎo)入方式

在關(guān)系型數(shù)據(jù)庫(kù)中(參考文章:《后端產(chǎn)品經(jīng)理筆記之查詢數(shù)據(jù)庫(kù)》),數(shù)據(jù)表結(jié)構(gòu)和Excel表結(jié)構(gòu)相似。

所以這樣的場(chǎng)景下,導(dǎo)入功能無異是短直快。

導(dǎo)入一般是從最小粒度開始的。一個(gè)渠道+國(guó)家+重量區(qū)間+起止時(shí)間,是最小的數(shù)據(jù)粒度。

但是看上圖的表格導(dǎo)入,要考慮挺多問題。比如,我們知道,渠道+國(guó)家+起止時(shí)間相同的行,可以擬定為一組規(guī)則。

所謂一組,就是只有重量區(qū)間不同。那么這組擬定規(guī)則中,各行的重量區(qū)間不能有交叉:

  • 與已經(jīng)存在的同組規(guī)則的重量區(qū)間不能交叉;
  • 起止時(shí)間不能交叉。
  • 與已經(jīng)存在的同組規(guī)則的起止時(shí)間不能交叉;
  • 各行的最低起重要一致;
  • 各行的是否計(jì)材積重一致;
  • ……

整理一下要考察的項(xiàng),基本和下圖差不多。

這樣導(dǎo)入,看著沒毛病,實(shí)現(xiàn)起來事倍功半。

首先,Excel不便于做復(fù)雜校驗(yàn)。

盡量做輕量校驗(yàn),把數(shù)據(jù)帶入系統(tǒng)之后,在頁(yè)面承擔(dān)更多工作。

其次,盡量提升數(shù)據(jù)最小粒度的顆粒度。

因?yàn)榱6纫坏┘?xì)致,就會(huì)倍增式地出現(xiàn)交叉校驗(yàn)。

再次,盡量在摘出具有共性的參數(shù),導(dǎo)入之后再統(tǒng)一頁(yè)面處理。

基于以上現(xiàn)狀和方向,再次回歸業(yè)務(wù)進(jìn)一步掉研。如下:

業(yè)務(wù)會(huì)定期給賣家提供更新的報(bào)價(jià)方案。比如對(duì)1月份發(fā)貨的訂單定下了價(jià)格,結(jié)果2月出現(xiàn)疫情,需要漲價(jià),于是2月修訂價(jià)格,應(yīng)用于2月發(fā)貨的訂單。而我們所說的起止時(shí)間,不是規(guī)則生效的時(shí)間,而是適用于的訂單的發(fā)貨的時(shí)間。

以上可以看出來,其實(shí)每一次修訂,都可看做一次更新迭代。每次迭代,都可以將所有變化和未變化的都導(dǎo)入一遍。于是就可以將起止時(shí)間獨(dú)立出來,放在最外層。也就是導(dǎo)入的這一批適用的訂單的發(fā)貨時(shí)間是一致的。

再看‘是否計(jì)材積重’。

它表達(dá)的是,一些貨物是否按體積折算出重量。比如一車棉花,按實(shí)際重收費(fèi)就虧了。因此,這個(gè)判斷的場(chǎng)景一般是發(fā)貨的時(shí)候,由渠道定的。

所以可以統(tǒng)一在導(dǎo)入之后,與渠道做關(guān)聯(lián)。也就把這項(xiàng),從導(dǎo)入的規(guī)則明細(xì)中剔除出來。

三、做了這個(gè)導(dǎo)入功能

于是導(dǎo)入的模板就簡(jiǎn)化為這樣:

正常做:

1)導(dǎo)入框

(2)校驗(yàn)

第一:校驗(yàn)導(dǎo)入的文件是否正確

表文件A-I是否對(duì)的上,對(duì)不上視為模板錯(cuò)誤。直接報(bào)告文件錯(cuò)誤,不再進(jìn)入詳情校驗(yàn)。

第二,校驗(yàn)內(nèi)容

  • 必填項(xiàng)不能為空
  • 重量起點(diǎn)(g)<重量止點(diǎn)(g)
  • 單元格內(nèi)容需被系統(tǒng)識(shí)別或格式正確。

先判斷不需要查表的項(xiàng),再判斷國(guó)家、物流渠道名稱這些需要查表的項(xiàng)。

  • 以A+B+C+D列判重,若存在重復(fù)的行,則對(duì)第二及其后的重復(fù)行報(bào)錯(cuò).
  • A+B列相同的行之間,重量區(qū)間不能交叉。

交叉的規(guī)則:假設(shè)重量區(qū)間a-b、e-f,若出現(xiàn)a< e<b、e < a < f、a< f<b、e < b < f任一種情況,則視為這兩個(gè)區(qū)間交叉,則對(duì)第二及其后的重復(fù)行報(bào)錯(cuò)。

這里為啥不校驗(yàn)系統(tǒng)已存在的數(shù)據(jù)呢?

因?yàn)槲覀冇闷鹬箷r(shí)間,將這種本次導(dǎo)入與歷史數(shù)據(jù)的重復(fù)規(guī)避掉了。具體就是:

全部校驗(yàn)通過,導(dǎo)入這一批,生成一個(gè)批次號(hào),這個(gè)批次號(hào)需要編輯一個(gè)起止時(shí)間,這個(gè)起止時(shí)間不能與其他批次號(hào)的起止時(shí)間交叉。

這時(shí)候還余下一個(gè)參數(shù) :是否計(jì)材積重。在編輯時(shí)間的時(shí)候進(jìn)行編輯即可。如下圖:

總結(jié)這個(gè)案例,物流費(fèi)用規(guī)則的頁(yè)面有兩層:

(1)列表頁(yè):版本號(hào)維度。每成功導(dǎo)入一次,則生成一條對(duì)應(yīng)的版本號(hào)數(shù)據(jù)。

每個(gè)版本號(hào)對(duì)應(yīng)一批規(guī)則,對(duì)應(yīng)同一個(gè)適用時(shí)間,因此通過版本號(hào)標(biāo)定這一批規(guī)則,并將適用時(shí)間與版本號(hào)進(jìn)行關(guān)聯(lián),而不與具體的規(guī)則明細(xì)關(guān)聯(lián),簡(jiǎn)單清晰。貼近業(yè)務(wù)場(chǎng)景。

(2)明細(xì)頁(yè):顯示某一版本號(hào)下的全部規(guī)則明細(xì)。也就是導(dǎo)入的每一行規(guī)則。

四、姍姍來遲的小結(jié)

(1)導(dǎo)入的本質(zhì):

是將Excel的指定列,賦予數(shù)據(jù)庫(kù)的某個(gè)字段,比如A列對(duì)應(yīng)字段‘渠道名稱’。

(2)導(dǎo)入時(shí)候的校驗(yàn)項(xiàng)很多,一條數(shù)據(jù)不止命中一個(gè)錯(cuò)誤。

一般而言,按規(guī)則的順序,每一行只報(bào)一個(gè)錯(cuò)誤原因。

(3)因?yàn)榭赡苄枰磸?fù)校驗(yàn)多個(gè)校驗(yàn)項(xiàng),所以依次進(jìn)行,從簡(jiǎn)到難。比如:

  • 優(yōu)先是必填項(xiàng)不能為空,單元格內(nèi)容格式正確。
  • 然后才是核對(duì)數(shù)據(jù)是否存在于基礎(chǔ)數(shù)據(jù)庫(kù)中;
  • 最后檢測(cè)本次導(dǎo)入與已存在數(shù)的沖突性校驗(yàn),比如重復(fù)。

(4)每校驗(yàn)一項(xiàng)內(nèi)容,都將全部數(shù)據(jù)跑完。

比如四個(gè)校驗(yàn)項(xiàng),100條數(shù)據(jù)。

先跑校驗(yàn)項(xiàng)1,將各行都檢測(cè)完;都沒錯(cuò),則跑規(guī)則2,出錯(cuò)則報(bào)錯(cuò)。

下次修復(fù)后再次導(dǎo)入,則還是從驗(yàn)項(xiàng)一跑到驗(yàn)項(xiàng)四。

(5)導(dǎo)入的格式與性能有關(guān)

CSV格式的系統(tǒng)開心,秒傳,但是用戶優(yōu)勢(shì)不大喜歡。Excel相反。

(6)與歷史數(shù)據(jù)的更新還是覆蓋?這個(gè)情況讓用戶選了。

(7)一旦一條出錯(cuò),是否全部不予導(dǎo)入呢?

一般而言,若是提交給另外的系統(tǒng),那通過的基本就寫入了,就沒法回滾了。所以就部分正確則部分導(dǎo)入。

如果是自己系統(tǒng),一般一旦一個(gè)寫入錯(cuò)誤,則全部回滾,全部檢查,直至全部OK才寫入。確保完整性。

(8)報(bào)錯(cuò)的方式

十幾二十條就在彈框說明誰是錯(cuò)的就可以。過多數(shù)據(jù)的就Excel報(bào)錯(cuò)。

(9)Excel 模板可以做什么?

可以加表頭標(biāo)注,加注釋說明,加第二分頁(yè)。但是要開發(fā)知道。說明哪些區(qū)域是導(dǎo)入?yún)^(qū)。

(10)導(dǎo)入是猥瑣的。但是也有主動(dòng)使用導(dǎo)入的場(chǎng)景,比如:

從1688導(dǎo)出了訂單的采購(gòu)信息,包括物流單號(hào)等。這時(shí)候如果要把物流單號(hào)加到自己系統(tǒng)中去,一個(gè)個(gè)加入肯定費(fèi)勁,直接導(dǎo)入就很快了。

另外其實(shí)案例的這個(gè)數(shù)據(jù)量上千,導(dǎo)入也是比較合適的。所以導(dǎo)入的功能是猥瑣了點(diǎn),但是有時(shí)候可以大用。

#專欄作家#

唧唧歪歪PM,公眾號(hào):唧唧歪歪PM(ID:jjyypm),人人都是產(chǎn)品經(jīng)理專欄作家。書籍《后端產(chǎn)品經(jīng)理寶典》作者,藥學(xué)碩士轉(zhuǎn)行互聯(lián)網(wǎng)產(chǎn)品多年;熟悉跨境電商業(yè)務(wù),醫(yī)藥領(lǐng)域;擅長(zhǎng)大型后臺(tái)體系,社交App。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 想請(qǐng)問一下,如果需要導(dǎo)入有合并單元格的EXCEL表單,而且希望導(dǎo)入后頁(yè)面顯示也是有合并單元格的,可實(shí)現(xiàn)嗎?

    來自湖北 回復(fù)
    1. 沒這樣設(shè)計(jì)過。
      因?yàn)閺脑O(shè)計(jì)方案層面上,出錯(cuò)率和開發(fā)都不太理性,寧可主動(dòng)避開這種設(shè)計(jì)。歡迎關(guān)注公眾號(hào) jjyypm

      來自湖南 回復(fù)
  2. 學(xué)習(xí)了 。

    來自湖南 回復(fù)
  3. 看了半天想了想 還是做操作頁(yè)面吧

    來自北京 回復(fù)
    1. 有時(shí)候操作界面 滿足不了。比如界面只能勾選100條 ,這貨有一萬條數(shù)據(jù) 。

      來自湖南 回復(fù)
  4. 比較硬核

    來自北京 回復(fù)
    1. 謝謝 歡迎關(guān)注公眾號(hào) jjyypm

      來自湖南 回復(fù)