/dataplatform

数据平台后端项目

Primary LanguageJava

接口文档

项目部署


接口文档

更新

  • GET /contract/crawl

    • 目前总共支持 10 个爬虫,各个网站的测试数据如下:

      *各爬取2页的数据,单线程:

      网址 成功爬取条目数 耗时(秒)
      江苏省政府采购网 100 3.33
      江西省政府采购网 32 3.51
      湖北省政府采购网 29 4.32
      浙江省政府采购网 25 4.57
      河北省政府采购网 99 5.32
      **政府采购网 40 5.85
      天津市政府采购网 20 6.42
      北京市政府采购网 28 8.96
      安徽省政府采购网 21 14.39
      山东省政府采购网 19 32.3
    • 演示时最好不要用最后两个网站,太特么坑了

    • 由于不同网站提供的信息不同,北京、江西、江苏、山东的网站爬取的信息会出现部分字段为空。

    • 可以在参数中配置页码范围,指定页码进行爬虫。


网址模块

POST /url

  • 将一些网址提交至后端,与user绑定,保存到数据库中。

请求地址:POST /url

请求参数:

参数名 类型 说明 必填
urls String[] url 数组

请求示例:

{
    "urls": [
        "**政府采购网", 
        "北京市政府采购网", 
        "湖北省政府采购网"
    ]
}

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": null
}

GET /url

  • 获取当前用户绑定的网址(即上次配置后的网址)。
  • 用户在进入"网址配置"页面时输入框中应填充用户之前的配置信息。

请求地址:GET /url

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": [
        "**政府采购网",
        "北京市政府采购网",
        "湖北省政府采购网"
    ]
}

如果用户还未配置过他的 url,则会返回 NOT FOUND

{
    "code": 404,
    "msg": "Not found",
    "data": null
}

用户模块

POST /user/login

  • 登录。

请求地址:POST /user/login

请求参数:

参数名 类型 说明 必填
username String 用户名
password String 密码

请求示例:

{
    "username": "沖田総司",
    "password": "OkitaSouji"
}

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": null
}
{
    "code": 403,
    "msg": "用户名或密码错误",
    "data": null
}

POST /user/register

  • 注册用户。

请求地址:POST /user/register

请求参数:

参数名 类型 说明 必填
username String 用户名
password String 密码
authority int 权限 否,默认0

请求示例:

{
    "username": "沖田総司",
    "password": "OkitaSouji",
    "authority": 6
}

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": null
}
{
    "code": 403,
    "msg": "用户名不合法",
    "data": null
}

GET /user/logout

  • 用户登出。

请求地址:GET /user/logout

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": null
}
{
    "code": 403,
    "msg": "未登录用户",
    "data": null
}

GET /user/current

  • 获取当前用户的信息

请求地址:GET /user/current

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": {
        "id": 23,
        "username": "沖田総司",
        "password": "OkitaSouji",
        "authority": 6,
        "careUrls": "[**政府采购网, 北京市政府采购网, 湖北省政府采购网]",
        "urlsList": [
            "**政府采购网",
            "北京市政府采购网",
            "湖北省政府采购网"
        ]
    }
}

当前没有用户登录时,会返回:

{
    "code": 403,
    "msg": "用户未登录",
    "data": null
}

PUT /user/{id}

  • 强行更新某个用户的数据,三个数据均为非必填项。

请求地址:PUT /user/{id}

请求参数:

参数名 类型 说明 必填
password String 密码
authority int 权限
urls String 配置的URL

请求示例:

{
    "authority": 100,
    "urls": [
        "**政府采购网", 
        "北京市政府采购网", 
        "湖北省政府采购网"
    ]
}

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": null
}

当三个参数都为空时会返回:

{
    "code": 400,
    "msg": "未输入更新项",
    "data": null
}

DELETE /user/{id}

  • 删除某个用户

请求参数:无

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": null
}
{
    "code": 403,
    "msg": "权限不足",
    "data": null
}

合同模块

GET /contract/crawl

  • 请求后,后台将开始爬取并更新该用户当前配置的 url 下的合同数据

  • 后端直至爬取完成,或遇到错误时,才会返回

  • 由于不同网站提供的信息不同,部分字段可能为空。

请求地址:GET /contract/crawl

请求参数:

参数名 类型 说明 必填
start int 起始页码 否,默认值由配置文件规定
end int 终止页码 否,默认值由配置文件规定
thread int 开几个线程来爬取 否,默认值由配置文件规定

请求示例:

http://localhost:8080/api/contract/crawl

http://localhost:8080/api/contract/crawl?start=5&end=10

响应示例:

  1. 爬取成功,且更新了数据
{
    "code": 200,
    "msg": "OK",
    "data": {
        "increment": 20
    }
}
  1. 爬取成功,但是所有支持的 url 都没任何数据更新
{
    "code": 404,
    "msg": "没爬到任何数据",
    "data": null
}
  1. 爬取失败(错误),通常为服务端异常
{
    "code": 500,
    "msg": "server error",
    "data": null
}

GET /contract/list

  • 请求当前用户配置的 url 的合同数据
  • 如果参数 query 为空,则返回所有合同数据
  • 如果参数 query 不为空,则返回筛选后的合同数据

请求地址:GET /contract/list

请求参数:

参数名 类型 说明 必填
query String 查询关键词(空格分开)

请求示例:

http://localhost:8080/api/contract/list

http://localhost:8080/api/contract/list?query=国家卫星气象中心 **建筑技术集团有限公司

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": [
        {
            "id": 2245,
            "url": "**政府采购网",
            "contractNo": "FY3(02P)-SY-2005",
            "contractName": "风云三号02批地面应用系统工程无人机卫星定标与检验自动观测系统",
            "projectNo": "ZQC-R20172",
            "projectName": "风云三号02批气象卫星工程",
            "purchaser": "国家卫星气象中心",
            "purchaserTelNo": "010-62173767",
            "supplier": "北京华云星地通科技有限公司",
            "supplierTelNo": "010-68407953",
            "subjectName": "无人机观测系统",
            "subjectUnitPrice": "27967000",
            "contractValue": "2796.700000万元",
            "announceDate": "2020-12-07"
        },
        {
            "id": 2246,
            "url": "**政府采购网",
            "contractNo": "FY3(02P)-QT-2005",
            "contractName": "FY-3/GNOS近实时GNSS精密星历解算软件系统研发",
            "projectNo": "ZQC-R20172",
            "projectName": "风云三号02批气象卫星工程",
            "purchaser": "国家卫星气象中心",
            "purchaserTelNo": "010-62173767",
            "supplier": "**科学院国家空间科学中心",
            "supplierTelNo": "010-62557975",
            "subjectName": "GNOS系统",
            "subjectUnitPrice": "2000000",
            "contractValue": "200.000000万元",
            "announceDate": "2020-12-07"
        }
    ]
}

没有查到任何合同数据时,将返回:

{
    "code": 404,
    "msg": "Not found",
    "data": null
}

GET /contract/{id}

  • 按 id 查询单个合同信息

请求地址:GET /contract/{id}

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": {
        "id": 2250,
        "url": "**政府采购网",
        "contractNo": "HT202010200850461094",
        "contractName": "Science",
        "projectNo": "CD2020-TS-03",
        "projectName": "重庆大学2020年外文数字资源SD采购",
        "purchaser": "重庆大学",
        "purchaserTelNo": "023-65104111 ",
        "supplier": "**教育图书进出口有限公司",
        "supplierTelNo": "010-57933034",
        "subjectName": "Elsevier",
        "subjectUnitPrice": "详见合同",
        "contractValue": "382.500000万元",
        "announceDate": "2020-12-07"
    }
}

查询不到时,返回 NOT FOUND

{
    "code": 404,
    "msg": "Not found",
    "data": null
}

POST /contract

  • 增加一个合同

请求地址:POST /contract

请求参数:

参数名 类型 说明 必填
url String 来源url
contractNo String 合同编号
contractName String 合同名称
projectNo String 项目编号
projectName String 项目名称
purchaser String 采购人
purchaserTelNo String 采购人联系方式
supplier String 供应商
supplierTelNo String 供应商联系方式
subjectName String 标的名称
subjectUnitPrice String 标的单价
contractValue String 合同金额
announceDate String 发布日期

请求示例:

{
    "url": "山东省政府采购网",
    "contractNo": "140063202000029_039",
    "contractName": "教学实验材料",
    "projectNo": "048-548001",
    "projectName": "教学实验材料",
    "purchaser": "山东中医药大学",
    "purchaserTelNo": "89628116"
}

响应示例:

添加成功:

{
    "code": 200,
    "msg": "OK",
    "data": {
        "id": 11084,
        "url": "山东省政府采购网",
        "contractNo": "140063202000029_039",
        "contractName": "教学实验材料",
        "projectNo": "048-548001",
        "projectName": "教学实验材料",
        "purchaser": "山东中医药大学",
        "purchaserTelNo": "89628116",
        "supplier": null,
        "supplierTelNo": null,
        "subjectName": null,
        "subjectUnitPrice": null,
        "contractValue": null,
        "announceDate": null
    }
}

必填项为空:

{
    "code": 403,
    "msg": "合同编号与合同名称不能为空",
    "data": null
}

已有一条相同 contractNocontractName 的合同:

{
    "code": 403,
    "msg": "已存在相同的合同",
    "data": null
}

PUT /contract/{id}

  • 根据 id 修改一个合同信息

请求地址:PUT /contract/{id}

请求参数:

参数名 类型 说明 必填
url String 来源url
contractNo String 合同编号
contractName String 合同名称
projectNo String 项目编号
projectName String 项目名称
purchaser String 采购人
purchaserTelNo String 采购人联系方式
supplier String 供应商
supplierTelNo String 供应商联系方式
subjectName String 标的名称
subjectUnitPrice String 标的单价
contractValue String 合同金额
announceDate String 发布日期

请求示例:

{
    "url": "山东省政府采购网",
    "contractName": "教学实验材料",
    "projectNo": "048-548001",
    "projectName": "教学实验材料",
    "purchaser": "山东中医药大学",
    "purchaserTelNo": "89628116"
}

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": null
}

存在 contractNocontractName 且与另一合同重复:

{
    "code": 403,
    "msg": "已存在相同的合同",
    "data": null
}

所有参数都为空:

{
    "code": 403,
    "msg": "未输入更新项",
    "data": null
}

DELETE /contract/{id}

  • 根据 id 删除一个合同

请求地址:DELETE /contract/{id}

响应示例:

{
    "code": 200,
    "msg": "OK",
    "data": null
}

当该 id 对应的合同不存在时,会返回:

{
    "code": 404,
    "msg": "该合同不存在",
    "data": null
}

DELETE /contract

  • 使用 body 传参,批量删除合同

请求地址:DELETE /contract

请求参数:

参数名 类型 说明 必填
ids int[] id 数组

请求示例:

{
    "ids": [1464, 1465, 1466]
}

响应示例:

返回的 data 中带有删除成功和删除失败的条目数:

{
    "code": 200,
    "msg": "OK",
    "data": {
        "success": 3,
        "failure": 0
    }
}

当所有 id 均删除失败时,会返回 404

{
    "code": 404,
    "msg": "没有合同被删除",
    "data": null
}

项目部署

环境依赖

  1. JDK/JRE 1.8
  2. Maven
  3. MySQL 5.7 (默认使用服务器的数据库)

运行部署

  1. 下载项目源码

    git clone https://github.com/4dpFour/dataplatform.git
  2. src/main/resources 目录下添加配置文件 application.properties

    # 数据库连接字符串
    spring.datasource.url=
    # 数据库连接用户名
    spring.datasource.username=
    # 数据库连接密码
    spring.datasource.password=
    
    mybatis.config-location=classpath:mybatis-config.xml
    server.port=8080
    server.servlet.context-path=/api
    crawl.depth=2
    crawl.thread=1
    crawl.page.start=1
    crawl.page.end=3
  3. 使用 Maven 下载依赖并构建项目

    mvn install
  4. 运行项目

    java -jar target/dataplatform-1.1.2.jar