## 新增专利 - 流程
>[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='我的专利 表';
-- 标签:我的专利表,上传专利记录表,爬虫专利表
-- 专利可以同时被多个人上传认领,但是只能被一个人认领审核成功!
```