# 交互消息类

## ApiResult

```java
public class ApiResult<T> {
    @ApiModelProperty("响应码")
    private int code;

    @ApiModelProperty("响应消息")
    private String message;

    @ApiModelProperty("是否成功")
    private boolean success;
    
    @ApiModelProperty("响应数据")
    private T data;
}
```

## LatestExportControlInfo

```java
public class LatestExportControlInfo {
    // 出口管制事件ID
    private String id;
    
    // 管制信息标题
    private String name;
    // 管制内容简述
    private String summary;
    // 发布机构名称
    private String postOrgName;
    // 发布时间
    private Date postDate;
    // 涉及领域
    private List<String> domains;
    // 涉及中国实体数
    private Integer cnEntityCount;
    // 涉及主要实体
    private List<SanctionListBean> sanEntities;
}

```

## AnnualCount

```java
public class AnnualCount {

    // 年份
    private Integer year;

    // 数量
    private Integer count;

    // 领域列表
    private List<String> domain;
}
```

## DomainCount

```java
public class DomainCount {
    // 制裁类型名称
    private String sanTypeName;

    // 领域统计信息
    private List<BaseCount> domainCountInfo;
}
```

## BaseCount

```java
public class BaseCount {
    // 统计名称
    private String name;
    // 数量
    private Integer count;
}
```

## ExportPageQuery

```java
public class ExportPageQuery extends BasePageQuery {
    // 类型名称（实体清单）
    private String typeName;
    // 制裁时间
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date sanctionDate;
    // 是否只看中国实体
    private Boolean isCn;
}
```

## BasePageQuery

```java
public class BasePageQuery {
    // 查询页
    private Integer pageNum = 1;
    // 每页数量
    private Integer pageSize = 10;
    // 排序字段
    private String sortField;
    // 排序方式
    private String sortOrder;
}
```

## SanctionProcess

```java
public class SanctionProcess {
    // 制裁事件ID
    private String id;
    // 制裁时间
    private Date postDate;
    // 制裁标题
    private String name;
    // 制裁内容简述
    private String summary;
    // 涉及中国实体数
    private Integer cnEntityCount;
}
```

## SanctionListBean

```java
public class SanctionListBean extends BaseBean {
    @Id
    @Column(name = "ID", nullable = false)
    private String id;

    @Column(name = "ENTITY_NAME")
    private String entityName;

    @Column(name = "SAN_TYPE_ID")
    private Integer sanTypeId;

    @Column(name = "ENTITY_TYPE")
    private Integer entityType;

    @Column(name = "ENTITY_ID")
    private String entityId;

    @Column(name = "ENTITY_NAME_ZH")
    private String entityNameZh;

    @Column(name = "COUNTRY_ID")
    private String countryId;

    @Column(name = "SAN_REASON")
    private String sanReason;

    @Column(name = "SAN_INTENSITY")
    private char sanIntensity;

    @Column(name = "START_TIME")
    private Date startTime;

    @Column(name = "END_TIME")
    private Date endTime;

    @Column(name = "IS_KEY")
    private char isKey;
    
    @Transient
    private List<TechDomainBean> techDomainList;

    /**
     * 领域列表
     */
    @Transient
    private List<String> techDomains;

    /**
     * 50%规则子企业数
     */
    @Transient
    private Integer ruleOrgCount;

    // 50%规则子企业列表
    @Transient
    private List<Organization> ruleOrgList;
}
```

## OrgInfo

```java
public class OrgInfo {
    // 机构id
    private String id;
    // 机构名称
    private String orgName;
    // 相关制裁措施列表
    private List<String> sanTypeList;
    // 机构职责
    private String orgDuty;
    // 机构图片
    private String imageUrl;
    // 人员列表
    private List<PersonInfo> personList;
}
```

## PersonInfo

```java
public class PersonInfo {
    //  id
    private String id;
    // 人物类别
    private Integer type;
    //  姓名
    private String name;
    //  党派
    private String party;
    //  职位
    private String position;
    //  头像链接
    private String imageUrl;
}
```

## SanCountInfo

```java
public class SanCountInfo {
    // 实体数
    private Integer entityNum;
    // 实体变动数
    private Integer entityChange;
    // 上市公司数
    private Integer listedCompanyNum;
    // 上市公司变动数
    private Integer listedCompanyChange;
    // 涉及领域名数
    private Integer domainNum;
    // 涉及领域变动数
    private Integer domainChange;
    // 实体类型数
    private Integer typeNum;
    // 实体类型变动数
    private Integer typeChange;
}
```

## Chain

```java
public class Chain {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    // 名称
    @Column(name = "name")
    private String name;
    // 中文名称
    @Column(name = "name_zh")
    private String nameZh;
    // 值
    @Column(name = "description")
    private String description;
    // 父级id
    @Column(name = "parent_id")
    private Integer parentId;

    // 是否为产业链主分支
    @Column(name = "is_main_branch")
    private String isMainBranch;

    // 下属产业链分支
    @Transient
    private List<Chain> children;
}
```

## FishboneResp

```java
public class FishboneResp<T> {
    private String text;
    private List<T> causes;
}
```

## AreasStreamResp

```java
public class AreasStreamResp {
    // 上游国内企业数量
    private int upstreamInternalCount;
    // 上游国内占比
    private double upstreamInternalRate;
    // 上游受制裁企业数量
    private int upstreamEntityCount;
    // 上游受制裁占比
    private double upstreamEntityRate;

    // 中游国内企业数量
    private int midstreamInternalCount;
    // 中游国内占比
    private double midstreamInternalRate;
    // 中游受制裁企业数量
    private int midstreamEntityCount;
    // 中游受制裁占比
    private double midstreamEntityRate;

    // 下游国内企业数量
    private int downstreamInternalCount;
    // 下游国内占比
    private double downstreamInternalRate;
    // 下游受制裁企业数量
    private int downstreamEntityCount;
    // 下游受制裁占比
    private double downstreamEntityRate;
}
```

## AnnualDomainQuery

```java
public class AnnualDomainQuery {
    // 开始年份
    private Integer startYear;
    // 结束年份
    private Integer endYear;
    // 是否考虑50%规则
    private Boolean isRule;
}
```

## AnnualDomainCount

```java
public class AnnualDomainCount {
    // 年度领域统计
    private List<DomainCount> yearDomainCount;
    // 所有领域
    private List<BaseCount> domians;
}
```

## SanctionTypeBean

```java
public class SanctionTypeBean extends BaseBean {

    @Id
    @Column(name = "ID", nullable = false)
    private Integer id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "NAME_ZH")
    private String nameZh;

    @Column(name = "NAME_ABBR")
    private String nameAbbr;

    @Column(name = "DESCRIPTION")
    private String description;

    // 发布国家
    @Column(name = "POST_COUNTRY_ID")
    private String postCountryId;

    // 发布机构
    @Column(name = "POST_ORG_ID")
    private String postOrgId;

    // 是否出口管制 1:是 0:否
    @Column(name = "IS_EXPORT_CONTROL")
    private String isExportControl;

    // 总发布次数
    @Transient
    private Integer postCount;

}
```

## Organization

```java
public class Organization extends BaseBean {
    // 机构id
    @Id
    @Column(name = "id", nullable = false)
    private String id;

    // 机构名称
    @Column(name = "org_name", nullable = false)
    private String orgName;

    // 组织机构代码
    @Column(name = "uscc")
    private String uscc;

    // 机构简称
    @Column(name = "org_abb")
    private String orgAbb;

    // 机构英文名称
    @Column(name = "org_name_en")
    private String orgNameEn;

    // 机构英文简称
    @Column(name = "org_abb_en")
    private String orgAbbEn;

    // 机构别名
    @Column(name = "org_alias")
    private String orgAlias;

    // 机构曾用名
    @Column(name = "org_former_name")
    private String orgFormerName;

    // 机构类型id
    @Column(name = "org_type_id")
    private Long orgTypeId;

    // 机构简介
    @Column(name = "org_introduction")
    private String orgIntroduction;

    // 营业范围
    @Column(name = "business_scope")
    private String businessScope;

    // 行业id
    @Column(name = "domain_ids")
    private String domainIds;

    // 行业代码
    @Column(name = "economic_industry_code")
    private String economicIndustryCode;

    // 经济行业名称
    @Column(name = "economic_industry_name")
    private String economicIndustryName;

    // 国家id
    @Column(name = "country_id")
    private String countryId;

    // 省份
    @Column(name = "province")
    private String province;

    // 城市
    @Column(name = "city")
    private String city;

    // 区县
    @Column(name = "county")
    private String county;

    // 详细地址
    @Column(name = "address")
    private String address;

    // 成立时间
    @Column(name = "establishment_date")
    private LocalDate establishmentDate;

    // 变更时间
    @Column(name = "issuing_date")
    private String issuingDate;

    // 营业期限自
    @Column(name = "operation_period_from")
    private String operationPeriodFrom;

    // 营业期限至
    @Column(name = "operation_period_until")
    private String operationPeriodUntil;

    // 营业状态
    @Column(name = "business_status")
    private String businessStatus;

    // 法人id
    @Column(name = "legal_representative_id")
    private String legalRepresentativeId;

    /// 法人
    @Column(name = "legal_representative")
    private String legalRepresentative;

    // 联系电话
    @Column(name = "telephone")
    private String telephone;

    // 邮箱
    @Column(name = "email")
    private String email;

    // 邮政编码
    @Column(name = "postcode")
    private String postcode;

    // 网址
    @Column(name = "url")
    private String url;

    // 员工人数
    @Column(name = "number_of_employees")
    private String numberOfEmployees;

    // 注册资金
    @Column(name = "registered_capital")
    private String registeredCapital;

    // LOGO链接
    @Column(name = "logo_url")
    private String logoUrl;

    @Column(name = "create_by")
    private String createBy;

    @Column(name = "update_by")
    private String updateBy;

    @Column(name = "p_org_id")
    private String pOrgId;

}
```

## EventInfo

```java
public class EventInfo extends BaseBean {
    @Id
    @Column(name = "id")
    @ApiModelProperty(value = "唯一标识")
    private String id;

    @Column(name = "title")
    @ApiModelProperty(value = "标题")
    private String title;

    @Column(name = "event_time")
    @ApiModelProperty(value = "事件时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date eventTime;

    @Column(name = "summary")
    @ApiModelProperty(value = "摘要")
    private String summary;

    @Column(name = "summary_zh")
    @ApiModelProperty(value = "摘要译文")
    private String summaryZh;

    @Column(name = "event_type")
    @ApiModelProperty(value = "事件类别")
    private String eventType;

    @Column(name = "CONTENT")
    @ApiModelProperty(value = "主要内容")
    private String content;

    @Column(name = "title_zh")
    @ApiModelProperty(value = "标题译文")
    private String titleZh;

    @Column(name = "content_zh")
    @ApiModelProperty(value = "主要内容译文")
    private String contentZh;

    @Column(name = "type")
    @ApiModelProperty(value = "事件类别")
    private String type;

    @Column(name = "LOCATION")
    @ApiModelProperty(value = "事件地点")
    private String location;

    @Column(name = "country")
    @ApiModelProperty(value = "国家")
    private String country;
}
```



# 字典

## 领域类别（id：name）

1：人工智能、2：生物科技、3：新一代信息技术、4：量子科技、5：新能源、6：集成电路、7：海洋、8：先进制造、9：新材料、10：航空航天、11：深海、12：极地、13：太空、14：核

## 实体类别（id：name）

1：人物、2：机构、7：地址

## 人物类别（待定）

1：政府官员、2：科技领袖、3：顶级科学家、4：国会议员

# 出口管制

## **获取出口管制类清单统计信息**

请求地址：/sanctionList/export/getTotalInfo

请求类型：GET

输入参数：

​	参数：无输入

​	请求头：携带token，内容为：

```
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```

输出结果：ApiResult<List<SanctionTypeBean>>

## 最新出口管制政策（4条）

请求地址：http://8.140.26.4:9085/entitiesDataInfo/getLatestInfo

请求类型：GET

输入参数：

​	参数：无输入

​	请求头：携带token，内容为：

```
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```

输出结果：ApiResult<LatestExportControlInfo>

## 发布（更新）频度

请求地址：http://8.140.26.4:9085/entitiesDataCount/getAnnualCount

请求类型：GET

输入参数：

​	参数：Integer sanTypeId（制裁类别）

​	实体清单发布频度：1；CCL发布频度：X（待定，暂无数据）

​	请求头：携带token，内容为：

```
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```

输出结果：ApiResult<List<AnnualCount>>

## **制裁领域分析**（20251215）

请求地址：http://8.140.26.4:9085/entitiesDataCount/getSanDomainCount

请求类型：GET

输入参数：

​	参数：Boolean rule（是否勾选50%规则）

​	请求头：携带token，内容为：

```
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```

输出结果：ApiResult<List<DomainCount>>

## **历次制裁过程**

请求地址：http://8.140.26.4:9085/entitiesDataCount/getSanctionProcess

请求类型：POST

输入参数：

​	参数：ExportPageQuery exportPageQuery

​	请求头：携带token，内容为：

```
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```

输出结果：ApiResult<Page<SanctionProcess>>

## **制裁实体清单**列表（20251215）

请求地址：/sanctionList/pageQuery

请求类型：POST

输入参数：

​	参数：ExportPageQuery exportPageQuery

​    出口管制-概览页请求时：typeName=实体清单

​    实体清单-制裁概览页请求时：typeName=实体清单，sanctionDate=该次制裁的具体时间

​	请求头：携带token，内容为：

```
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```

输出结果：ApiResult<Page<SanctionListBean>>

## **发布机构与重点人物**

请求地址：/sanctionList/getPublishedOrg

请求类型：GET

输入参数：

​	参数：Integer sanTypeId

​    暂时固定输入：1；对应实体清单发布机构

​	请求头：携带token

输出结果：ApiResult<OrgInfo>

## **领域分布查询**

请求地址：/entitiesDataInfo/getDomianDistribution

请求类型：GET

输入参数：

​	参数：String sanctionDate （制裁时间）

​	请求头：携带token

输出结果：ApiResult<List<BaseCount>>

## **类型分布查询**

请求地址：/entitiesDataInfo/getTypeDistribution

请求类型：GET

输入参数：

​	参数：String sanctionDate （制裁时间）

​	请求头：携带token

输出结果：ApiResult<List<BaseCount>>

## **区域分布查询**

请求地址：/entitiesDataInfo/getRegionDistribution

请求类型：GET

输入参数：

​	参数：String sanctionDate （制裁时间）

​	请求头：携带token

输出结果：ApiResult<List<BaseCount>>

## **制裁理由查询**

请求地址：/entitiesDataInfo/getSanReason

请求类型：GET

输入参数：

​	参数：String sanctionDate （制裁时间）

​	请求头：携带token

输出结果：ApiResult<List<String>>

## **深度挖掘-制裁信息变化统计**

请求地址：/entitiesDataInfo/getSanCountInfo

请求类型：GET

输入参数：

​	参数：String sanctionDate （制裁时间）

​	请求头：携带token

输出结果：ApiResult<SanCountInfo>

## **年度实体数统计**

请求地址：/entitiesDataInfo/getCountByDomianAndType

请求类型：GET

输入参数：

​	参数：String domianId （非必需，领域类别ID），Integer typeId （非必需，实体类别ID）

​	参考字典

​	请求头：携带token

输出结果：ApiResult<SanCountInfo>

## **重点实体列表查询**

请求地址：/entitiesDataInfo/getKeyEntities

请求类型：GET

输入参数：

​	参数：String sanctionDate（必需），String searchText（非必需，检索文本）

​	请求头：携带token

输出结果：ApiResult<List<OrgInfo>>

## **上市企业制裁强度**

请求地址：/entitiesDataInfo/listedEntity/sanInfo

请求类型：GET

输入参数：

​	参数：无

​	请求头：携带token

输出结果：ApiResult<List<BaseCount>>

## **上市企业融资变化情况**

请求地址：/entitiesDataInfo/listedEntity/financing

请求类型：GET

输入参数：

​	参数：无

​	请求头：携带token

输出结果：ApiResult<List<BaseCount>>

## **上市企业市值变化情况**

请求地址：/entitiesDataInfo/listedEntity/market

请求类型：GET

输入参数：

​	参数：无

​	请求头：携带token

输出结果：ApiResult<List<BaseCount>>

## **重点上市企业列表**

请求地址：/entitiesDataInfo/listedEntity/keyEntity

请求类型：GET

输入参数：

​	参数：String sanctionDate（必需），String searchText（非必需，检索文本）

​	请求头：携带token

输出结果：ApiResult<List<OrgInfo>>

## **历次制裁涉及领域数查询**

请求地址：/entitiesDataInfo/getPreviousDomian

请求类型：GET

输入参数：

​	参数：无

​	请求头：携带token

输出结果：ApiResult<List<BaseCount>>

## **具体领域的制裁实体数统计**

请求地址：/entitiesDataInfo/getDomianAnnual

请求类型：GET

输入参数：

​	参数：String domainId

​	请求头：携带token

输出结果：ApiResult<List<AnnualCount>>

## **具体实体类型的制裁实体数统计**

请求地址：/entitiesDataInfo/getEntityTypeAnnual

请求类型：GET

输入参数：

​	参数：Integer entityTypeId

​	请求头：携带token

输出结果：ApiResult<List<AnnualCount>>

## **产业链结构查询**

请求地址：/chain/getChainTree

请求类型：GET

输入参数：

​	参数：Integer chainId，非必需

​	请求头：携带token

输出结果：ApiResult<List<Chain>>

## **产业链鱼骨图信息查询**

请求地址：/chain/getChainFishbone

请求类型：GET

输入参数：

​	参数：Integer chainId

​	请求头：携带token

输出结果：ApiResult<FishboneResp>

## **产业链中国企业实体信息查询**

请求地址：/chain/getChainEntityStat

请求类型：GET

输入参数：

​	参数：Integer chainId

​	请求头：携带token

输出结果：ApiResult<AreasStreamResp>

## **实体列表查询**

请求地址：/entitiesDataInfo/getEntityList

请求类型：GET

输入参数：

​	参数：String sanctionDate（制裁时间），String domainId（领域ID）

​	请求头：携带token

输出结果：ApiResult<List<OrgInfo>>

## **历年制裁领域统计**

请求地址：/entitiesDataCount/getAnnualSanDomain

请求类型：POST

输入参数：

​	参数：AnnualDomainQuery annualDomainQuery

​	请求头：携带token

输出结果：ApiResult<List<AnnualDomainCount>>

## **新增实体数量增长趋势**

请求地址：/entitiesDataInfo/yoyComparison

请求类型：GET

输入参数：

​	参数：无输入

​	请求头：携带token

输出结果：ApiResult<List<AnnualCount>>

## **获取机构的详情信息**

请求地址：/organization/getDetail/{id}

请求类型：GET

输入参数：

​	参数：机构ID

​	请求头：携带token

输出结果：ApiResult<Organization>

## **获取5条美国前序事件**

请求地址：/entitiesDataInfo/precedingEvents

请求类型：GET

输入参数：

​	参数：String sanctionDate 制裁时间

​	请求头：携带token

输出结果：ApiResult<List<EventInfo>>