提交 57543ed6 authored 作者: yanpeng's avatar yanpeng

api-5

上级 52826e66
......@@ -353,6 +353,24 @@ export function getEntitiesCountBy50PercentRules(
);
}
/**
* 获取前序事件
*/
// /entitiesDataInfo/precedingEvents
export function getPrecedingEvents(startTime = "2025-11-11", pageNum = 1, pageSize = 10) {
return request200(
request({
method: "POST",
url: "/api/entitiesDataInfo/precedingEvents",
data: {
sanctionDate: startTime,
pageNum,
pageSize
}
})
);
}
/**
* 领域分布查询
*/
......@@ -745,3 +763,76 @@ export function getKeyListedEntityList(date, keyword = "") {
})
);
}
/**
* 获取科学仪器对美依赖数量
*/
export function getScientificInstrumentDependencyCount(orgIds = "12100000400012916R,121000004013595328,12100000435230200R") {
return request200(
request({
method: "GET",
url: "/api/instrument/getDependencyUS",
params: {
orgIds
}
})
);
}
/**
* 科学仪器近十年对美依赖度升高风险分析
* url: /instrument/getDependencyUSRisk
*/
export function getScientificInstrumentDependencyRisk() {
return request200(
request({
method: "GET",
url: "/api/instrument/getDependencyUSRisk"
})
);
}
/**
* 科学仪器近十年国产化数量统计
* url:/instrument/getLocalizationRisk
*/
export function getScientificInstrumentLocalizationRisk() {
return request200(
request({
method: "GET",
url: "/api/instrument/getLocalizationRisk"
})
);
}
/**
* 科学仪器进口国统计
* url: /instrument/getOriginCount
*/
export function getScientificInstrumentOriginCount(orgIds = "12100000400012916R,121000004013595328,12100000435230200R") {
return request200(
request({
method: "GET",
url: "/api/instrument/getOriginCount",
params: {
orgIds
}
})
);
}
/**
* 新增科研机构列表
* url: /entitiesDataInfo/scientificImpact/entityList
*/
export function getScientificImpactEntityList(startTime) {
return request200(
request({
method: "GET",
url: "/api/entitiesDataInfo/scientificImpact/entityList",
params: {
sanctionDate: startTime || "2025-11-11"
}
})
);
}
[
{
"id": 86,
"name": "人工智能",
"nameZh": "人工智能",
"description": null,
"parentId": null,
"isMainBranch": "Y",
"children": null
"name": "美国",
"count": 0.37960339943342775
},
{
"name": "德国",
"count": 0.20113314447592068
},
{
"name": "日本",
"count": 0.1558073654390935
}
]
\ No newline at end of file
......@@ -99,6 +99,13 @@ import college9 from "../../assets/images/college9.png";
import college10 from "../../assets/images/college10.png";
import college11 from "../../assets/images/college11.png";
import { getHorizontalBarChart1, getPieOption2, getMultipleLineChart } from "../../utils/charts";
import {
getScientificImpactEntityList,
getScientificInstrumentDependencyCount,
getScientificInstrumentDependencyRisk,
getScientificInstrumentLocalizationRisk,
getScientificInstrumentOriginCount
} from "@/api/exportControl";
const selectOptions = [
{
value: 1,
......@@ -170,39 +177,153 @@ const horizontalBarOptions = shallowRef({});
const pieOptions2 = shallowRef({});
const multipleLineOptions1 = shallowRef({});
const multipleLineOptions2 = shallowRef({});
onMounted(() => {
horizontalBarOptions.value = getHorizontalBarChart1(
["地球探测仪器", "计算机及其配套设备", "天文仪器", "分析仪器", "核仪器", "物理性能测试仪器", "医学科研仪器"],
[10, 10, 21, 25, 79, 95, 109],
false
);
pieOptions2.value = getPieOption2([
{ name: "美国", value: 27 },
{ name: "日本", value: 22 },
{ name: "德国", value: 18 },
{ name: "英国", value: 15 },
{ name: "韩国", value: 12 },
{ name: "荷兰", value: 8 },
{ name: "其他", value: 7 }
]);
multipleLineOptions1.value = getMultipleLineChart({
dates: ["2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025"],
data: [
{ name: "电子测量仪器", value: [45, 35, 25, 20, 20, 14, 15, 15, 23, 21] },
{ name: "分析仪器", value: [35, 33, 24, 21, 22, 18, 13, 19, 21, 31] },
{ name: "工艺试验仪器", value: [32, 22, 12, 11, 14, 15, 17, 13, 12, 26] },
{ name: "核仪器", value: [48, 38, 28, 28, 28, 18, 18, 18, 28, 28] }
]
});
multipleLineOptions2.value = getMultipleLineChart({
dates: ["2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025"],
data: [
{ name: "电子测量仪器", value: [45, 35, 25, 20, 20, 14, 15, 15, 23, 21] },
{ name: "分析仪器", value: [35, 33, 24, 21, 22, 18, 13, 19, 21, 31] },
{ name: "工艺试验仪器", value: [32, 22, 12, 11, 14, 15, 17, 13, 12, 26] },
{ name: "核仪器", value: [48, 38, 28, 28, 28, 18, 18, 18, 28, 28] }
]
});
// 获取仪器对美依赖度升高风险分析数据
const fetchDependencyRiskData = async () => {
try {
const data = await getScientificInstrumentDependencyRisk();
if (data && data.instrumentCountList && Array.isArray(data.instrumentCountList)) {
// 提取年份数据(去重并排序)
const allYears = [...new Set(data.instrumentCountList.flatMap(item => item.countList.map(c => c.year)))].sort();
// 转换数据格式以适应 getMultipleLineChart
const chartData = data.instrumentCountList.map(item => {
// 为每个仪器类型创建完整的年份数据序列
const values = allYears.map(year => {
const yearData = item.countList.find(c => c.year === year);
return yearData ? yearData.count : 0;
});
return {
name: item.name,
value: values
};
});
// 使用 getMultipleLineChart 生成图表配置
multipleLineOptions1.value = getMultipleLineChart({
dates: allYears.map(String), // 转换为字符串以匹配原数据格式
data: chartData
});
}
} catch (error) {
console.error("获取仪器对美依赖度升高风险分析数据失败:", error);
}
};
// 获取仪器国产化降低风险分析数据
const fetchLocalizationRiskData = async () => {
try {
const data = await getScientificInstrumentLocalizationRisk();
if (data && data.instrumentCountList && Array.isArray(data.instrumentCountList)) {
// 提取年份数据(去重并排序)
const allYears = [...new Set(data.instrumentCountList.flatMap(item => item.countList.map(c => c.year)))].sort();
// 转换数据格式以适应 getMultipleLineChart
const chartData = data.instrumentCountList.map(item => {
// 为每个仪器类型创建完整的年份数据序列
const values = allYears.map(year => {
const yearData = item.countList.find(c => c.year === year);
return yearData ? yearData.count : 0;
});
return {
name: item.name,
value: values
};
});
// 使用 getMultipleLineChart 生成图表配置
multipleLineOptions2.value = getMultipleLineChart({
dates: allYears.map(String), // 转换为字符串以匹配原数据格式
data: chartData
});
}
} catch (error) {
console.error("获取仪器国产化降低风险分析数据失败:", error);
}
};
// 获取各类别仪器对美依赖情况数据
const fetchDependencyCountData = async () => {
try {
const data = await getScientificInstrumentDependencyCount();
if (data && Array.isArray(data)) {
// 按照 count 降序排列
const sortedData = data.sort((a, b) => a.count - b.count);
// 提取仪器名称和对应的计数
const names = sortedData.map(item => item.name);
const counts = sortedData.map(item => item.count);
// 使用 getHorizontalBarChart1 生成图表配置
horizontalBarOptions.value = getHorizontalBarChart1(names, counts, false);
}
} catch (error) {
console.error("获取各类别仪器对美依赖情况数据失败:", error);
}
};
// 获取仪器进口国可替代性分析数据
const fetchOriginCountData = async () => {
try {
const data = await getScientificInstrumentOriginCount();
if (data && Array.isArray(data)) {
// 转换数据格式以适应 getPieOption2
// 数据结构应该是 [{ name: "国家名", value: 数量 }]
const pieData = data.map(item => ({
name: item.name,
value: (item.count * 100).toFixed(1)
}));
// 使用 getPieOption2 生成图表配置
pieOptions2.value = getPieOption2(pieData);
}
} catch (error) {
console.error("获取仪器进口国可替代性分析数据失败:", error);
}
};
onMounted(async () => {
// horizontalBarOptions.value = getHorizontalBarChart1(
// ["地球探测仪器", "计算机及其配套设备", "天文仪器", "分析仪器", "核仪器", "物理性能测试仪器", "医学科研仪器"],
// [10, 10, 21, 25, 79, 95, 109],
// false
// );
// pieOptions2.value = getPieOption2([
// { name: "美国", value: 27 },
// { name: "日本", value: 22 },
// { name: "德国", value: 18 },
// { name: "英国", value: 15 },
// { name: "韩国", value: 12 },
// { name: "荷兰", value: 8 },
// { name: "其他", value: 7 }
// ]);
// multipleLineOptions1.value = getMultipleLineChart({
// dates: ["2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025"],
// data: [
// { name: "电子测量仪器", value: [45, 35, 25, 20, 20, 14, 15, 15, 23, 21] },
// { name: "分析仪器", value: [35, 33, 24, 21, 22, 18, 13, 19, 21, 31] },
// { name: "工艺试验仪器", value: [32, 22, 12, 11, 14, 15, 17, 13, 12, 26] },
// { name: "核仪器", value: [48, 38, 28, 28, 28, 18, 18, 18, 28, 28] }
// ]
// });
// multipleLineOptions2.value = getMultipleLineChart({
// dates: ["2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025"],
// data: [
// { name: "电子测量仪器", value: [45, 35, 25, 20, 20, 14, 15, 15, 23, 21] },
// { name: "分析仪器", value: [35, 33, 24, 21, 22, 18, 13, 19, 21, 31] },
// { name: "工艺试验仪器", value: [32, 22, 12, 11, 14, 15, 17, 13, 12, 26] },
// { name: "核仪器", value: [48, 38, 28, 28, 28, 18, 18, 18, 28, 28] }
// ]
// });
// 获取各类别仪器对美依赖情况数据
await fetchDependencyCountData();
// 获取仪器进口国可替代性分析数据
await fetchOriginCountData();
// 获取仪器对美依赖度升高风险分析数据
await fetchDependencyRiskData();
// 获取仪器国产化降低风险分析数据
await fetchLocalizationRiskData();
});
</script>
......
......@@ -12,7 +12,7 @@
<div class="item" v-for="(item, index) in listData" :key="index" @click="handleEttClick(item)">
<div class="index" :class="{ isTopTen: index < 10 }">{{ index + 1 }}</div>
<div class="name">{{ item.name || item.nameEn }}</div>
<div class="icon" :class="{ iconUp: item.isUp, iconDown: !item.isUp }"></div>
<div class="icon" :class="{ iconUp: item.marketChange > 0, iconDown: item.marketChange < 0 }"></div>
</div>
</div>
</div>
......
......@@ -186,12 +186,12 @@ const fetchEntityFinancing = async () => {
// 按日期排序
const sortedData = data
.sort((a, b) => {
return new Date(a.name) - new Date(b.name);
return new Date(a.year) - new Date(b.year);
})
.filter((item, idx) => idx % 3 === 0);
// 提取 x 轴数据(日期)
const xAxisData = sortedData.map(item => item.name);
const xAxisData = sortedData.map(item => item.year);
// 提取 y 轴数据(融资数量)
const seriesData = sortedData.map(item => item.count);
......
......@@ -30,7 +30,7 @@ onMounted(async () => {
.filter(item => item.count > 0)
.map(item => {
return {
name: item?.domain,
name: item?.name,
value: item?.count
};
})
......
......@@ -92,8 +92,8 @@
家,其中50%规则涉及
<span class="text2">{{
panel5IsChecked
? entitiesCountBy50PercentRulesData?.ruleCount
: entitiesCountBy50PercentRulesData?.totalCount
? entitiesCountBy50PercentRules?.ruleCount
: entitiesCountBy50PercentRules?.totalCount
}}</span>
</div>
......@@ -160,18 +160,20 @@
</CardCustom>
<CardCustom title="美国前序相关制裁、前序相关事件列表" :style="{ width: '600px', height: '678px' }">
<div class="panel6">
<div class="item" v-for="(item, idx) in panel6" :key="item.title">
<div class="left">
<div class="icon"></div>
<div class="line"></div>
</div>
<div class="right">
<div class="date">{{ item.time }}</div>
<div class="title">{{ item.title }}</div>
<div class="desc">{{ item.desc }}</div>
<div class="panel6-list">
<div class="item" v-for="(item, idx) in panel6" :key="item.title">
<div class="left">
<div class="icon"></div>
<div class="line"></div>
</div>
<div class="right">
<div class="date">{{ item.time }}</div>
<div class="title">{{ item.title }}</div>
<div class="desc">{{ item.desc }}</div>
</div>
</div>
</div>
<div class="more">
<div class="more" @click="handleMoreClick">
查看更多
<span class="moreIcon"></span>
</div>
......@@ -189,21 +191,14 @@ import ButtonList from "@/components/buttonList/buttonList.vue";
import Hint from "../components/hint.vue";
import { onMounted, reactive, ref, shallowRef, watch } from "vue";
import panel1_1 from "../../assets/images/panel1_1.png";
import panel5_1 from "../../assets/images/panel5_1.png";
import panel5_2 from "../../assets/images/panel5_2.png";
import panel5_3 from "../../assets/images/panel5_3.png";
import panel5_4 from "../../assets/images/panel5_4.png";
import panel5_5 from "../../assets/images/panel5_5.png";
import panel5_6 from "../../assets/images/panel5_6.png";
import panel5_7 from "../../assets/images/panel5_7.png";
import panel5_8 from "../../assets/images/panel5_8.png";
import {
getOrganizationInfo,
getPersonList,
getSanReasonSelect,
getSelectEntitiesList,
getEntitiesList,
getEntitiesCountBy50PercentRules
getEntitiesCountBy50PercentRules,
getPrecedingEvents
} from "@/api/exportControl";
import _ from "lodash";
......@@ -212,32 +207,7 @@ import { formatAnyDateToChinese } from "../../utils";
const route = useRoute();
const router = useRouter();
const organizationInfo = shallowRef({});
const personLis = shallowRef([
// {
// name: "吉娜·雷蒙多",
// enName: "Gina Raimondo",
// party: "美国民主党",
// img: panel2_1
// },
// {
// name: "迈克・约翰逊",
// enName: "Mike Johnson",
// party: "美国共和党",
// img: panel2_2
// },
// {
// name: "艾伦·埃斯特韦斯",
// enName: "Alan Estevez",
// party: "美国民主党",
// img: panel2_3
// },
// {
// name: "凯・格兰杰",
// enName: "Kay Granger",
// party: "美国共和党",
// img: panel2_4
// }
]);
const personLis = shallowRef([]);
const sanReasonSelect = shallowRef([
{
text: "获取美国产物项,以支持中国量子技术;"
......@@ -276,18 +246,33 @@ const total = ref(0);
const loading = ref(false);
const tableWrapRef = ref(null);
const noMoreData = ref(false);
const entitiesCountBy50PercentRules = ref(0);
const entitiesCountBy50PercentRules = ref({
ruleCount: 0,
totalCount: 0
});
const precedingEvents = shallowRef([]);
const panel6 = ref([]);
const panel6CurrentPage = ref(1);
const panel6PageSize = ref(10);
const panel6Loading = ref(false);
const panel6NoMoreData = ref(false);
onMounted(async () => {
try {
const [organizationInfoData, sanReasonSelectData, entitiesCountBy50PercentRulesData] = await Promise.all([
getOrganizationInfo(),
// getPersonList(),
getSanReasonSelect(route.query.startTime),
getEntitiesCountBy50PercentRules("实体清单", currentPage.value, pageSize.value)
// getSelectEntitiesList(route.query.startTime)
]);
const [organizationInfoData, sanReasonSelectData, entitiesCountBy50PercentRulesData, precedingEventsData] =
await Promise.all([
getOrganizationInfo(),
// getPersonList(),
getSanReasonSelect(route.query.startTime),
getEntitiesCountBy50PercentRules("实体清单", currentPage.value, pageSize.value),
// getSelectEntitiesList(route.query.startTime),
getPrecedingEvents(route.query.startTime)
]);
console.log("entitiesCountBy50PercentRulesData", entitiesCountBy50PercentRulesData);
entitiesCountBy50PercentRules.value = {
ruleCount: entitiesCountBy50PercentRulesData?.ruleCount || 0,
totalCount: entitiesCountBy50PercentRulesData?.totalCount || 0
};
organizationInfo.value = {
img: panel1_1,
mingcheng: organizationInfoData?.orgNameZh,
......@@ -307,18 +292,12 @@ onMounted(async () => {
return { text: item };
});
// selectEntitiesList.value = _.map(selectEntitiesListData, item => {
// return {
// name: item?.entityNameZh,
// domains: item.techDomainList,
// address: "--",
// time: formatAnyDateToChinese(item?.startTime),
// isUp: true,
// revenue: "--",
// subCompany: "--",
// img: ""
// };
// });
precedingEvents.value = precedingEventsData.content || [];
panel6.value = precedingEventsData.content.map(item => ({
...item,
time: formatAnyDateToChinese(item.eventTime),
desc: item.summary || "--"
}));
// 初始化加载第一页数据
await fetchEntitiesList(currentPage.value, pageSize.value);
......@@ -427,108 +406,10 @@ const panel5TypeMap = {
通信网络: "warning",
航空航天: "success"
};
const panel5MockData = [
{
name: "科大讯飞股份有限公司",
domains: ["人工智能"],
address: "深圳",
time: "2025年9月",
isUp: true,
revenue: "325",
subCompany: "讯飞智元信息科技...等15家>",
img: panel5_1
},
{
name: "华为技术有限公司",
domains: ["通信网络"],
address: "--",
time: "2025年9月",
isUp: true,
revenue: "325",
subCompany: "海思半导体有限公...等15家>",
img: panel5_2
},
{
name: "中国航空工业集团",
domains: ["航空航天"],
address: "--",
time: "2025年9月",
isUp: true,
revenue: "325",
subCompany: "中航科技控股有限...等15家>",
img: panel5_3
},
{
name: "杭州海康威视有限公司",
domains: ["航空航天"],
address: "深圳",
time: "2025年9月",
isUp: true,
revenue: "325",
subCompany: "海云智能科技有限...等15家>",
img: panel5_4
},
{
name: "浪潮集团有限公司",
domains: ["人工智能"],
address: "--",
time: "2025年9月",
isUp: true,
revenue: "325",
subCompany: "浪潮商用机器有限...等15家>",
img: panel5_5
},
{
name: "中兴通讯股份有限公司",
domains: ["航空航天"],
address: "深圳",
time: "2025年9月",
isUp: true,
revenue: "325",
subCompany: "中融讯合通信设备...等15家>",
img: panel5_6
},
{
name: "大疆创新科技有限公司",
domains: ["人工智能"],
address: "--",
time: "2025年9月",
isUp: true,
revenue: "325",
subCompany: "大疆智能计算服务...等15家>",
img: panel5_7
},
{
name: "艾睿中国电子贸易有限公司",
domains: ["航空航天"],
address: "上海",
time: "2025年9月",
isUp: true,
revenue: "325",
subCompany: "讯飞智元信息科技...等15家>",
img: panel5_8
}
];
// 历次制裁过程
const panel6 = ref([
{
time: "2025-09-02",
title: "传感器和仪器仪表技术咨询委员会将于2024年5月9日召开部分闭门会议",
desc: "传感器与仪器仪表技术咨询委员会(以下简称“委员会”)将于美国东部夏令时间2024年5月9日星期四下午1:00至2:30召开会议。本次会议将通过微软团队(MS Teams)以线上形式举行。根据美国商务部第10-16号《部门组织》文件。"
},
{
time: "2025-04-17",
title: "美国对华加征关税至20%并扩大科技制裁",
desc: '美国以"芬太尼问题"为由提高对华关税至20%,恢复钢铁铝关税;同时推动《恢复贸易公平法案》,计划对中国商品征收100%关税。系统性打压中国高科技产业,关税措施实质为经济勒索。'
},
{
time: "2025-04-17",
title: "中美关税战升级至125%与反制措施",
desc: '美国将对华关税从34%提升至84%(总税率104%),中方同步对美商品加征同等税率,并暂停进口美国影片、限制留学合作。特朗普政府通过"基准关税+对等关税+额外加征"策略施压,引发全球供应链震荡。'
}
]);
const handleOrgClick = item => {
console.log(item);
if (item.entityType != 2) return;
const route = router.resolve({
path: "/companyPages",
query: {
......@@ -537,6 +418,47 @@ const handleOrgClick = item => {
});
window.open(route.href, "_blank");
};
// 处理"查看更多"点击事件
const handleMoreClick = async () => {
if (panel6Loading.value || panel6NoMoreData.value) return;
panel6Loading.value = true;
try {
// 增加页码
panel6CurrentPage.value++;
// 获取更多数据
const moreEvents = await getPrecedingEvents(route.query.startTime, panel6CurrentPage.value, panel6PageSize.value);
if (moreEvents && Array.isArray(moreEvents.content) && moreEvents.content.length > 0) {
// 处理新数据
const newEvents = moreEvents.content.map(item => ({
...item,
time: formatAnyDateToChinese(item.eventTime),
desc: item.summary || "--"
}));
// 追加到现有数据
panel6.value = [...panel6.value, ...newEvents];
// 检查是否还有更多数据(简单的检查方式)
// 如果返回的数据少于请求的数量,则认为没有更多数据
if (newEvents.length < panel6PageSize.value) {
panel6NoMoreData.value = true;
}
} else {
// 没有更多数据
panel6NoMoreData.value = true;
}
} catch (error) {
console.error("获取更多前序事件失败:", error);
// 出错时回退页码
panel6CurrentPage.value--;
} finally {
panel6Loading.value = false;
}
};
</script>
<style lang="scss" scoped>
......@@ -826,10 +748,16 @@ const handleOrgClick = item => {
}
.panel6 {
height: 100%;
padding: 6px 45px 0 28px;
padding: 6px 45px 20px 28px;
display: flex;
flex-direction: column;
align-items: center;
.panel6-list {
height: 90%;
overflow-y: auto;
margin-bottom: auto;
padding-left: 5px;
}
.item {
display: flex;
.left {
......
<template>
<div class="message-bubble">
<div class="avatar-container" @click="handleClick">
<img :src="avatar" :alt="name" class="avatar" />
<img :src="avatar || avatarUser" :alt="name" class="avatar" />
</div>
<div class="bubble-container">
<div class="bubble">
......@@ -19,6 +19,8 @@
</template>
<script setup>
import avatarUser from "@/assets/images/avatar_user.png";
const emit = defineEmits(["click", "info-click"]);
defineProps({
avatar: {
......
......@@ -220,7 +220,7 @@
<template #default>
<div class="news-list">
<NewsList :list-data="newsList" @click="handleNewsInfoClick" />
<NewsList :list-data="newsList" @item-click="item => handleNewsInfoClick(item)" />
</div>
</template>
</custom-container>
......@@ -321,7 +321,7 @@
</div>
<div class="box3-content">
<div class="box3-content-title">商业管制清单(CCL)更新频度</div>
<el-table :data="tableData1" stripe style="width: 100%">
<el-table :data="tableData2" stripe style="width: 100%">
<el-table-column prop="year" label="年份" width="150" />
<el-table-column label="发布次数" width="200">
<template #default="scope">
......@@ -694,6 +694,7 @@ import _ from "lodash";
const handleCompClick = item => {
console.log("item", item);
if (item.entityType != 2) return;
const route = router.resolve({
path: "/companyPages",
query: {
......@@ -712,6 +713,8 @@ const trendOption = ref({});
const trendChecked = ref(false);
// 发布频度
const tableData1 = ref([]);
// CCL发布频度
const tableData2 = ref([]);
// 历次制裁过程
const sanctionProcessList = ref([]);
const sanctionPage = ref(1);
......@@ -727,10 +730,11 @@ const newsList = ref([]);
onMounted(async () => {
try {
const [dataCount, entitiesDataInfo, industryCountByYear, countDomainByYear] = await Promise.all([
const [dataCount, entitiesDataInfo, industryCountByYear,cclList, countDomainByYear] = await Promise.all([
getEntitiesDataCount(),
getEntitiesDataInfo(),
getIndustryCountByYear(1),
getIndustryCountByYear(13),
getCountDomainByYear(trendChecked.value)
]);
// 交换第二个和第三个元素
......@@ -742,6 +746,7 @@ onMounted(async () => {
});
entitiesDataInfoList.value = entitiesDataInfo || [];
const list = _.chain(industryCountByYear).filter("year").orderBy("year", "desc").value();
const cclList1 = _.chain(cclList).filter("year").orderBy("year", "desc").value();
const total = _.sumBy(list, "count");
tableData1.value = _.map(list, item => {
return {
......@@ -751,6 +756,14 @@ onMounted(async () => {
tags: item.domain
};
}).slice(0, 5);
tableData2.value = _.map(cclList1, item => {
return {
year: item.year,
num: item.count,
percent: item.count / total,
tags: item.domain
};
}).slice(0, 5);
console.log("countDomainByYear", countDomainByYear);
// 整理柱状图数据并应用到趋势图
if (countDomainByYear && countDomainByYear[0].yearDomainCount) {
......@@ -1194,6 +1207,7 @@ const fetchNewsInfo = async () => {
const data = await getNewsInfo();
if (data && Array.isArray(data)) {
newsList.value = data.map(item => ({
...item,
avatar: item.newsImage,
name: item.newsTitle,
time: formatTime(item.newsDate),
......@@ -1439,7 +1453,7 @@ const handleNewsInfoClick = item => {
const route = router.resolve({
path: "/newsAnalysis",
query: {
newsId: item.id
newsId: item.newsId
}
});
window.open(route.href, "_blank");
......
......@@ -139,6 +139,7 @@ export function getPieOption2(data, title) {
}
},
legend: {
type: "scroll",
icon: "rect",
top: "center",
right: "40",
......@@ -825,6 +826,7 @@ export const getMultipleLineChart = obj => {
containLabel: true
},
legend: {
type: "scroll",
right: "5%",
icon: "circle",
itemWidth: 15,
......@@ -835,7 +837,7 @@ export const getMultipleLineChart = obj => {
},
itemGap: 17,
data: obj.data.map((item, index) => {
return { name: item.name, itemStyle: { color: color[index] } };
return { name: item.name, itemStyle: { color: color[index % 4] } };
})
},
xAxis: {
......
# 交互消息类
## 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 String orgNameZh;
// 相关制裁措施列表
private List<String> sanTypeList;
// 机构职责
private String orgDuty;
// 机构图片
private String imageUrl;
// 人员列表
private List<PersonInfo> personList;
// 领域列表
private List<String> domainList;
// 市值
private Double marketValue;
// 市值变化(-1:降低;0:持平:1:上升)
private Integer marketChange;
// 地址
private String address;
// 类型
private String orgType;
// 行业
private List<String> industryList;
// 科研仪器数
private Integer instrumentNum;
}
```
## 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;
}
```
## RegionCount
```java
public class RegionCount {
// 名称
private String name;
// 数量
private Integer count;
// 经度
private Double lon;
// 纬度
private Double lat;
}
```
## EventQuery
```java
public class EventQuery extends BasePageQuery {
// 制裁记录ID (暂时无作用,后续根据ID查)
private Integer sanctionId;
// 制裁时间
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date sanctionDate;
}
```
## RuleEntityCount
```JAVA
public class RuleEntityCount {
// 总数
private Integer totalCount;
// 50%规则关联数
private Integer ruleCount;
}
```
## RiskSignalVO
```java
public class RiskSignalVO {
@ApiModelProperty("风险信号id")
private Long signalId;
@ApiModelProperty("风险信号标题")
private String signalTitle;
@ApiModelProperty("风险信号时间")
private LocalDate signalTime;
@ApiModelProperty("风险信号等级")
private String signalLevel;
@ApiModelProperty("风险信号关联法案id")
private String billId;
@ApiModelProperty("风险信号关联政令id")
private Long orderId;
@ApiModelProperty("风险信号关联报告id")
private String reportId;
@ApiModelProperty("风险信号关联制裁id")
private Integer sanId;
}
```
## NewsVO
```java
public class NewsVO {
@ApiModelProperty(value = "新闻id")
private String newsId;
@ApiModelProperty(value = "新闻时间")
private LocalDate newsDate;
@ApiModelProperty(value = "新闻内容")
private String newsContent;
@ApiModelProperty(value = "新闻标题")
private String newsTitle;
@ApiModelProperty(value = "新闻机构")
private String newsOrg;
@ApiModelProperty(value = "新闻图片")
private String newsImage;
}
```
## RemarksVO
```java
public class RemarksVO {
@ApiModelProperty(value = "人物id")
private String personId;
@ApiModelProperty(value = "人物图像")
private String personImage;
@ApiModelProperty(value = "人物名称")
private String personName;
@ApiModelProperty(value = "言论ID")
private Long remarksId;
@ApiModelProperty(value = "人物言论")
private String remarks;
@ApiModelProperty(value = "时间")
private LocalDateTime time;
@ApiModelProperty(value = "言论平台名称")
private String orgName;
}
```
# 字典
## 领域类别(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条)
请求地址:/entitiesDataInfo/getLatestInfo
请求类型:GET
输入参数:
​ 参数:无输入
​ 请求头:携带token,内容为:
```
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```
输出结果:ApiResult<LatestExportControlInfo>
## 发布(更新)频度
请求地址:/entitiesDataCount/getAnnualCount
请求类型:GET
输入参数:
​ 参数:Integer sanTypeId(制裁类别)
​ 实体清单发布频度:1;CCL发布频度:13
​ 请求头:携带token,内容为:
```
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```
输出结果:ApiResult<List<AnnualCount>>
## **制裁领域分析**(20251215)
请求地址:/entitiesDataCount/getSanDomainCount
请求类型:GET
输入参数:
​ 参数:Boolean rule(是否勾选50%规则)
​ 请求头:携带token,内容为:
```
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```
输出结果:ApiResult<List<DomainCount>>
## **历次制裁过程**
请求地址:/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<RegionCount>>
## **制裁理由查询**
请求地址:/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/getChainInfo
请求类型:GET
输入参数:
​ 参数:Integer domainId,领域ID
​ 请求头:携带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>
## **获取美国前序事件**
请求地址:/entitiesDataInfo/precedingEvents
请求类型:POST
输入参数:
​ 参数:EventQuery eventQuery
​ 请求头:携带token
输出结果:ApiResult<Page<EventInfo>>
## **新增科研机构列表**
请求地址:/entitiesDataInfo/scientificImpact/entityList
请求类型:GET
输入参数:
​ 参数:String sanctionDate
​ 请求头:携带token
输出结果:ApiResult<List<BaseCount>>
## **各类别仪器对美依赖情况**
请求地址:/instrument/getDependencyUS
请求类型:GET
输入参数:
​ 参数:List<String> orgIds 机构公司ID列表
​ 请求头:携带token
输出结果:ApiResult<List<BaseCount>>
## **仪器对美依赖度升高风险分析**
请求地址:/instrument/getDependencyUSRisk
请求类型:GET
输入参数:
​ 参数:无
​ 请求头:携带token
输出结果:ApiResult<List<BaseCount>>
## **仪器进口国可替代性分析**
请求地址:/instrument/getOriginCount
请求类型:GET
输入参数:
​ 参数:List<String> orgIds 机构公司ID列表
​ 请求头:携带token
输出结果:ApiResult<List<BaseCount>>
## **仪器国产化降低风险分析**
请求地址:/instrument/getLocalizationRisk
请求类型:GET
输入参数:
​ 参数:无
​ 请求头:携带token
输出结果:ApiResult<List<BaseCount>>
## **制裁实体清单50%规则实体数**
请求地址:/sanctionList/getRuleCount
请求类型:POST
输入参数:
​ 参数:ExportPageQuery exportPageQuery
​ 请求头:携带token
输出结果:ApiResult<RuleEntityCount>
## **科研院所类实体历史制裁情况**
请求地址:/entitiesDataInfo/annual/researchInstitute
请求类型:GET
输入参数:
​ 参数:无
​ 请求头:携带token
输出结果:ApiResult<List<AnnualCount>>
## **企业类实体历史制裁情况**
请求地址:/entitiesDataInfo/annual/enterprise
请求类型:GET
输入参数:
​ 参数:无
​ 请求头:携带token
输出结果:ApiResult<List<AnnualCount>>
## **风险信号**
请求地址:/commonFeature/riskSignal/{moduleId}
请求类型:GET
输入参数:
​ 参数:moduleId
​ 请求头:携带token
输出结果:ApiResult<List<RiskSignalVO>>
## **新闻资讯**
请求地址:/commonFeature/news/{moduleId}
请求类型:GET
输入参数:
​ 参数:moduleId
​ 请求头:携带token
输出结果:ApiResult<List<NewsVO>>
## **社交媒体**
请求地址:/commonFeature/remarks/{moduleId}
请求类型:GET
输入参数:
​ 参数:moduleId
​ 请求头:携带token
输出结果:ApiResult<List<RemarksVO>>
\ No newline at end of file
# 交互消息类
## 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>>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论