# 交互消息类

## 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;
}
```

## 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 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;

}
```



# 字典

## 领域类别（id：name）

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

## 实体类别（id：name）

1：人物、2：机构

# 出口管制

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

请求地址：/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）

请求地址：http://8.140.26.4:9085/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>>