导入图片后截取_微服务项目第36天:导入数据到索引库
今天是劉小愛自學Java的第166天。
感謝你的觀看,謝謝你。
學習計劃安排,導入需要的數據到索引庫:
- 對于all字段的拼接。
- spu中附帶的skus集合。
- sku中對應的price。
- specs規格參數。
上述也就是我們前幾天一直在分析的數據,也就是對應Goods這個實體類,同時將這個實體類和索引庫對應起來。
那導入什么數據?也就是164天整合的那些已經實現了的業務。
但是只是查詢出來了,現在還要將這些數據一一對應存儲到Goods對象中,再導入索引庫。
只能說真的太復雜了,一個方法寫了一百多行代碼,這是我迄今為止寫的最長最復雜的了。
一、all數據
包含商品標題、商品分類以及品牌等數據。
①商品分類
分類有三級分類,從數據庫中查出的是一個大小為3的分類集合。
而我們所需要的是這三個分類拼接成的一個字符串,所以遍歷將其拼接,當然這里是用的Stream流批量獲取商品分類名,并以“,”完成拼接。
②商品品牌
因為商品只可能對應一個品牌,所以查詢到的本身就是一個品牌對象,不用多說。
③all字段拼接
我們需要spu的標題,商品對應的三級分類以及品牌名,將其拼接成一個字符串,這也是為何第①步要將三級分類轉換成字符串的原因。
二、skus和price數據
同樣的道理,通過fegin客戶端查詢到sku數據,是一個sku集合。
現在問題來了,我們并不是需要sku中的所有數據,而是其中的4個,該怎么辦?
①map來代替spu實體類
在Java中有一個map集合,確定好泛型后,可以一定程度上代替Java中的對象。
這就好比我們重新創建了一個實體類,類的屬性只有上述中的4個,但顯然這里用map更合適。
②遍歷導入需要的sku數據
只需要id,price,title以及image四個數據。
注意:title這個字段,spu中有這個字段,sku中也有這個字段,那它們有什么區別呢?舉一個例子說明下
- spu中title:小米10。
- sku中title:小米10 8G+256G 玫瑰金 移動聯通電信4G手機 雙卡雙待。
sku等于是spu的一個垂直細分,多個sku共用一個spu。
③圖片數據
sku中商品對應的圖片是有多張的,但是展示給用戶看的就只有一張,所以這里截取第一張圖片即可。
使用apache提供的api即可完成圖片的截取:substringBefore()的使用。
關于這塊的操作是最簡單的了,所以我將stream的用法在此做一個對比講解。
上述中①是使用的stream流,②就是使用的for循環,這兩種方式實現的結果是一樣的。
用哪種方法都可以,但是最好要保證自己都會用,不然若是別人寫stream流看不懂怎么辦?
三、specs規格參數
這個代碼編寫起來也是最復雜的,將其分成查詢數據和存儲數據兩個部分:
specs這個字段當初設定的時候就是一個map集合。
①獲取specs中的key
它的key來自spec表,對應的業務也就是根據條件查詢規格參數。
我們當初設定的時候,該方法參數有三個,也就是gid、cid、searching,這些條件可以有也可以沒有。
這里的話:gid為null,cid為第三級商品分類,并且searching設定為true表示只查詢規格參數中需要搜索的字段。
②獲取specs中的value
它的value來自于spu_detail表,對應的業務也就是根據spu查詢spuDetail。
關于spu_detail表和規格參數相關的有兩個字段:generic_spec和special_spec。
也就是通用規格參數和特有規格參數,其實很好理解:
- 通用規格參數:比如操作系統都是Android、比如CPU都是驍龍,這些參數是通用的。
- 特有規格參數:比如內存大小,比如顏色,這些參數是通用的。。
存儲在數據庫中的數據是json格式的字符串,所以這里要用一個工具類轉換成map集合。
關于JsonUtils這個工具類牽扯出的知識點又太多了,有時間的話專門寫一遍講解吧,大概。
反正其作用就是json與map集合之間的轉換。
剛才只是從數據庫中查詢到了數據,現在要將查詢到的數據一一對應存儲到specs集合中,specs也就是在查詢數據的時候創建的specs集合。
①存儲規格參數中的key
查詢出來的規格參數名都是需要存儲的,但是其值是需要判斷之后再存儲的。
比如“CPU品牌”就是規格參數名,這里也就是key,“高通(Qualcomm) ”這就是規格參數值,這里也就是value。
②存儲規格參數中的value
規格參數名中有一個generic字段,用來判斷該參數是否為通用規格參數。
所以上述使用getGeneric()判斷:
- 如果是通用規格,規格參數id獲取對應的規格參數名。
- 如果不是,那么就是特有規格,獲取對應的特有規格參數名。
其中chooseSegment是自定義的一個方法,用來判斷是否是數據類型,比較復雜,將估計又要花不少時間。
PS:這些業務如果忘記了,我在第164天的筆記中有一個關于這些業務的總結。
再PS:又沒有學完…,也還沒有測試,估計會有很多問題,只能等后續發現問題了再自己在評論區補充說明了。
最后
行有不得反求諸己,我是@劉小愛
一個白天上班晚上學習的95后滬漂,不為其它,只為學會自律做好自己,也愿我的每日打卡能給你帶來勇氣,歡迎點贊關注和評論。
總結
以上是生活随笔為你收集整理的导入图片后截取_微服务项目第36天:导入数据到索引库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java同样作用的方法_Java的接口用
- 下一篇: pycharm变量存_20190909