## 新增專利 - 流程
>[danger] 既然上傳后馬上就可以進行編輯,那么 `s_patent_claimpatent_record` 我的專利表 就沒有用了,直接上傳后就插入到商品表里去,就不考慮這樣會導致商品表里面會有很多垃圾信息的問題了。目前功能流程不清晰,只能先這樣了,后面再優化。
*****
### 賣家中心 - 新增專利流程
1. 用戶前臺上傳專利 Excel表格文件,模板為:
| 專利號 | 專利名稱 | 價格 |
| --- | --- | --- |
| 2012103205324 | 一種CYP17A1基因多態性檢測特異性引物和液 | 2000.00 |
| ... | ... | ... |
2. 解析表格文件,將數據插入到 `s_patent_claimpatent_record` [我的專利表] 中,狀態為【待校驗】,表示當前在等待爬蟲根據專利號爬取專利信息。
3. 爬蟲定時遍歷 `s_patent_claimpatent_record`,`WHERE status = [待校驗]`
4. 若爬到信息,則更新狀態為【校驗成功】,并將專利信息寫到 `ecs_goods` 商品表中;若沒有爬到信息,則只更新此記錄的狀態為【校驗失敗】就可以了,而不會有數據寫入都商品表中去。
5. 用戶上傳 Excel表格 后,賣家中心 - 我的專利列表頁面 專利的狀態顯示為 **審核中**,如果 **校驗失敗** 則顯示 **無效專利**,如果 **校驗成功** 也**還是**顯示為 **審核中** (因為還有系統審核)。
6. 后臺專利列表/審核管理:`select from s_patent_claimpatent_record`;操作待審核的專利(`up set status=[通過/不通過] where status=待審核`),控制其是否通過審核。
7. 賣家中心 - 我的專利:審核通過后就可以設置報價等出售設置了。
8. 賣家中心 - 我的專利: **無效專利** 用戶可以選擇刪除,**審核失敗** 可以進行的操作有 “刪除” 和 “再次提交審核”。(軟刪除)
*****
### 重要概念
1. <del>多個人可以上傳同一件專利,但是最終只會有一個人審核成功。(在后臺審核時我們會通過加鎖控制來保證這一點的)</del>
2. 用戶可以隨意上傳虛假編造不存在的專利,專利的有效性取決于爬蟲是否能根據專利號爬到專利信息。
3. 爬蟲校驗專利是否有效和將專利信息入商品庫,后臺審核(保證一件專利只能被一個人審核通過)
4. 同一件專利可能在平臺上被賣多次,即專利號不能在商品表中做唯一索引。
5. 同一個人可以賣同一件專利多次。
6. 上傳專利時,首先對上傳的 Excel表格行 去重后再進行其他操作。
7. 平臺上不能存在兩個相同且同時在售的專利。
8. 已賣出的專利不能再被搜索到,但對所有者保留詳情頁面。(所有者:全部的上傳認領人)
9. 同一件專利可能被多個人上傳并審核成功,但同時只能有一個人可以上架出售,也就是說可能會出現你剛把專利下架,別人就趁著這個空隙上架了,你再上架就會上架不了了。(在賣家中心 - 專利操作 時我們會通過加鎖控制來保證這一點的,那么審核時就不用考慮加鎖了)
10. 系統錄入的專利都可以被搜索到,但是由用戶上傳的專利只有狀態為上架時才可以被搜索到。(待確定)
11. 上傳專利時,如果 我的專利(我的專利表) 中已經存在與之相同的專利,且狀態不是【已賣出】,那么本次不能上傳這條,提示“已存在”。
>[danger] **首先確保功能的實現,且邏輯的正確性有保證,其次再考慮性能優化和架構的設計。**
*****
### [我的專利表] 的狀態說明
`s_patent_claimpatent_record`: 專利認領記錄/我的專利 表
這個表有多種含義解讀:我的專利表,上傳專利記錄表,爬蟲專利表
| 狀態值 | 狀態說明 | 備注 |
| --- | --- | --- |
| 0 | 待校驗 | 用戶上傳后,待爬蟲爬取 |
| 1 | 校驗失敗 | 爬蟲爬取不到數據,就將其標記為校驗失敗 |
| 2 | 待審核 | 爬蟲爬到了數據,表示校驗成功,就將其標記為待審核,即后臺審核中 |
| 3| 審核通過 | 后臺標記為審核成功,通過加鎖控制,保證一個專利只會被一個用戶審核成功 |
| 4 | 審核失敗 | 系統后臺標記為審核不通過 |
| 5 | 出售中 | 審核通過后賣家就可以設置出售信息,出售信息直接改商品表 |
*****
### [我的專利表] - 數據字典
```sql
DROP TABLE IF EXISTS `s_patent_claimpatent_record`;
CREATE TABLE `s_patent_claimpatent_record` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '用戶ID,賣家ID',
`patent_number` varchar(50) NOT NULL DEFAULT '' COMMENT '專利號,如:2011104299451,如果用戶輸入不規范,我們會格式化為規范數據',
`patent_name` varchar(500) NOT NULL DEFAULT '' COMMENT '專利名稱,賣家上傳時的專利名稱',
`patent_price` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '價格,賣家上傳時的價格,等審核通過后還可以改',
`patent_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '專利ID,對應ecs_goods表 goods_id',
`enclosure` varchar(250) NOT NULL DEFAULT '' COMMENT '上傳的專利資料地址,自營賣家可能需要上傳轉讓材料等',
`create_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '創建時間',
`update_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '更新時間',
`status` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT '狀態:0-待校驗,1-校驗失敗,2-待審核,3-審核通過,4-審核失敗,5-出售中',
`is_delete` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT '是否刪除了,0-否,1-是',
primary key (`id`),
UNIQUE KEY `patent_id_user_id` (`patent_id`, `user_id`) USING BTREE
) engine=innodb AUTO_INCREMENT=1 default charset=utf8 COMMENT='我的專利 表';
-- 標簽:我的專利表,上傳專利記錄表,爬蟲專利表
-- 專利可以同時被多個人上傳認領,但是只能被一個人認領審核成功!
```