Commit 70b7d73d by lixinming

no message

parent 7678aded
...@@ -255,25 +255,25 @@ async function 商标详情查询(uscc, id) { ...@@ -255,25 +255,25 @@ async function 商标详情查询(uscc, id) {
async function 专利查询(uscc) { async function 专利查询(uscc) {
let {header, query} = getReqParam(uscc); // let {header, query} = getReqParam(uscc);
let qccselectdata:any = await getQcc('https://api.qichacha.com/PatentV4/SearchMultiPatents', query, header); // let qccselectdata:any = await getQcc('https://api.qichacha.com/PatentV4/SearchMultiPatents', query, header);
if (Array.isArray(qccselectdata)) { // if (Array.isArray(qccselectdata)) {
let addList = []; // let addList = [];
for (let i = 0; i < qccselectdata.length; i++) { // for (let i = 0; i < qccselectdata.length; i++) {
let qcc专利详情 = {}; // let qcc专利详情 = {};
let info = qccselectdata[i]; // let info = qccselectdata[i];
let qcc专利Id = info.Id; // let qcc专利Id = info.Id;
qccselectdata[i]["qcc专利详情"] = await 专利详情查询(qcc专利Id); // qccselectdata[i]["qcc专利详情"] = await 专利详情查询(qcc专利Id);
addList.push({ // addList.push({
iprId:randomId(TABLEID.知识产权), // iprId:randomId(TABLEID.知识产权),
}); // });
} // }
} // }
return qccselectdata; // return qccselectdata;
} }
......
...@@ -4,22 +4,26 @@ import { systemConfig } from "../config/serverConfig"; ...@@ -4,22 +4,26 @@ import { systemConfig } from "../config/serverConfig";
import { getQcc } from "../util/request"; import { getQcc } from "../util/request";
import { getMySqlMs, getPinyinInitials, randomId } from "../tools/system"; import { getMySqlMs, getPinyinInitials, randomId } from "../tools/system";
import moment = require("moment"); import moment = require("moment");
import { FINANCINGROUNDS, STATE } from "../config/enum/enum";
const md5 = require("md5"); const md5 = require("md5");
/** /**
* 获取数据库所有企业uscc,进行企查查数据同步 * 同步企查查数据
* 逻辑:获取数据库所有企业uscc,进行企查查数据同步
*/ */
export async function qccData() { export async function updateQCCDataTask() {
let enterpriseList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.企业基础信息表, {}, ["eId", "uscc", "enterpriseName"]); let enterpriseList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.企业基础信息表, {}, ["eId", "uscc", "enterpriseName"]);
console.log(`开始同步企查查数据,本次同步同${enterpriseList.length}家`);
for (let i = 0; i < enterpriseList.length; i++) { for (let i = 0; i < enterpriseList.length; i++) {
let info = enterpriseList[i]; let info = enterpriseList[i];
console.log("开始同步企查查数据");
await awaitData(info.uscc, info.eId); await updateItemQCCData(info.uscc, info.eId);
console.log(`${info.enterpriseName} 同步成功, eId:${info.eId},下标 ${i}`); console.log(`下标 ${i} => eId:${info.eId},uscc:${info.uscc}`);
} }
console.log(`${enterpriseList.length}家企业同步成功`);
} }
...@@ -32,28 +36,24 @@ async function 数据是否存在(tableName, param, idKey) { ...@@ -32,28 +36,24 @@ async function 数据是否存在(tableName, param, idKey) {
} }
async function awaitData(uscc, eId) {
await 工商信息(uscc, eId);
await 专利查询(uscc, eId);
// await 软件著作(uscc);
// await 主要人员(uscc);
// await 分支机构(uscc);
// await 行政许可核查(uscc);
// await 空壳扫描(uscc);q
// await 准入尽职调查(uscc);
// await 融资信息核查(uscc);
// await 国际专利(uscc);
// await 科创分(uscc);
// await 资质证书(uscc);
// await 专利查询(uscc);
// await 失信核查(uscc);
// await 严重违法核查(uscc);
// await 企业对外投资核查(uscc);
console.log("企查查数据同步成功");
/**
* 更新单个企业
* @param uscc
* @param eId
*/
export async function updateItemQCCData(uscc, eId) {
await 工商信息(uscc, eId);
await 知识产权(uscc, eId);
await 主要人员(uscc, eId);
await 空壳扫描(uscc, eId);
await 准入尽职调查(uscc, eId);
await 失信核查(uscc, eId);
await 严重违法核查(uscc ,eId);
await 科创分(uscc, eId);
await 资质证书(uscc, eId);
await 融资信息核查(uscc, eId);
await 企业对外投资核查(uscc, eId);
} }
/** /**
...@@ -61,7 +61,7 @@ async function awaitData(uscc, eId) { ...@@ -61,7 +61,7 @@ async function awaitData(uscc, eId) {
* @param uscc * @param uscc
* @returns * @returns
*/ */
function getReqParam(uscc, isKeyNo?) { function getReqParam(uscc, isKeyNo?) {
const TimeSpan = Math.round(new Date().valueOf()/ 1000); const TimeSpan = Math.round(new Date().valueOf()/ 1000);
let header = { let header = {
Token:md5(`${systemConfig.qccKey}${TimeSpan}${systemConfig.qccSecretKey}`).toUpperCase(), Token:md5(`${systemConfig.qccKey}${TimeSpan}${systemConfig.qccSecretKey}`).toUpperCase(),
...@@ -73,11 +73,21 @@ async function awaitData(uscc, eId) { ...@@ -73,11 +73,21 @@ async function awaitData(uscc, eId) {
key:systemConfig.qccKey, key:systemConfig.qccKey,
keyNo:uscc, keyNo:uscc,
}; };
} else if (isKeyNo == "qcc专利Id") { } else if (isKeyNo == "Id") {
query = { query = {
key:systemConfig.qccKey, key:systemConfig.qccKey,
id:uscc, id:uscc,
}; };
} else if (isKeyNo == "certId") {
query = {
key:systemConfig.qccKey,
certId:uscc,
};
} else if (isKeyNo == "企业名称") {
query = {
key:systemConfig.qccKey,
keyword:uscc,
}
} else { } else {
query = { query = {
key:systemConfig.qccKey, key:systemConfig.qccKey,
...@@ -89,6 +99,13 @@ async function awaitData(uscc, eId) { ...@@ -89,6 +99,13 @@ async function awaitData(uscc, eId) {
} }
/**
* 同步工商信息数据
* @param uscc
* @param eId
* @returns
*/
async function 工商信息(uscc, eId) { async function 工商信息(uscc, eId) {
let {header, query} = getReqParam(uscc); let {header, query} = getReqParam(uscc);
...@@ -137,7 +154,10 @@ async function 工商信息(uscc, eId) { ...@@ -137,7 +154,10 @@ async function 工商信息(uscc, eId) {
}; };
await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业基础信息表, baseInfo, {uscc, eId}); await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业基础信息表, baseInfo, {uscc, eId});
//股权结构 /**
* 股权结构目前小程序没有做这块的更新,所以全部采用小程序的数据
* 逻辑:检测到 股权人+比例 与原来的不一样(只要出现一个不一样),就会删除这个企业下所有的,并且重新写入企查查的这一块数据
*/
if (工商信息.Partners) { if (工商信息.Partners) {
let 出现不存在数据 = false; let 出现不存在数据 = false;
...@@ -150,35 +170,128 @@ async function 工商信息(uscc, eId) { ...@@ -150,35 +170,128 @@ async function 工商信息(uscc, eId) {
stockType:info.StockType, stockType:info.StockType,
realCapi:info.RealCapi, realCapi:info.RealCapi,
}; };
if (数据是否存在(TABLENAME.股权结构, findItemParam)) {} if ( !await 数据是否存在(TABLENAME.股权结构, findItemParam, "owId") ) {
出现不存在数据 = true;
}
} }
//删除历史记录数据
await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.股权结构, null, {eId});
//同步最新记录
let ownershipList = [];
工商信息.Partners.forEach(info => {
let addInfo:any = {
owId:randomId(TABLEID.股权结构),
eId,
name:info.StockName,
finalBenefitPercent:info.FinalBenefitPercent,
stockPercent:info.StockPercent,
stockType:info.StockType,
realCapi:info.RealCapi,
paidUpCapitalUnit:info.PaidUpCapitalUnit,
subscribedCapital:info.SubscribedCapital,
subscribedCapitalUnit:info.SubscribedCapitalUnit,
};
if (info.CapiDate) addInfo.capiDate = getMySqlMs(info.CapiDate);
if (info.ShoudDate) addInfo.shoudDate = getMySqlMs(info.ShoudDate);
ownershipList.push(addInfo); if (出现不存在数据) {
}); //删除历史记录数据
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.股权结构, ownershipList, null); await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.股权结构, null, {eId});
//同步最新记录
let ownershipList = [];
工商信息.Partners.forEach(info => {
let addInfo:any = {
owId:randomId(TABLEID.股权结构),
eId,
name:info.StockName,
finalBenefitPercent:info.FinalBenefitPercent,
stockPercent:info.StockPercent,
stockType:info.StockType,
realCapi:info.RealCapi,
paidUpCapitalUnit:info.PaidUpCapitalUnit,
subscribedCapital:info.SubscribedCapital,
subscribedCapitalUnit:info.SubscribedCapitalUnit,
};
if (info.CapiDate) addInfo.capiDate = getMySqlMs(info.CapiDate);
if (info.ShoudDate) addInfo.shoudDate = getMySqlMs(info.ShoudDate);
ownershipList.push(addInfo);
});
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.股权结构, ownershipList, null);
}
} }
//企业标签表 /**
* 企业标签表 ,已和项目经理确认同步需求:
* 做全量更新,所有的以企查查的为准,企查查的标签数据全量同步到标签表和资质表,如果有用户自己填的,企查查没有的就使用用户填的【2025年5月28日 罗说明】 李欣鸣注
* 逻辑说明:判断有和没有的标准是,是否存在标签或者资质名称。
* 更新逻辑:1.企查查有,小程序没有,同步企查查的数据
* 2.企查查没有,小程序有,用小程序的数据
* 3.企查查有,小程序有,不覆盖
* 4.企查查以前有现在没有,小程序没有,不删除之前的
*/
if (工商信息.TagList) { if (工商信息.TagList) {
for (let i = 0; i < 工商信息.TagList.length; i++) {
let info = 工商信息.TagList[i];
let {Type, Name} = info;
let dbLabelItem = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业标签表, {labelName:info.Name}, ["elId"]);
if (!dbLabelItem && !dbLabelItem.elId) {
//添加新的
let addItemInfo = {
elId:randomId(TABLEID.企业标签表),
eId,
type:info.Type,
labelName:info.Name
};
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.企业标签表, addItemInfo, {} )
}
//处理资质
let isAdd = false;//库里是否不存在这个企业的数据
let zzInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业资质, {eId}, []);
if (!zzInfo || !zzInfo.qId) {
//不存在 直接添加
zzInfo = {
qId : randomId(TABLEID.企业资质),
eId : eId,
xjrState:STATE.,
kxState:STATE.,
gxjsState:STATE.,
zjtxState:STATE.,
listedState:STATE.,
xjrPyState:STATE.,
};
isAdd = true;
}
switch (Name) {
case "科技型中小企业":
if (isAdd) {
zzInfo.kxState = STATE.
} else {
if (!zzInfo.kxState) {
await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业资质, {kxState:STATE.}, {eId});
}
}
break;
case "科技小巨人企业":
if (isAdd) {
zzInfo.xjrState = STATE.
} else {
if (!zzInfo.xjrState) {
await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业资质, {xjrState:STATE.}, {eId});
}
}
break;
case "专精特新中小企业":
if (isAdd) {
zzInfo.zjtxState = STATE.
} else {
if (!zzInfo.zjtxState) {
await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业资质, {zjtxState:STATE.}, {eId});
}
}
break;
case "高新技术企业":
if (isAdd) {
zzInfo.gxjsState = STATE.
} else {
if (!zzInfo.gxjsState) {
await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.企业资质, {gxjsState:STATE.}, {eId});
}
}
break;
//如果后续有新的 标签 和 资质 关联,只需要在case里面加东西就好了
}
if (isAdd) {
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.企业资质, zzInfo, {})
}
}
//删除历史记录数据 //删除历史记录数据
await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.企业标签表, null, {eId}); await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.企业标签表, null, {eId});
//同步最新记录 //同步最新记录
...@@ -194,6 +307,10 @@ async function 工商信息(uscc, eId) { ...@@ -194,6 +307,10 @@ async function 工商信息(uscc, eId) {
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.企业标签表, enterpriseLabelList, null); await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.企业标签表, enterpriseLabelList, null);
} }
/**
* 行业领域目前没有用到,所以直接与企查查全量更新
* 逻辑:先删除现有的,再重新添加
*/
if (工商信息.Industry) { if (工商信息.Industry) {
//删除历史记录数据 //删除历史记录数据
await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.行业信息分类, null, {eId}); await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.行业信息分类, null, {eId});
...@@ -214,6 +331,10 @@ async function 工商信息(uscc, eId) { ...@@ -214,6 +331,10 @@ async function 工商信息(uscc, eId) {
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.行业信息分类, [industryInfo], null); await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.行业信息分类, [industryInfo], null);
} }
/**
* 变更记录目前小程序没有涉及到这部分数据,所以直接与企查查全量更新
* 逻辑:先删除现有的,再重新添加
*/
if (工商信息.ChangeRecords) { if (工商信息.ChangeRecords) {
//删除历史记录数据 //删除历史记录数据
await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.变更信息表, null, {eId}); await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.变更信息表, null, {eId});
...@@ -233,97 +354,513 @@ async function 工商信息(uscc, eId) { ...@@ -233,97 +354,513 @@ async function 工商信息(uscc, eId) {
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.变更信息表, infoupdateList, null); await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.变更信息表, infoupdateList, null);
} }
return
}
async function 商标详情查询(uscc, id) {
let {header, query} = getReqParam(id, "Id");
let qccselectdata:any = await getQcc('https://api.qichacha.com/tm/GetDetails', query, header);
return qccselectdata;
} }
/**
* 更新知识产权
* 包括:商标表,作品著作权表,软件著作权表,专利表
* 数据来源:
* 商标表:商标查询 【同步类型:IPRALLTYPE.商标信息】
* 作品著作权表:作品著作查询 【同步类型:IPRALLTYPE.作品著作权】
* 软件著作权表:软件著作查询 【同步类型:IPRALLTYPE.软件著作权】
* 专利表:专利查询 【同步类型:IPRALLTYPE.外观设计专利, IPRALLTYPE.实用新型专利 IPRALLTYPE.发明专利】
* 逻辑说明:判断有和没有的依据是,知识产权名称 + 知识产权时间
* 更新逻辑:1.企查查有,小程序没填报,用企查查数据
* 2.企查查没有,小程序填报了,用小程序的数据
* 3.企查查有,小程序有,不覆盖
* @param uscc
* @param eId
*/
async function 知识产权(uscc, eId) {
async function 商标查询(uscc) {
let enterpriseInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业基础信息表, {uscc}, ["eId", "enterpriseName"]); let enterpriseInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业基础信息表, {uscc}, ["eId", "enterpriseName"]);
let enterpriseName = enterpriseInfo.enterpriseName; let enterpriseName = enterpriseInfo.enterpriseName;
/** 同步商标信息 */
let {header, query} = getReqParam(enterpriseName, "企业名称"); let {header, query} = getReqParam(enterpriseName, "企业名称");
let 商标查询:any = await getQcc('https://api.qichacha.com/tm/SearchByApplicant', query, header); let 商标查询:any = await getQcc('https://api.qichacha.com/tm/SearchByApplicant', query, header);
if (Array.isArray(商标查询)) { if (Array.isArray(商标查询)) {
for (let i = 0; i < 商标查询.length; i++) { for (let i = 0; i < 商标查询.length; i++) {
let Id = 商标查询[i].ID; let info = 商标查询[i];
let qcc商标详情= await 商标详情查询(uscc, Id);
商标查询[i]["qcc商标详情"] = qcc商标详情; let item = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.商标, {qccId:info.ID}, ["qccId"]);
if (!item || !item.qccId) {
let qcc商标详情 = await 商标详情查询(uscc, info.ID);
//添加新的
let addItemInfo = {
tmId:randomId(TABLEID.商标),
eId,
qccId:info.ID,
regNo:info.regNo,
name:info.Name,
categoryId:info.CategoryId,
category:info.Category,
person:info.Person,
imageUrl:info.ImageUrl,
flowStatusDesc:info.FlowStatusDesc,
RegDate:moment(qcc商标详情.RegDate).format("YYYY-MM-DD"),
};
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.商标, addItemInfo, {});
}
} }
} }
/**同步 作品著作 */
let zpzzReqInfo = getReqParam(uscc);
let 作品著作查询:any = await getQcc('https://api.qichacha.com/CopyRight/SearchCopyRight', zpzzReqInfo.query, zpzzReqInfo.header);
if (Array.isArray(作品著作查询)) {
for (let i = 0; i < 作品著作查询.length; i++) {
let info = 作品著作查询[i];
let item = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.作品著作权, {registerNo:info.RegisterNo}, ["registerNo"]);
if (!item || !item.registerNo) { // 库里不存在就会添加新的
let addItemInfo = {
crId:randomId(TABLEID.作品著作权),
eId,
owner:info.Owner,
category:info.Category,
name:info.Name,
registerNo:info.RegisterNo,
registerDate:moment(info.RegisterDate).format("YYYY-MM-DD"),
publishDate:moment(info.PublishDate).format("YYYY-MM-DD"),
finishDate:moment(info.FinishDate).format("YYYY-MM-DD"),
};
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.作品著作权, addItemInfo, {});
}
}
}
/**同步 软件著作权 */
let rjzzqReqInfo = getReqParam(uscc);
let 软件著作查询:any = await getQcc('https://api.qichacha.com/CopyRight/SearchSoftwareCr', rjzzqReqInfo.query, rjzzqReqInfo.header);
if (Array.isArray(软件著作查询)) {
for (let i = 0; i < 软件著作查询.length; i++) {
let info = 软件著作查询[i];
let item = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.软件著作权, {registerNo:info.RegisterNo}, ["registerNo"]);
if (!item || !item.registerNo) { // 库里不存在就会添加新的
let addItemInfo = {
scId:randomId(TABLEID.软件著作权),
eId,
category:info.Category,
publishDate:info.PublishDate,
versionNo:info.VersionNo,
registerNo:info.RegisterNo,
registerAperDate:moment(info.RegisterAperDate).format("YYYY-MM-DD"),
name:info.Name,
shortName:info.ShortName,
owner:info.Owner,
finishDevelopDate:moment(info.FinishDevelopDate).format("YYYY-MM-DD"),
};
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.软件著作权, addItemInfo, {});
}
}
}
/** IPRALLTYPE.外观设计专利, IPRALLTYPE.实用新型专利 IPRALLTYPE.发明专利 */
let zlcxReqInfo = getReqParam(uscc);
let 专利查询:any = await getQcc('https://api.qichacha.com/PatentV4/SearchMultiPatents', zlcxReqInfo.query, zlcxReqInfo.header);
if (Array.isArray(专利查询)) {
for (let i = 0; i < 专利查询.length; i++) {
let info = 专利查询[i];
let item = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.专利, {applicationNumber:info.ApplicationNumber}, ["applicationNumber"]);
if (!item || !item.applicationNumber) { // 库里不存在就会添加新的
let addItemInfo = {
patentId:randomId(TABLEID.专利),
eId,
category:info.Category,
kindcode:info.Kindcode,
applicationNumber:info.ApplicationNumber,
applicationDate:moment(info.ApplicationDate).format("YYYY-MM-DD"),
publicationNumber:info.PublicationNumber,
publicationDate:moment(info.PublicationDate).format("YYYY-MM-DD"),
legalStatusDesc:info.LegalStatusDesc,
title:info.Title,
agency:JSON.stringify(info.Agency || []),
kindCodeDesc:info.KindCodeDesc,
IPCDesc:JSON.stringify(info.IPCDesc || []),
inventorStringList:JSON.stringify(info.info.InventorStringList || []),
assigneestringList:JSON.stringify(info.AssigneestringList || []),
};
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.专利, addItemInfo, {});
}
}
}
return 商标查询;
} }
async function 商标详情查询(uscc, id) { /**
let {header, query} = getReqParam(id, "Id"); * 主要人员
let qccselectdata:any = await getQcc('https://api.qichacha.com/tm/GetDetails', query, header); * 逻辑:如果这个企业的人员和职位没有变动,就不更新,有的话就删除这个企业的所有,重新更新一遍
* @param uscc
* @returns
*/
async function 主要人员(uscc, eId) {
let {header, query} = getReqParam(uscc);
let 主要人员数据:any = await getQcc('https://api.qichacha.com/ECIEmployee/GetList', query, header);
if (Array.isArray(主要人员数据)) {
let employeesList = await selectData(OPERATIONALDATATYPE.查询多个, TABLENAME.主要人员, {eId}, [])
let checkMap = {};
employeesList.forEach(info => {
checkMap[info.name] = info.job;
});
let isReSet = false;
let reSetList = [];
for (let i = 0; i < 主要人员数据.length; i++) {
let info = 主要人员数据[i];
reSetList.push({
emId:randomId(TABLEID.主要人员),
eId,
job:info.Job,
name:info.Name
});
if (!checkMap[info.name] || info.job != checkMap[info.name]) {
isReSet = true;
continue
}
}
if (isReSet) {
await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.主要人员, {}, {eId} );
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.主要人员, reSetList, {} );
}
}
}
/**
* 空壳扫描
* 逻辑:增量更新
* @param uscc
* @returns
*/
async function 空壳扫描(uscc, eId) {
let {header, query} = getReqParam(uscc);
let qccselectdata:any = await getQcc('https://api.qichacha.com/ShellScan/GetList', query, header);
if (qccselectdata.Data) {
let addList = [];
for (let i= 0; i < qccselectdata.Data.length; i++ ) {
let info = qccselectdata.Data[i];
let item = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.空壳扫描, {eId, title:info.Title}, ["emptyId"] );
if (!item || !item.emptyId) {
addList.push({
emptyId:randomId(TABLEID.空壳扫描),
eId,
title:info.Title,
description:info.Description,
});
}
}
if (addList.length) await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.空壳扫描, addList, {});
}
return qccselectdata;
} }
async function 软件著作(uscc) { /**
* 准入尽职调查
* 逻辑:增量更新
* @param uscc
* @returns
*/
async function 准入尽职调查(uscc, eId) {
let {header, query} = getReqParam(uscc); let {header, query} = getReqParam(uscc);
let qccselectdata:any = await getQcc('https://api.qichacha.com/AcctScan/GetInfo', query, header);
let 著作权软著:any = await getQcc('https://api.qichacha.com/CopyRight/SearchCopyRight', query, header); if (qccselectdata.Data) {
let enterpriseInfo = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业基础信息表, {uscc}, ["eId"]); let addList = [];
let eId = enterpriseInfo.eId; for (let i = 0; i < qccselectdata.Data.length; i++) {
let info = qccselectdata.Data[i];
let item = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.空壳扫描, {eId, title:info.Title}, ["riskId"] );
if (!item || !item.riskId) {
addList.push({
riskId:randomId(TABLEID.风险),
eId,
title:info.Title,
description:info.Description,
passage:info.Passage,
riskType:info.RiskType,
typeCode:parseInt(info.TypeCode),
});
}
}
if (addList.length) await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.风险, addList, {});
}
}
if (Array.isArray(著作权软著)) {
/**
* 失信核查
* 逻辑:全量更新 删除之前所有的 再添加
* @param uscc
* @returns
*/
async function 失信核查(uscc, eId) {
let {header, query} = getReqParam(uscc);
let qccselectdata:any = await getQcc('https://api.qichacha.com/ShixinCheck/GetList', query, header);
await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.失信核查, {}, {eId});
if (qccselectdata.Data) {
let addList = []; let addList = [];
著作权软著.forEach(info => { qccselectdata.Data.forEach(info => {
addList.push({ let addInfo:any = {
iprId:randomId(TABLEID.知识产权), disId:randomId(TABLEID.失信核查),
eId,
anno:info.Anno,
executegov:info.Executegov,
executestatus:info.Executestatus,
executeno:info.Executeno,
actionRemark:info.ActionRemark,
amount:info.Amount,
};
if (info.Liandate) addInfo.liandate = getMySqlMs(info.Liandate);
if (info.Publicdate) addInfo.publicdate = getMySqlMs(info.Publicdate);
addList.push(addInfo);
});
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.失信核查, addList, {});
}
}
/**
* 严重违法核查
* 逻辑:全量更新 删除之前所有的 再添加
* @param uscc
* @returns
*/
async function 严重违法核查(uscc, eId) {
let {header, query} = getReqParam(uscc);
let qccselectdata:any = await getQcc('https://api.qichacha.com/SeriousIllegalCheck/GetList', query, header);
await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.严重违法犯罪, {}, {eId});
if (qccselectdata.Data) {
let addList = [];
qccselectdata.Data.forEach(info => {
let addInfo:any = {
stemId:randomId(TABLEID.严重违法犯罪),
eId, eId,
year:getMySqlMs(info.RegisterDate), type:info.Type,
number:1, addReason:info.AddReason,
iprType:IPRALLTYPE.软件著作权, addOffice:info.AddOffice,
iprName:info.Name, removeReason:info.RemoveReason,
category:info.Category, removeOffice:info.RemoveOffice,
}); };
if (info.AddDate) addInfo.addDate = getMySqlMs(info.AddDate);
if (info.RemoveDate) addInfo.removeDate = getMySqlMs(info.RemoveDate);
addList.push(addInfo);
}); });
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.严重违法犯罪, addList, {});
}
}
/**
* 科创分
* 有则更新,无则添加
* @param uscc
* @returns
*/
async function 科创分(uscc, eId) {
let {header, query} = getReqParam(uscc);
let qccselectdata:any = await getQcc('https://api.qichacha.com/TechScore/GetInfo', query, header);
await addManyData(TABLENAME.知识产权, addList); if (qccselectdata.Data) {
let item = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.科创分, {eId}, ["stemId"] );
if (!item || !item.stemId) {
let addInfo = {
stemId:randomId(TABLEID.科创分),
eId,
industry:qccselectdata.Data.Industry.Industry,
subIndustry:qccselectdata.Data.Industry.SubIndustry,
industryRanking:qccselectdata.Data.IndustryRanking,
score:qccselectdata.Data.Score,
};
await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.科创分, addInfo, {});
} else if (item.score != qccselectdata.Data.Score || item.industryRanking != qccselectdata.Data.IndustryRanking) {
let updateInfo = {
industry:qccselectdata.Data.Industry.Industry,
subIndustry:qccselectdata.Data.Industry.SubIndustry,
industryRanking:qccselectdata.Data.IndustryRanking,
score:qccselectdata.Data.Score,
};
await operationalData(OPERATIONALDATATYPE.修改, TABLENAME.科创分, updateInfo, {eId});
}
} }
return qccselectdata;
}
return 著作权软著;
function getFinancingRounds(str) {
if (str.indexOf("天使")) return FINANCINGROUNDS.天使投资;
if (str.indexOf("种子")) return FINANCINGROUNDS.种子轮;
if (str.indexOf("A")) return FINANCINGROUNDS.A;
if (str.indexOf("B")) return FINANCINGROUNDS.B;
if (str.indexOf("C")) return FINANCINGROUNDS.C;
if (str.indexOf("以上")) return FINANCINGROUNDS.C轮以上;
return FINANCINGROUNDS.天使投资;
} }
async function 专利查询(uscc) { /**
* 融资信息核查
* 逻辑:增量更新,如果遇到未披露的融资金额,赋值0,【需求点:2025年5月28日 18:11分 于倩倩说明】李欣鸣注释
* @param uscc
* @returns
*/
async function 融资信息核查(uscc, eId) {
let {header, query} = getReqParam(uscc); let {header, query} = getReqParam(uscc);
let qccselectdata:any = await getQcc('https://api.qichacha.com/PatentV4/SearchMultiPatents', query, header); let qccselectdata:any = await getQcc('https://api.qichacha.com/CompanyFinancingSearch/GetList', query, header);
if (qccselectdata.Data) {
let addList = [];
for (let i = 0; i < qccselectdata.Data.length; i++) {
let info = qccselectdata.Data[i];
let distinctParam = {eId,investmentDate:getMySqlMs(info.Date), investmentInstitutionsName:info.Investment };
let disItem = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.企业融资, distinctParam, ["rId"]);
if (!disItem || !disItem.rId) {
addList.push({
rId:randomId(TABLEID.企业融资),
eId,
financingAmount:isNaN(info.Amoun) ? 0 : parseFloat(info.Amount),
financingRounds:getFinancingRounds(info.Round),
investmentDate:getMySqlMs(info.Date),
investmentInstitutionsName:info.Investment,
});
}
}
if (addList.length) await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.企业融资, addList, {});
}
return qccselectdata;
}
/**
* 资质证书查询
* 逻辑:增量更新
* @param uscc
* @param eId
* @returns
*/
async function 资质证书(uscc, eId) {
let {header, query} = getReqParam(uscc);
let qccselectdata:any = await getQcc('https://api.qichacha.com/ECICertification/SearchCertification', query, header);
if (Array.isArray(qccselectdata)) { if (Array.isArray(qccselectdata)) {
console.log();
//todo 没有做
let addList = []; let addList = [];
for (let i = 0; i < qccselectdata.length; i++) { for (let i = 0; i < qccselectdata.length; i++) {
let info = qccselectdata[i]; let info = qccselectdata[i];
let qcc专利Id = info.Id;
let 专利详情 = await 专利详情查询(uscc, qcc专利Id); let distinctParam = {eId, type:info.Type, name:info.Name};
let item = await selectData(OPERATIONALDATATYPE.查询单个, TABLENAME.资质证书, distinctParam, ["cerId"] );
if (!item || !item.cerId) {
let addInfo:any = {
cerId:randomId(TABLEID.资质证书),
eId,
name:info.Name,
type:info.Type,
no:info.No,
typeDesc:info.TypeDesc,
institutionList:info.InstitutionList ? info.InstitutionList[0] :"",
status:info.Status,
};
if (info.StartDate) addInfo.startDate = getMySqlMs(info.StartDate);
if (info.EndDate) addInfo.endDate = getMySqlMs(info.EndDate);
addList.push(addInfo);
}
addList.push({
iprId:randomId(TABLEID.知识产权),
});
} }
if (addList.length) await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.资质证书, addList, {});
} }
return qccselectdata;
} }
/**
* 企业对外投资核查
* 逻辑:删除当前企业的,再重新添加
* @param uscc
* @returns
*/
async function 企业对外投资核查(uscc, eId) {
let {header, query} = getReqParam(uscc);
let qccselectdata:any = await getQcc('https://api.qichacha.com/InvestmentCheck/GetList', query, header);
await operationalData(OPERATIONALDATATYPE.删除, TABLENAME.对外投资, {}, {eId});
if (qccselectdata.Data) {
let addList = [];
qccselectdata.Data.forEach(info => {
let addInfo:any = {
oilId:randomId(TABLENAME.对外投资),
eId,
name:info.Name,
registCapi:info.RegistCapi,
registeredCapital:info.RegisteredCapital,
registeredCapitalUnit:info.RegisteredCapitalUnit,
registeredCapitalCCY:info.RegisteredCapitalCCY,
fundedRatio:info.FundedRatio,
shouldCapi:info.ShouldCapi,
subscribedCapital:info.SubscribedCapital,
subscribedCapitalUnit:info.SubscribedCapitalUnit,
subscribedCapitalCCY:info.SubscribedCapitalCCY,
status:info.Status,
operName:info.Oper.Name
};
if (info.StartDate) addInfo.StartDate = getMySqlMs(addInfo.StartDate);
if (info.investDate) addInfo.InvestDate = getMySqlMs(addInfo.InvestDate);
async function 专利详情查询(uscc, id) { addList.push(addInfo);
let {header, query} = getReqParam(id, "qcc专利Id"); });
let qccselectdata:any = await getQcc('https://api.qichacha.com/PatentV4/GetDetails', query, header); await operationalData(OPERATIONALDATATYPE.增加, TABLENAME.对外投资, addList, {});
}
return qccselectdata;
} }
...@@ -99,5 +99,9 @@ export enum TABLEID { ...@@ -99,5 +99,9 @@ export enum TABLEID {
入孵申请审批表 = 'ah', 入孵申请审批表 = 'ah',
入驻信息表 = "ei", 入驻信息表 = "ei",
运营推广信息表 = "opi", 运营推广信息表 = "opi",
商标 = "trm",
作品著作权= "cr",
软件著作权 = "sc",
专利="patent"
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment