Commit 9764f721 by lixinming

6.0

parent 0a956982
......@@ -6,6 +6,7 @@
"dependencies": {
"@alicloud/sms-sdk": "^1.1.6",
"@types/node": "^10.12.18",
"baidumap": "0.0.4",
"compression": "^1.7.4",
"express": "^4.17.1",
"express-async-handler": "^1.1.4",
......
......@@ -5,7 +5,7 @@
<port>27017</port>
<w>1</w>
<!-- <dataBase>baseDB</dataBase> -->
<dataBase>zjscTest</dataBase>
<dataBase>zjsc0227</dataBase>
<wtimeoutMS>30000</wtimeoutMS>
</mongodb>
<!-- 小程序的secret 和 appid -->
......
/**
* 企业标签
*/
import { ENTERPRISESYSTEMLABEL, LABELGOAL, LABELTYPE, LABELUPDATEROAD } from "../../../config/enum";
import { findEnterpriseByUscc, findEnterpriseCount, findEnterpriseListToPage } from "../../../data/enterprise/enterprise";
import { findLabelLogByParam } from "../../../data/enterprise/enterpriseLabelLog";
import { getEffectiveLabelMap, selectLabelList } from "../../../data/label";
import { changeEnumValue, eccEnumValue } from "../../../util/verificationEnum";
import moment = require("moment");
import { updateLabelToEnterprise } from "../../label";
/**
* 企业标签列表
* @param name
* @param page
* @param labelIdList
* @returns
*/
export async function enterpriseLabelList(name:string, page:number, labelIdList) {
let selectParam:any = {};
if (name) selectParam.operationName = {"$regex":`${name}`};
if (labelIdList.length) {
selectParam.labels = {"$elemMatch":{labelId:{"$in":labelIdList} } }
}
let dbList = await findEnterpriseListToPage(selectParam, (page-1)*10);
let count = await findEnterpriseCount(selectParam);
let labelMap = await getEffectiveLabelMap(LABELGOAL.企业);
let dataList = [];
dbList.forEach(info => {
let {name, labels, uscc} = info;
let changeList = [];
labels.forEach(labelItem => {
let {state, labelId} = labelItem;
if (labelMap[labelId]) {
let {labelName, labelType} = labelMap[labelId];
changeList.push({
state,
labelName,
labelType,
labelTypeStr:changeEnumValue(LABELTYPE, labelType)
});
}
});
dataList.push({
name,
labels:changeList,
uscc
});
});
return {count, dataList, pageCount:Math.ceil(count/10) };
}
/**
* 企业标签动态列表
* @param uscc
*/
export async function enterpriseLabelLogList(uscc:string) {
let dblist = await findLabelLogByParam({uscc});
let labelMap = await getEffectiveLabelMap(LABELGOAL.企业);
let dataList = [];
dblist.sort((a,b) => {return b.ct - a.ct});
dblist.forEach(info => {
let {ct, road, labelId, desc} = info;
let descStr = '';
switch (labelId) {
case ENTERPRISESYSTEMLABEL.在孵企业:
if (road == LABELUPDATEROAD.失效) descStr = '孵化时间到期';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.入驻非孵:
if (road == LABELUPDATEROAD.失效) descStr = '企业迁出';
else descStr = '孵化时间到期或注册地为非张江企业';
break;
case ENTERPRISESYSTEMLABEL.迁出企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.高新企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc || "张江后台更新";
break;
case ENTERPRISESYSTEMLABEL.专精特新:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.上市企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.小巨人:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.融资企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.虚拟企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.毕业企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.拟毕业企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = '触发条件,符合毕业企业要求';
break;
default:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc || "张江后台更新";
break;
}
dataList.push({
logTime:moment(ct).format("YYYY-MM-DD"),
state:road == LABELUPDATEROAD.失效 ? "失效" : "生效",
labelName:labelMap[labelId].labelName,
desc:descStr
});
});
return {dataList};
}
/**
* 批量添加企业标签
* @param uscc
* @param labelIdList
* @returns
*/
export async function addEnterpriseLabel(uscc:string, labelIdList) {
//只能添加自定义标签
let labelMap = await getEffectiveLabelMap(LABELGOAL.企业);
let enterpriseInfo = await findEnterpriseByUscc(uscc);
let dbLabelList = enterpriseInfo.labels || [];
let newLabelList = [];
dbLabelList.forEach(info => {
let {labelId, state} = info;
if (labelMap[labelId]) {
if (state && labelMap[labelId].labelType == LABELTYPE.系统标签 ) {
newLabelList.push(labelId);
}
}
});
await updateLabelToEnterprise(uscc, newLabelList.concat(labelIdList));
return {isSuccess:true};
}
/**
* 批量删除企业标签
* @param uscc
* @param labelIdList
* @returns
*/
export async function deleteEnterpriseLabel(uscc:string, labelIdList) {
let labelMap = await getEffectiveLabelMap(LABELGOAL.企业);
let enterpriseInfo = await findEnterpriseByUscc(uscc);
let dbLabelList = enterpriseInfo.labels || [];
let newLabelList = [];
dbLabelList.forEach(info => {
let {labelId, state} = info;
if (labelMap[labelId]) {
if (state && labelMap[labelId].labelType == LABELTYPE.系统标签 ) {
newLabelList.push(labelId);
}
}
});
await updateLabelToEnterprise(uscc, newLabelList.concat(labelIdList));
return {isSuccess:true};
}
export async function getLabelListByGoal(goal:number) {
eccEnumValue("获取标签管理", "goal", LABELGOAL, goal );
let list = await selectLabelList({goal, state:false, labelType:LABELTYPE.自定义标签});
let dataList = [];
list.forEach(info => {
dataList.push({
key:info.labelName,
value:info.id
});
});
return {dataList}
}
\ No newline at end of file
/**
* 新的任务系统(自定义任务) 2024年第一个版本
*/
import moment = require("moment");
import { changeEnumValue, eccEnumValue } from "../../../util/verificationEnum";
import { FUHUAQICUSTOMTASKTYPE, TASKTYPEENUM } from "../../../config/enum";
import * as customTaskData from "../../../data/fuHuaQi/customTask";
import { BizError } from "../../../util/bizError";
import { ERRORENUM } from "../../../config/errorEnum";
import * as taskData from "../../../data/fuHuaQi/monthTask/task";
import * as monthTableData from "../../../data/fuHuaQi/monthTask/monthTable";
import { findAllNotDisabledFuHuaQi } from "../../../data/fuHuaQi/fuhuaqi";
import { generateMonthTaskId } from "../../../tools/taskTool";
/**
* 创建自定义任务
* @param fuHuaQiTaskType
* @param dataCycle 数据周期
* @param startMs
* @param endMs
*/
export async function createTask(fuHuaQiTaskType:number, dataCycle:number, startMs:number, endMs:number) {
eccEnumValue("创建自定义任务", "", FUHUAQICUSTOMTASKTYPE, fuHuaQiTaskType);
//计算周期
let dataCycleTime = moment(dataCycle);
let cycleNum = dataCycleTime.format("YYYYMM");//数据周期格式化
//限制 不能创建为了数据月的任务
let thisMonth = moment().startOf('month').format('YYYYMM');
if (parseInt(cycleNum) >= parseInt(thisMonth)) throw new BizError(ERRORENUM.不可以创建未来数据月的任务);
if (parseInt(cycleNum) >= parseInt(moment(startMs).format('YYYYMM')) ) throw new BizError(ERRORENUM.填报周期不能小于数据周期);
let customTaskId = `${fuHuaQiTaskType}_${cycleNum}`;
let taskInfo = await customTaskData.findCustomTaskByTaskId(customTaskId);
if (taskInfo && taskInfo.customTaskId) throw new BizError(ERRORENUM.该数据周期已存在此类型任务);
await customTaskData.addTask(customTaskId, fuHuaQiTaskType, dataCycle, startMs, endMs);
//创建的时候要创建对应的任务
//确保数据月数据唯一
//说明 原本任务系统的key为数据填报月与数据月就差一个月
//后来改了之后 填报月与数据月可能差很多个月 为了保证数据与以前的兼容性 以及key的唯一性
//这里的key取数据月后一个月
let taskKey = dataCycleTime.add(1, 'months').format("YYYYM");
let taskCount = await taskData.findTaskCountByParamCount({key:taskKey});
if (taskCount) {
new BizError(ERRORENUM.该数据周期已存在此类型任务, `task表重复创建了${taskKey}的任务`);
return;
}
let addList = [];//任务列表
let monthList = [];//月度填报列表
const MonthNumber = dataCycleTime.month()+1;
const YearNumber = dataCycleTime.year();
const MonthTableName = `${MonthNumber}月孵化器月度填报`;
let fuHuaQiList = await findAllNotDisabledFuHuaQi();
fuHuaQiList.forEach(info => {
let { uscc } = info;
let taskId = generateMonthTaskId(uscc);
addList.push(
{ key:taskKey, customTaskId:customTaskId, startTime:startMs, endTime:endMs, type:TASKTYPEENUM.孵化器月度填报, month:MonthNumber, taskId, fuHuaQiUscc:uscc, isSubmit:false, year:YearNumber},
{ key:taskKey, customTaskId:customTaskId, startTime:startMs, endTime:endMs, type:TASKTYPEENUM.新注册或迁入企业登记, month:MonthNumber, taskId, fuHuaQiUscc:uscc, isSubmit:false , year:YearNumber},
{ key:taskKey, customTaskId:customTaskId, startTime:startMs, endTime:endMs, type:TASKTYPEENUM.融资企业填报, taskId, month:MonthNumber, fuHuaQiUscc:uscc, isSubmit:false, year:YearNumber});
/**任务报表的初始状态为 草稿(draftLock=fals) 未被编辑(isUpdate=false) */
monthList.push({ taskId, name:MonthTableName, fuHuaQiUscc:uscc, month:MonthNumber, year:YearNumber, draftLock:false, isUpdate:false });
});
try {
//初始化 任务列表
await taskData.createTaskToList(addList);
//初始化月度报表
await monthTableData.createMonthTableToList(monthList);
} catch(err) {
new BizError(ERRORENUM.系统错误, '添加任务和月度报表的时候 出现了异常 请检查数据库 ', err);
}
return {isSuccess:true};
}
/**
* 任务列表
* @param fuHuaQiTaskType
* @param dataCycle
*/
export async function taskList(fuHuaQiTaskType:number, dataCycle:number, pageNumber:number) {
let param:any = {};
if (fuHuaQiTaskType) param.customTaskType = fuHuaQiTaskType;
if (dataCycle) param.dataCycle = dataCycle;
let dbList = await customTaskData.findCustomTaskListByPage(param, (pageNumber-1)*10);
let dataCount = await customTaskData.findCustomTaskCount(param);
let nowMs = new Date().valueOf();
let dataList = [];
dbList.forEach(info => {
let {customTaskId, customTaskType, dataCycle, startMs, endMs, isExtension} = info;
let stateStr = "";
let state = 0;
if (nowMs < startMs) {
stateStr = "即将开始";
state = 1;
}
else if (nowMs > startMs && nowMs < endMs) {
stateStr = "进行中";
state = 2;
if (isExtension) {
stateStr = "补录中";
state = 3;
}
} else if (endMs< nowMs) {
stateStr = "已完成";
state = 4;
}
dataList.push({
id:customTaskId,
stateStr,
state,
rate:100,
customTaskType:changeEnumValue(FUHUAQICUSTOMTASKTYPE, customTaskType),
dataCycle:moment(dataCycle).format("YYYY-MM-DD"),
fillingInCycle:`${moment(startMs).format("YYYY.MM.DD")}-${moment(endMs).format("YYYY.MM.DD")}`
});
});
return {dataCount, dataList};
}
/**
* 数据下载
* @param id
*/
export async function dataDw(id:string) {
}
/**
* 修改周期
*/
export async function changeCycle(id:string, startMs:number, endMs:number) {
let taskInfo = await customTaskData.findCustomTaskByTaskId(id);
if (!taskInfo || !taskInfo.customTaskId) {
throw new BizError(ERRORENUM.任务不存在);
}
if (startMs< taskInfo.startMs) throw new BizError(ERRORENUM.任务延期不可将开始时间提前);
if (endMs <= startMs) throw new BizError(ERRORENUM.任务延期结束时间要大于开始时间);
taskInfo.startMs = startMs;
taskInfo.endMs = endMs;
taskInfo.isExtension = true;
await taskInfo.save();
//修改对应任务的开始结束时间
await taskData.upodateTaskStartAdnEndTime({customTaskId:id}, {startTime:startMs, endTime:endMs});
return {isSuccess:true};
}
/**
* 提前回收
* @param id
*/
export async function recovery(id:string) {
let taskInfo = await customTaskData.findCustomTaskByTaskId(id);
if (!taskInfo || !taskInfo.customTaskId) {
throw new BizError(ERRORENUM.任务不存在);
}
let nowMs = new Date().valueOf();
if (taskInfo.endMs < nowMs) throw new BizError(ERRORENUM.不可提前回收已完成任务);
taskInfo.endMs = nowMs;
await taskInfo.save();
//修改对应任务的开始结束时间
await taskData.upodateTaskStartAdnEndTime({customTaskId:id}, { endTime:nowMs});
return {isSuccess:true};
}
\ No newline at end of file
import moment = require("moment");
import { FHQSYSTEMLABEL, LABELGOAL, LABELTYPE, LABELUPDATEROAD } from "../../../config/enum";
import { findLabelLogByParam } from "../../../data/fuHuaQi/fuHuaQiLabelLog";
import { findFuHuaQiByUSCC, findFuHuaQiCount, findFuHuaQiListByPage } from "../../../data/fuHuaQi/fuhuaqi";
import { getEffectiveLabelMap } from "../../../data/label";
import { changeEnumValue } from "../../../util/verificationEnum";
import { updateLabelToFuHuaQi } from "../../label";
/**
* 孵化器标签列表
* @param name
* @param page
* @param labelIdList
* @returns
*/
export async function fuHuaQiLabelList(name:string, page:number, labelIdList) {
let selectParam:any = {userState:false};
if (name) selectParam.operationName = {"$regex":`${name}`};
if (labelIdList.length) {
selectParam.labels = {"$elemMatch":{labelId:{"$in":labelIdList} } }
}
let dbList = await findFuHuaQiListByPage(selectParam, (page-1)*10);
let count = await findFuHuaQiCount(selectParam);
let labelMap = await getEffectiveLabelMap(LABELGOAL.孵化器);
let dataList = [];
dbList.forEach(info => {
let {name, labels, uscc} = info;
let changeList = [];
labels.forEach(labelItem => {
let {state, labelId} = labelItem;
if (labelMap[labelId]) {
let {labelName, labelType} = labelMap[labelId];
changeList.push({
state,
labelName,
labelType,
labelTypeStr:changeEnumValue(LABELTYPE, labelType)
});
}
});
dataList.push({
name,
labels:changeList,
uscc
});
});
return {count, dataList, pageCount:Math.ceil(count/10) };
}
/**
* 孵化器标签动态列表
* @param uscc
*/
export async function labelLogList(uscc:string) {
let dblist = await findLabelLogByParam({uscc});
let labelMap = await getEffectiveLabelMap(LABELGOAL.孵化器);
let dataList = [];
dblist.sort((a,b) => {return b.ct - a.ct});
dblist.forEach(info => {
let {ct, road, labelId, desc} = info;
let descStr = '';
switch (labelId) {
case FHQSYSTEMLABEL.专业技术平台:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
default:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc || "张江后台更新";
break;
}
dataList.push({
logTime:moment(ct).format("YYYY-MM-DD"),
state:road == LABELUPDATEROAD.失效 ? "失效" : "生效",
labelName:labelMap[labelId].labelName,
desc:descStr
});
});
return {dataList};
}
/**
* 批量添加孵化器标签
* @param uscc
* @param labelIdList
* @returns
*/
export async function addFuHuaQiLabel(uscc:string, labelIdList) {
let labelMap = await getEffectiveLabelMap(LABELGOAL.孵化器);
let fuHuaQiInfo = await findFuHuaQiByUSCC(uscc);
let dbLabelList = fuHuaQiInfo.labels || [];
let newLabelList = [];
dbLabelList.forEach(info => {
let {labelId, state} = info;
if (labelMap[labelId]) {
if (state && labelMap[labelId].labelType == LABELTYPE.系统标签 ) {
newLabelList.push(labelId);
}
}
});
await updateLabelToFuHuaQi(uscc, newLabelList.concat(labelIdList));
return {isSuccess:true};
}
/**
* 批量删除孵化器标签
* @param uscc
* @param labelIdList
* @returns
*/
export async function deleteFuHUaQiLabel(uscc:string, labelIdList) {
let labelMap = await getEffectiveLabelMap(LABELGOAL.孵化器);
let fuHuaQiInfo = await findFuHuaQiByUSCC(uscc);
let dbLabelList = fuHuaQiInfo.labels || [];
let newLabelList = [];
dbLabelList.forEach(info => {
let {labelId, state} = info;
if (labelMap[labelId]) {
if (state && labelMap[labelId].labelType == LABELTYPE.系统标签 ) {
newLabelList.push(labelId);
}
}
});
await updateLabelToFuHuaQi(uscc, newLabelList.concat(labelIdList));
return {isSuccess:true};
}
\ No newline at end of file
/**
* 管理后台-标签系统-标签管理
*/
import { LABELGOAL, LABELTYPE } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum";
import { createLabel, findOnceLabel, selectLabelCount, selectLabelListToPage } from "../../data/label";
import { getLabelId } from "../../tools/system";
import { BizError } from "../../util/bizError";
import { changeEnumValue, eccEnumValue } from "../../util/verificationEnum";
/**
* 创建标签
*/
export async function addLabel(name:string, goal:number) {
eccEnumValue("创建标签", "goal", LABELGOAL, goal);
let labelId = getLabelId();
await createLabel(goal, LABELTYPE.自定义标签, name, labelId);
return {isSuccess:true};
}
/**
* 修改标签名字
* @param id
* @param name
*/
export async function updateLabelName(id:string, name:string) {
let labelInfo = await findOnceLabel(id);
labelInfo.labelName = name;
await labelInfo.save();
return {isSuccess:true};
}
/**
* 列表
* @returns
*/
export async function labelList(pageNumber:number) {
let selectParam = {state:false, labelType:LABELTYPE.自定义标签};
let dbList = await selectLabelListToPage(selectParam, (pageNumber-1)*10);
let dataCount = await selectLabelCount(selectParam);
let dataList = [];
dbList.forEach(info => {
dataList.push({
labelName:info.labelName,
goal:changeEnumValue(LABELGOAL, info.goal),
id:info.id
});
});
return {dataList, dataCount};
}
/**
* 删除标签
* @param id
* @returns
*/
export async function deleteLabel(id:string) {
let labelInfo = await findOnceLabel(id);
if (!labelInfo || !labelInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
if (labelInfo.labelType != LABELTYPE.自定义标签) throw new BizError(ERRORENUM.不能删除非自定义标签)
labelInfo.state = true;
await labelInfo.save();
return {isSuccess:true};
}
\ No newline at end of file
......@@ -132,3 +132,18 @@ function enterpriseCombinationMessage() {
return str;
}
export async function test() {
let chartStr:any = await checkMsg("分析当前所有再孵企业的行业优势", [enterpriseCombinationMessage()]);
let str = "";
if ( chartStr) {
let rmvList = chartStr.split('\n');
let rmvStr = ``;
rmvList.forEach(itemStr => {rmvStr += itemStr});
str = rmvStr;
}
console.log(str);
console.log();
}
\ No newline at end of file
......@@ -4,14 +4,15 @@
*/
import { EnterpriseQualificationUpdateConfig } from "../../../config//eccParam/enterprise";
import { LISTINGSITUATION } from "../../../config/enum";
import { ENTERPRISESYSTEMLABEL, LISTINGSITUATION } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { BizError } from "../../../util/bizError";
import { eccEnumValue } from "../../../util/verificationEnum";
import { eccFormParam } from "../../../util/verificationParam";
import * as enterpriseData from "../../../data/enterprise/enterprise";
import { addEnterprisePoint } from "../../point";
import { ENTERPRISENODEENUM, POINTTYPEENUM } from "../../../config/pointConfig";
import { ENTERPRISENODEENUM } from "../../../config/pointConfig";
import { eventLabel } from "../../label";
......@@ -86,6 +87,20 @@ export async function updateQualification(uscc:string, param) {
enterpriseInfo.qualification = JSON.parse(JSON.stringify(param) );
/**标签 */
if (oldMarketData.isBeOnTheMarket != newMarketData.isBeOnTheMarket) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.上市企业, '企业登记' );
}
if (oldIsZjtxData.isZjtx != newIsZjtxData.isZjtx) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.专精特新, '企业登记');
}
if (oldIsXjrData.isXjr != newIsXjrData.isXjr) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.小巨人, '企业登记');
}
if (oldHighTechData.isHighTech != newHighTechData.isHighTech) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.高新企业, '企业登记');
}
/**修改了之后去掉 红框提示 */
if (!enterpriseInfo.tipsQualification ) {
enterpriseInfo.tipsQualification = true;
......
......@@ -4,7 +4,7 @@
*/
import * as eccFormParamConfig from "../../config/eccParam/enterprise";
import { FINANCINGROUNDS, FUHUAQILNVESTMENTSTYLE } from "../../config/enum";
import { ENTERPRISESYSTEMLABEL, FINANCINGROUNDS, FUHUAQILNVESTMENTSTYLE } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum";
import { EnterpriseFinancingListDataConfig } from "../../config/splitResultConfig";
import { findEnterpriseByUscc } from "../../data/enterprise/enterprise";
......@@ -12,8 +12,9 @@ import * as enterpriseFinancingData from "../../data/enterprise/financingInfo";
import { getFinancingId } from "../../tools/system";
import { BizError } from "../../util/bizError";
import { checkChange, extractData } from "../../util/piecemeal";
import { eccEnumValue } from "../../util/verificationEnum";
import { changeEnumValue, eccEnumValue } from "../../util/verificationEnum";
import { eccFormParam } from "../../util/verificationParam";
import { eventLabel } from "../label";
/**
......@@ -74,6 +75,11 @@ export async function addEnterpriseFinancing(uscc:string, form) {
await enterpriseFinancingData.addFinancingInfo(Object.assign(addInfo, form));
//添加标签
let financingRoundsStr = changeEnumValue(FINANCINGROUNDS, form.financingRounds);
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.融资企业, `获得${financingRoundsStr}融资,${form.financingAmount}万元`);
await enterpriseInfo.save();
return {isSuccess:true};
}
......
......@@ -16,6 +16,8 @@ import * as configEnum from "../../../config/enum";
import { eccFormParam } from "../../../util/verificationParam";
import * as verificationEnumTools from "../../../util/verificationEnum";
import { checkChange, extractData } from "../../../util/piecemeal";
import { eventLabel } from "../../label";
import { findFuHuaQiByUSCC } from "../../../data/fuHuaQi/fuhuaqi";
/**
......@@ -118,6 +120,11 @@ export async function moveInEnterprise(uscc:string, param) {
for (let key in eccFormParamConfig.MoveInEnterpriseParamConfig) {
dataBaseInfo[key] = param[key];
}
/**标签 迁入的是别人迁出的企业*/
let fuHuaQiInfo = await findFuHuaQiByUSCC(uscc);
eventLabel(dataBaseInfo, configEnum.ENTERPRISESYSTEMLABEL.迁出企业, fuHuaQiInfo.operationName);
await dataBaseInfo.save();
} else {
/**添加新注册企业标识 */
......
......@@ -21,6 +21,9 @@ import { findEnterpriseNewTeamData } from "../../../data/enterprise/quarterTask/
import { EnterpriseTeamConfig } from "../../../config/splitResultConfig";
import { findBusinessDataByUsccAndYear } from "../../../data/enterprise/quarterTask/businessdata";
import { selectRepleishData } from "../../../data/enterprise/replenish";
import { eventLabel } from "../../label";
import { ENTERPRISESYSTEMLABEL } from "../../../config/enum";
import { findFuHuaQiByUSCC } from "../../../data/fuHuaQi/fuhuaqi";
......@@ -104,6 +107,7 @@ export async function myEnterprise(uscc:string, state:number, name:string, page:
*/
export async function updatePhysicalInfo(fuHuaQiUscc:string, uscc:string, leasedArea:number) {
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo) throw new BizError(ERRORENUM.该企业不存在, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
if (enterpriseInfo.fuHuaQiUscc != fuHuaQiUscc) throw new BizError(ERRORENUM.无法操作其他孵化器的企业, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
......@@ -143,6 +147,13 @@ export async function updatePhysicalInfo(fuHuaQiUscc:string, uscc:string, leased
enterpriseInfo.moveOutType = null;//迁出类型
enterpriseInfo.moveOutCause = [];//迁出原因
enterpriseInfo.moveOutTime = 0;
/**标签*/
let fuHuaQiInfo = await findFuHuaQiByUSCC(fuHuaQiUscc);
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.虚拟企业, fuHuaQiInfo.operationName);
if (oldData.state == configEnum.FUHUASTATE.迁出) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.迁出企业, fuHuaQiInfo.operationName);
}
}
......@@ -206,6 +217,13 @@ export async function updateVirtualInfo(fuHuaQiUscc:string, uscc:string, virtual
};
addFuHuaQiPoint(fuHuaQiUscc, FUHUAQINODEENUM.我的企业_孵化状态, oldData, newData );
/**标签*/
let fuHuaQiInfo = await findFuHuaQiByUSCC(fuHuaQiUscc);
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.虚拟企业, fuHuaQiInfo.operationName);
if (oldData.state == configEnum.FUHUASTATE.迁出) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.迁出企业, fuHuaQiInfo.operationName);
}
await enterpriseInfo.save();
......@@ -278,6 +296,7 @@ export async function updateMoveOutInfo(fuHuaQiUscc:string, uscc:string, moveOu
enterpriseInfo.virtualCauseDes = "";//虚拟孵化原因
enterpriseInfo.leasedArea = 0;//租赁面积
/**埋点 -新值*/
let newData = {
leasedArea : 0,
......@@ -291,6 +310,10 @@ export async function updateMoveOutInfo(fuHuaQiUscc:string, uscc:string, moveOu
addFuHuaQiPoint( fuHuaQiUscc, FUHUAQINODEENUM.我的企业_孵化状态, oldData, newData );
/**标签 */
let fuHuaQiInfo = await findFuHuaQiByUSCC(fuHuaQiUscc);
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.迁出企业, fuHuaQiInfo.operationName);
await enterpriseInfo.save();
/**企业状态改变埋点 */
......@@ -372,7 +395,6 @@ export async function updateMyEnterpriseBaseInfo(fuHuaQiUscc:string, param) {
* @param param 表单
*/
export async function replenishMyEnterpriseInPutInfo(fuHuaQiUscc:string, param) {
eccFormParam("补录新迁入企业信息", eccFormParamConfig.ReplenishMyEnterpriseInPutDataConfig, param );
verificationEnumTools.eccEnumValue('补录新迁入企业信息', 'industry', configEnum.INDUSTRY, param.industry);
if ( !sysTools.eccUscc(param.uscc) ) throw new BizError(ERRORENUM.统一社会信用代码不合法);
......@@ -395,6 +417,10 @@ export async function replenishMyEnterpriseInPutInfo(fuHuaQiUscc:string, param)
for (let key in eccFormParamConfig.MoveInEnterpriseParamConfig) {
dataBaseInfo[key] = param[key];
}
/**标签 迁入的是别人迁出的企业*/
let fuHuaQiInfo = await findFuHuaQiByUSCC(fuHuaQiUscc);
eventLabel(dataBaseInfo, ENTERPRISESYSTEMLABEL.迁出企业, fuHuaQiInfo.operationName);
await dataBaseInfo.save();
} else {
/**添加新注册企业标识 */
......@@ -431,7 +457,7 @@ export async function replenishMyEnterpriseCreateInfo(fuHuaQiUscc:string, param)
/**不能出现重复的统一社会信用代码 草稿的也不行 */
let dataBaseInfo = await enterpriseData.findEnterpriseByUscc(param.uscc);
if ( dataBaseInfo&& dataBaseInfo.uscc) throw new BizError(ERRORENUM.该企业已存在, `${param.uscc}已经在库中存在`);
if ( dataBaseInfo && dataBaseInfo.uscc) throw new BizError(ERRORENUM.该企业已存在, `${param.uscc}已经在库中存在`);
/**添加新注册企业标识 */
param.isCreate = true;//标识此次操作是否是迁入企业并不是新注册企业
......
......@@ -33,6 +33,23 @@ export async function unauditedList(uscc:string, state:number, type:number ) {
query.isSubmit = false;
}
let dataNumberLists = [
{
"key":1,//枚举值
"value":`全部(0)`//按钮文本
},
{
"key":2,//枚举值
"value":`已填报(0)`//按钮文本
},
{
"key":3,//枚举值
"value":`未填报(0)`//按钮文本
},
];
return {dataNumberList:dataNumberLists, dataList:[]};
let businessDataList = [];
let teamDataList = [];
if (type == 2) {
......
......@@ -105,7 +105,7 @@ export async function updateFuHuaQiBaseData(uscc:string, param) {
});
}
if (param.isProfessionalTechnology) {
if ( !param.professionalTechnologyName ) throw new BizError(ERRORENUM.参数错误, "修改孵化器=>我的数据信息", "缺少professionalTechnologyName" );
if (!param.professionalTechnologyName ) throw new BizError(ERRORENUM.参数错误, "修改孵化器=>我的数据信息", "缺少professionalTechnologyName" );
if (!param.professionalTechnologyCreateTime ) throw new BizError(ERRORENUM.参数错误, "修改孵化器=>我的数据信息", "professionalTechnologyCreateTime" );
if (!param.professionalTechnologyAmount) throw new BizError(ERRORENUM.参数错误, "修改孵化器=>我的数据信息", "professionalTechnologyAmount" );
}
......
......@@ -7,10 +7,11 @@ import * as i18nRegisterData from "../../../../data/fuHuaQi/instituQualify/i18nR
import * as icrData from "../../../../data/fuHuaQi/instituQualify/icr";
import * as startupTeacherData from "../../../../data/fuHuaQi/instituQualify/startupTeacher";
import * as zjBeyondLayoutData from "../../../../data/fuHuaQi/instituQualify/zjBeyondLayout";
import { STATEENUM } from "../../../../config/enum";
import { FHQSYSTEMLABEL, FUHUAINDUSTRY, STATEENUM } from "../../../../config/enum";
import * as fuhuaqiData from "../../../../data/fuHuaQi/fuhuaqi";
import { addFuHuaQiPoint } from "../../../point";
import * as pointConfig from "../../../../config/pointConfig";
import { fuHuaQiEventLabel, inOnceLabelToFuHuaQi, outLabelToFuHuaQi } from "../../../label";
/**
......@@ -110,6 +111,10 @@ export async function updateProfessionalTechnology(uscc:string, isProfessionalTe
fuHuaQiInfo.isCooperation= isCooperation;//是否与第三方合作
fuHuaQiInfo.cooperationInstitutions= cooperationInstitutions;//合作机构名称
//标签
await fuHuaQiEventLabel(fuHuaQiInfo, FHQSYSTEMLABEL.专业技术平台, professionalTechnologyName);
await fuHuaQiInfo.save();
return {isSuccess:true};
......
......@@ -191,7 +191,6 @@ async function myEnterpriseScoreCount(uscc:string) {
* @param year 年度时间戳
*/
export async function fuHuaQiScoreLog(uscc:string, year:number) {
let startTime = year;
let endTimeStr = `${new Date(startTime).getFullYear()}-12-31 23:59:59`;
let endTime = new Date(endTimeStr).valueOf();
......@@ -253,6 +252,9 @@ function waysStr(ways:number, type:number, changeMode) {
if (ways == SCOREWAYS.我的数据) {
str += "我的数据更新"
}
if (ways == SCOREWAYS.分值重置) {
str += "上年度分归档,本年度基础分调整"
}
if (CHANGEMODE.增加 == changeMode) str += " 上涨";
else str += " 下降";
return str;
......@@ -284,3 +286,4 @@ export async function rankList(uscc:string) {
return {rankList, thisFuHuaQiIndex};
}
......@@ -13,7 +13,7 @@
*/
import moment = require("moment");
import { SCOREWAYS, TASKTYPEENUM } from "../../../../config/enum";
import { ENTERPRISESYSTEMLABEL, FINANCINGROUNDS, SCOREWAYS, TASKTYPEENUM } from "../../../../config/enum";
import { ERRORENUM } from "../../../../config/errorEnum";
import * as enterpriseData from "../../../../data/enterprise/enterprise";
import * as financingData from "../../../../data/fuHuaQi/monthTask/financing";
......@@ -26,6 +26,8 @@ import { getPwdMd5, getThisMonthMs, md5PwdStr } from "../../../../tools/system";
import * as taskTool from "../../../../tools/taskTool";
import * as scoreBiz from "../score";
import { eventLabel } from "../../../label";
import { changeEnumValue } from "../../../../util/verificationEnum";
/**
......@@ -232,6 +234,7 @@ export async function checkTask(uscc:string, taskType:number) {
submitCount = await enterpriseData.findEnterpriseCount({taskId:TaskId});
/**更新分数 */
await scoreBiz.updateScore(uscc, SCOREWAYS.任务得分, true, TASKTYPEENUM.新注册或迁入企业登记);
break;
case TASKTYPEENUM.融资企业填报:
/**将录入的融资数据 draftLock 改为 true 表示不再是草稿状态 */
......@@ -239,6 +242,15 @@ export async function checkTask(uscc:string, taskType:number) {
submitCount = await financingData.findFinancingCount({taskId:TaskId});
/**更新分数 */
await scoreBiz.updateScore(uscc, SCOREWAYS.任务得分, true, TASKTYPEENUM.融资企业填报);
/**更新标签 */
let finacingDataList = await financingData.findFinancingListByTaskId(TaskId, true);
for (let i= 0; i < finacingDataList.length; i++) {
let itemEnterpriseInfo = await enterpriseData.findEnterpriseByUscc(finacingDataList[i].uscc);
let financingRoundsStr = changeEnumValue(FINANCINGROUNDS, finacingDataList[i].financingRounds);
eventLabel(itemEnterpriseInfo, ENTERPRISESYSTEMLABEL.融资企业, `获得${financingRoundsStr}融资,${finacingDataList[i].financingAmount}万元`);
await itemEnterpriseInfo.save();
}
break;
}
......@@ -255,7 +267,7 @@ export async function checkTask(uscc:string, taskType:number) {
/**
* 发放任务
* 系统自发
* 系统自发 6.0改成管理后台手动触发 此方法弃用
* 下发任务的同时初始化月度报表数据
*/
export async function provideMonthTask() {
......
import moment = require("moment");
import { ENTERPRISESYSTEMLABEL, FUHUASTATE, GUANWEIHUIMANANGENTERPRISELABEL, INDUSTRY, LABELGOAL, MOVEOUTTYPE } from "../../../config/enum";
import { findEnterpriseByUscc, findEnterpriseCount, findEnterpriseListToPage } from "../../../data/enterprise/enterprise";
import { findLabelLogByParam } from "../../../data/enterprise/enterpriseLabelLog";
import { getLabelNamMap } from "../../../data/label";
import { changeAddToString } from "../../../tools/system";
import { extractData } from "../../../util/piecemeal";
import { changeEnumManyValue, changeEnumValue, eccEnumValue } from "../../../util/verificationEnum";
import { BizError } from "../../../util/bizError";
import { ERRORENUM } from "../../../config/errorEnum";
import { findFuHuaQiByUSCC, findFuHuaQiOperationNameMapByParam } from "../../../data/fuHuaQi/fuhuaqi";
export async function enterpriseInfomation(uscc:string) {
let dbData = await findEnterpriseByUscc(uscc);
if (!dbData || !dbData.uscc) throw new BizError(ERRORENUM.该企业不存在, uscc);
let config = {
name:{key:"名称"},
uscc:{key:"统一信用代码"},
mainBusiness:{key:"主营业务"},
industry:{key:"领域"},
leasedArea:{key:"租赁面积(平方米)"},
isNaturalPersonHolding:{key:"是否自然人控股企业"},
firstIncubationTime:{key:"首次入孵时间"},
timeOfImmigration:{key:"迁入时间"},
logonTime:{key:"注册时间"},
logonAddress:{key:"注册地址"},
operatingAddress:{key:"经营地址"},
oldLogonAddress:{key:"迁入前地址"},
};
let enterpriseInfo:any = await extractData(config, dbData, false);
/**枚举转换 */
//孵化领域
enterpriseInfo.industry = changeEnumManyValue(INDUSTRY, enterpriseInfo.industry);
if (enterpriseInfo.industry.length > 1) enterpriseInfo.industryStr = "多领域";
else enterpriseInfo.industryStr = enterpriseInfo.industry[0];
//注册地址
enterpriseInfo.logonAddressStr = changeAddToString(enterpriseInfo.logonAddress);
//经营地址
enterpriseInfo.operatingAddressStr = changeAddToString(enterpriseInfo.operatingAddress);
//迁入地址
enterpriseInfo.oldLogonAddressStr = changeAddToString(enterpriseInfo.oldLogonAddress);
enterpriseInfo.firstIncubationTime = moment(enterpriseInfo.firstIncubationTime).format("YYYY-MM-DD");
enterpriseInfo.timeOfImmigration = moment(enterpriseInfo.timeOfImmigration).format("YYYY-MM-DD");
enterpriseInfo.logonTime = moment(enterpriseInfo.logonTime).format("YYYY-MM-DD");
//知识产权
enterpriseInfo.alienPatent = 0;//海外专利
enterpriseInfo.classIPatent = 0;//一类专利
enterpriseInfo.secondClassPatent = 0;//二类专利
if (dbData.intellectualProperty) {
enterpriseInfo.alienPatent = dbData.intellectualProperty.alienPatent;//海外专利
enterpriseInfo.classIPatent = dbData.intellectualProperty.classIPatent;//一类专利
enterpriseInfo.secondClassPatent = dbData.intellectualProperty.secondClassPatent;//二类专利
}
let fuHuaQiInfo = await findFuHuaQiByUSCC(dbData.fuHuaQiUscc);
enterpriseInfo.fuHuaQiName = fuHuaQiInfo.operationName;//孵化器名称
//标签动态
let dbLogList = await findLabelLogByParam({uscc:uscc});
let labelLogList = [];
let labelNameMap = await getLabelNamMap(LABELGOAL.企业);
dbLogList.forEach(info => {
let { labelName } = labelNameMap[info.labelId];
labelLogList.push({
time:moment(info.ct).format("YYYY-MM-DD"),
name:labelName,
desc:info.desc,
road:info.road > 2 ? "失效" : "生效"
});
});
//标签
enterpriseInfo.labels = [];
if (dbData.labels && dbData.labels.length) {
dbData.labels.forEach(info => {
if (labelNameMap[info.labelId] && labelNameMap[info.labelId].state) {
enterpriseInfo.labels.push({
key:labelNameMap[info.labelId].labelName,
state:!info.state
});
}
});
}
return {enterpriseInfo, labelLogList};
}
/**
* 企业库列表
* @param name
* @param pageNumber
* @param labelId
* @param year
* @param month
* @returns
*/
export async function enterpriseList(name:string, pageNumber:number, labelId:string, year:number, month:number) {
if ( labelId ) eccEnumValue("企业库列表", "标签id", GUANWEIHUIMANANGENTERPRISELABEL, labelId);
let startMs = 0;
let endMs = 0;
if (year && month) {
endMs = moment(new Date(`${year}-${month}-1 00:00:00`).valueOf()).add(1, 'months').valueOf();
startMs = moment(new Date(`${year}-${month}-1 00:00:00`).valueOf()).valueOf();
} else if (year && !month) {
throw new BizError(ERRORENUM.缺少月份参数);
}
let param:any = {};
if (name) param.name = name;
if (labelId == GUANWEIHUIMANANGENTERPRISELABEL.新注册企业 || labelId == GUANWEIHUIMANANGENTERPRISELABEL.新迁入企业) {
param.taskId = {"$ne":null};
param.draftLock = true;
if (!year || !month) throw new BizError(ERRORENUM.参数错误);
param.createTime = {"$gt":startMs, "$lt":endMs};
param.isCreate = labelId == GUANWEIHUIMANANGENTERPRISELABEL.新注册企业;
} else if (labelId == ENTERPRISESYSTEMLABEL.融资企业 || labelId == ENTERPRISESYSTEMLABEL.迁出企业 || labelId == ENTERPRISESYSTEMLABEL.毕业企业 || labelId == ENTERPRISESYSTEMLABEL.企业注销) {
if (labelId != ENTERPRISESYSTEMLABEL.融资企业) {
param.state = FUHUASTATE.迁出;
if (labelId == ENTERPRISESYSTEMLABEL.毕业企业) param.moveOutType = MOVEOUTTYPE.毕业迁出;
if (labelId == ENTERPRISESYSTEMLABEL.企业注销) param.moveOutType = MOVEOUTTYPE.企业注销;
}
//todo 融资企业
} else if (labelId) {
if (year || month) throw new BizError(ERRORENUM.多余年份与月份参数);
param.labels = {"$elemMatch": { "labelId":labelId, "state":true }};
}
let fuHuaQiNameMap = await findFuHuaQiOperationNameMapByParam({});
let dbList = await findEnterpriseListToPage(param, (pageNumber-1)*10);
let dataCount = await findEnterpriseCount(param);
let labelNameMap = await getLabelNamMap(LABELGOAL.企业);
const config = {
uscc:{key:"统一信用代码"},
name:{key:"企业名称"},
industry:{key:"领域"},
logonTime:{key:"注册时间"},
leasedArea:{key:"租赁面积(平方米)"},
logonAddress:{key:"注册地址"},
operatingAddress:{key:"经营地址"}
};
let dataList = [];
dbList.forEach(info => {
let itemData:any = extractData(config, info, false);
//注册地址
itemData.logonAddressStr = changeAddToString(info.logonAddress);
//经营地址
itemData.operatingAddressStr = changeAddToString(info.operatingAddress);
itemData.labels = [];
if (info.labels && info.labels.length) {
info.labels.forEach(info => {
if (labelNameMap[info.labelId] && !labelNameMap[info.labelId].state) {
itemData.labels.push({
key:labelNameMap[info.labelId].labelName,
state:info.state
});
}
});
}
itemData.industry = changeEnumValue(INDUSTRY, info.industry);
itemData.logonTime = moment(info.logonTime).format("YYYY/MM/DD");
itemData.fuHuaQiName = fuHuaQiNameMap[info.fuHuaQiUscc] || "-";
dataList.push(itemData);
});
return {dataList, dataCount};
}
import moment = require("moment");
import * as configEnum from "../../../config/enum";
import { findLabelLogByParam } from "../../../data/fuHuaQi/fuHuaQiLabelLog";
import { findFuHuaQiByUSCC, findFuHuaQiCount, findFuHuaQiListByPage } from "../../../data/fuHuaQi/fuhuaqi";
import { getLabelNamMap } from "../../../data/label";
import { changeAddToString } from "../../../tools/system";
import { extractData } from "../../../util/piecemeal";
import { changeEnumManyValue, changeEnumValue, eccEnumValue } from "../../../util/verificationEnum";
import { findEnterpriseCount } from "../../../data/enterprise/enterprise";
/**
* 孵化器库-孵化器详情
* @param uscc
*/
export async function fuHuaQiInfomation(uscc:string) {
let dbData = await findFuHuaQiByUSCC(uscc);
let config = {
name:{key:"名称"},
operationName:{key:"运营机构名称"},
uscc:{key:"统一信用代码"},
incubatedAcreage:{key:"在孵面积㎡)"},
acreageTotal:{key:"孵化器总面积㎡)"},
acreagePersonalUse:{key:"孵化器自用面积㎡)"},
institutionalNature:{key:"机构性质"},
operationModel:{key:"运营模式 "},
industry:{key:"孵化领域"},
logonTime:{key:"注册时间"},
identificationTime:{key:"认定时间"},
lv:{key:"孵化器级别"},
caiLiHuGuanDi:{key:"财力户管地"},
fuHuazhuCeDiZhi:{key:"孵化注册地址"},
fuHuaLianXiDiZhi:{key:"孵化联系地址"},
liaison:{key:"联系人"},
liaisonPhone:{key:"联系电话"},
personInCharge:{key:"负责人"},
personInChargePhone:{key:"负责人联系电话"},
foundingTeamType:{key:"创业团队类型"},
};
let fuHuaQiInfo:any = await extractData(config, dbData, false);
/**枚举转换 */
//孵化领域
fuHuaQiInfo.industry = changeEnumManyValue(configEnum.FUHUAINDUSTRY, fuHuaQiInfo.industry);
if (fuHuaQiInfo.industry.length > 1) fuHuaQiInfo.industryStr = "多领域";
else fuHuaQiInfo.industryStr = fuHuaQiInfo.industry[0];
//孵化器性质
fuHuaQiInfo.institutionalNature = changeEnumValue(configEnum.INSTITUTIONALNATURE, fuHuaQiInfo.institutionalNature);
//f孵化器级别
fuHuaQiInfo.lv = changeEnumValue(configEnum.FUHUAQILV, fuHuaQiInfo.lv);
//孵化器运营模式
fuHuaQiInfo.operationModel = changeEnumManyValue(configEnum.OPERATIONMODEL, fuHuaQiInfo.operationModel);
//注册地址
fuHuaQiInfo.fuHuazhuCeDiZhiStr = changeAddToString(fuHuaQiInfo.fuHuazhuCeDiZhi);
//联系地址
fuHuaQiInfo.fuHuaLianXiDiZhiStr = changeAddToString(fuHuaQiInfo.fuHuaLianXiDiZhi);
//创业团队类型
fuHuaQiInfo.foundingTeamType = changeEnumValue(configEnum.TEAM, fuHuaQiInfo.foundingTeamType);
/**孵化信息 */
//在孵企业
fuHuaQiInfo.zaiFuQiYe = await findEnterpriseCount({fuHuaQiUscc:uscc, });
//虚拟企业
fuHuaQiInfo.xuNiQiYe = await findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.虚拟孵化 });
//实体企业
fuHuaQiInfo.shiTiQiYe = await findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.实体孵化});
//迁出企业
fuHuaQiInfo.qianChuQiYe = await findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.迁出});
//入驻非孵
fuHuaQiInfo.ruZhuFeiFu = await findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.实体孵化, labels: {"$elemMatch": { "labelId":configEnum.ENTERPRISESYSTEMLABEL.入驻非孵, "state":true }} });
//累计孵化
fuHuaQiInfo.leiJiFuHua = await findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.迁出, moveOutType:configEnum.MOVEOUTTYPE.毕业迁出});
//创始团队
fuHuaQiInfo.foundingTeam = [];
if (dbData.foundingTeam) {
dbData.foundingTeam.forEach(info => {
fuHuaQiInfo.foundingTeam.push(
{
memberName:info.memberName,
memberSex:changeEnumValue(configEnum.SEX, info.memberSex),
memberAge:info.memberAge,
memberDEGREE:changeEnumValue(configEnum.DEGREE, info.memberDEGREE),
memberSchool:info.memberSchool,
des:info.des
}
);
});
}
fuHuaQiInfo.logonTime = moment(fuHuaQiInfo.logonTime).format("YYYY/MM/DD");
fuHuaQiInfo.identificationTime = moment(fuHuaQiInfo.identificationTime).format("YYYY/MM/DD");
//标签动态
let dbLogList = await findLabelLogByParam({uscc:fuHuaQiInfo.uscc});
let labelLogList = [];
let labelNameMap = await getLabelNamMap(configEnum.LABELGOAL.孵化器);
dbLogList.forEach(info => {
let { labelName } = labelNameMap[info.labelId];
labelLogList.push({
time:moment(info.ct).format("YYYY-MM-DD"),
name:labelName,
desc:info.desc,
road:info.road > 2 ? "失效" : "生效"
});
});
//标签
fuHuaQiInfo.labels = [];
if (dbData.labels && dbData.labels.length) {
dbData.labels.forEach(info => {
if (labelNameMap[info.labelId] && labelNameMap[info.labelId].state) {
fuHuaQiInfo.labels.push({
key:labelNameMap[info.labelId].labelName,
state:info.state
});
}
});
}
return {fuHuaQiInfo, labelLogList};
}
/**
* 孵化器管理列表
* @param name
* @param pageNumber
* @param labelId
* @returns
*/
export async function fuHuaQiList(name:string, pageNumber:number, labelId:string) {
let param:any = {uscc:{"$ne":"123456789123456789"}};
if ( labelId ) {
param.labels = {"$elemMatch": { "labelId":labelId, "state":true }};
}
if (name) {
param.name = {"$regex":`${name}`};
}
let dbList = await findFuHuaQiListByPage(param, (pageNumber-1)*10);
let dataCount = await findFuHuaQiCount(param);
let labelNameMap = await getLabelNamMap(configEnum.LABELGOAL.孵化器);
const config = {
uscc:{key:"统一信用代码"},
operationName:{key:"企业名称"},
logonTime:{key:"注册时间"},
lv:{key:"孵化器级别"},
fuHuazhuCeDiZhi:{key:"孵化注册地址"},
fuHuaLianXiDiZhi:{key:"孵化联系地址"}
};
let dataList = [];
dbList.forEach(info => {
let itemData:any = extractData(config, info, false);
//孵化注册地址
itemData.fuHuazhuCeDiZhiStr = changeAddToString(info.fuHuazhuCeDiZhi);
//孵化联系地址
itemData.fuHuaLianXiDiZhiStr = changeAddToString(info.fuHuaLianXiDiZhi);
if (!itemData.fuHuazhuCeDiZhiStr && info.hatchingGround && info.hatchingGround[0]) {
itemData.fuHuazhuCeDiZhiStr = changeAddToString(info.hatchingGround[0].personInChargeAddress);
}
itemData.labels = [];
if (info.labels && info.labels.length) {
info.labels.forEach(info => {
if (labelNameMap[info.labelId] && !labelNameMap[info.labelId].state) {
itemData.labels.push({
key:labelNameMap[info.labelId].labelName,
state:info.state
});
}
});
}
itemData.lv = changeEnumValue(configEnum.FUHUAQILV, info.lv);
itemData.logonTime = moment(info.logonTime).format("YYYY/MM/DD");
dataList.push(itemData);
});
return {dataList, dataCount}
}
import moment = require("moment");
import { TASKTYPEENUM } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { fuHuaQiEnterpairseCount } from "../../../data/enterprise/enterprise";
import { findFuHuaQiOperationNameMapByOperationName } from "../../../data/fuHuaQi/fuhuaqi";
import { statsFinancingEnterpriseAndCount } from "../../../data/fuHuaQi/monthTask/financing";
import { findMonthTableList } from "../../../data/fuHuaQi/monthTask/monthTable";
import { distinctCycle, findTaskListByParam } from "../../../data/fuHuaQi/monthTask/task";
import { BizError } from "../../../util/bizError";
export async function taskMonthsList() {
let cycleList = await distinctCycle();
let dataList = [];
cycleList.forEach(taskId => {
let str = `${taskId}`;
let dateKey = `${str.slice(0, 4)}-${str.slice(4, 10)}`
dataList.push({
key:dateKey,
value:parseInt(str)
});
});
return {dataList}
}
export async function taskList(submitType:number, taskYear:number, taskMonth:number, name:string, page:number) {
if (submitType<1 || submitType>3) throw new BizError(ERRORENUM.参数错误);
let fuHuaQiMap = {};
//获取数据年月
let dataTime = moment(new Date(`${taskYear}-${taskMonth}-1 00:00:01`).valueOf()).subtract(1,'month');
let year = dataTime.year();
let month = dataTime.month()+1;
let taskKey = `${taskYear}${taskMonth}`;
//获取任务状态
let takList = await findTaskListByParam({year, month});
takList.forEach(info => {
let {type, fuHuaQiUscc, isSubmit} = info;
if (!fuHuaQiMap[fuHuaQiUscc]) {
fuHuaQiMap[fuHuaQiUscc] = {
month:{isSubmit:false, rate:"-"},
enterprise:{isSubmit:false, importCount:"-", registerCount:"-"},
financing:{isSubmit:false, count:"-", amount:"-"},
};
}
switch(type) {
case TASKTYPEENUM.孵化器月度填报:
fuHuaQiMap[fuHuaQiUscc].month.isSubmit = isSubmit;
break;
case TASKTYPEENUM.新注册或迁入企业登记:
fuHuaQiMap[fuHuaQiUscc].enterprise.isSubmit = isSubmit;
break;
case TASKTYPEENUM.融资企业填报:
fuHuaQiMap[fuHuaQiUscc].financing.isSubmit = isSubmit;
break;
}
});
/**出租率 */
let monthTaskList = await findMonthTableList({year, month});
monthTaskList.forEach(info => {
let {occupancyRate, fuHuaQiUscc} = info;
if (fuHuaQiMap[fuHuaQiUscc]) {
fuHuaQiMap[fuHuaQiUscc].month.rate = `${occupancyRate}%`;
}
});
/**新注册新迁入 */
let inputEnterpriseList = await fuHuaQiEnterpairseCount(taskKey);
inputEnterpriseList.forEach(info => {
let {_id, isCreateSum, isNotCreateSum} = info;
if (fuHuaQiMap[_id]) {
fuHuaQiMap[_id].enterprise.importCount = `${isNotCreateSum}`;
fuHuaQiMap[_id].enterprise.registerCount = `${isCreateSum}`;
}
});
let financingList = await statsFinancingEnterpriseAndCount(taskKey);
financingList.forEach(info => {
let {_id, enterpriseCount, financingAmount} = info;
if (fuHuaQiMap[_id]) {
fuHuaQiMap[_id].financing.count = `${enterpriseCount}`;
fuHuaQiMap[_id].financing.amount = `${financingAmount}`;
}
});
let nameMapParam = {};
if (name) nameMapParam = {operationName: {"$regex":`${name}`} };
let fhqNameMap = await findFuHuaQiOperationNameMapByOperationName(nameMapParam);
let allDataList = [];
for (let uscc in fuHuaQiMap) {
if (fhqNameMap[uscc]) {
fuHuaQiMap[uscc]["name"] = fhqNameMap[uscc];
let itemState = 0;
if (fuHuaQiMap[uscc].month.isSubmit == false || fuHuaQiMap[uscc].enterprise.isSubmit == false || fuHuaQiMap[uscc].financing.isSubmit == false) {
itemState = 3;
} else {
itemState = 2;
}
if (itemState == submitType || submitType == 1) allDataList.push(fuHuaQiMap[uscc]);
}
}
let dataCount = Object.keys(fuHuaQiMap).length;
/**在全量结果数据里做分页 */
let dataList = allDataList.splice((page-1)*10, page*10);
return {dataCount:dataCount, dataList, pageCount:Math.ceil(dataCount/10)};
}
\ No newline at end of file
/**
* 管委会小程序端主页面
*/
import moment = require("moment");
import { findEnterpriseCount, newEnterpriseIndustry, statsEnterpriseLabels } from "../../data/enterprise/enterprise";
import { findTaskListByParam } from "../../data/fuHuaQi/monthTask/task";
import { statsAvgOccupancyRate } from "../../data/fuHuaQi/monthTask/monthTable";
import { statsFinancingCount, statsFinancingEnterpriseCount } from "../../data/fuHuaQi/monthTask/financing";
import { changeEnumValue } from "../../util/verificationEnum";
import { INDUSTRY, LABELGOAL } from "../../config/enum";
import { getEffectiveLabelMap } from "../../data/label";
import { statsFuHuaQiLabels } from "../../data/fuHuaQi/fuhuaqi";
/**
* 主页
* @param year 数据年
* @param month
*/
export async function stagingHomePageTop(year:number, month:number) {
let lastMonthDate = moment(new Date(`${year}-${month}-1 00:00:00`).valueOf()).subtract(1, 'month');
let lastYear = lastMonthDate.year();
let lastMonth = lastMonthDate.month() + 1;
let taskList = await findTaskListByParam({year, month});
let taskStatsMap = {};
taskList.forEach(info => {
let { fuHuaQiUscc, isSubmit} = info;
if (!taskStatsMap[fuHuaQiUscc]) taskStatsMap[fuHuaQiUscc] = true;
if (!isSubmit) taskStatsMap[fuHuaQiUscc] = false;
});
let taskCount = Object.keys(taskStatsMap).length;
let submitCount = 0;
for (let key in taskStatsMap) {
if (taskStatsMap[key]) submitCount += 1;
}
let statsList = [];
//新注册企业
let registerCount = await findEnterpriseCount({taskId:{"$regex":`${year}${month}$`}, isCreate:true, draftLock:true});
let lastMonthRegisterCount = await findEnterpriseCount({taskId:{"$regex":`${lastYear}${lastMonth}$`}, isCreate:true});
statsList.push({key:"新注册企业", value:registerCount, mom:Math.round(((registerCount-lastMonthRegisterCount)/lastMonthRegisterCount)*10000)/100 });
//新迁入企业
let moveInCount = await findEnterpriseCount({taskId:{"$regex":`${year}${month}$`}, isCreate:false});
let lastMonthMoveInCount = await findEnterpriseCount({taskId:{"$regex":`${lastYear}${lastMonth}$`}, isCreate:false});
statsList.push({key:"新迁入企业", value:moveInCount, mom:Math.round(((moveInCount-lastMonthMoveInCount)/lastMonthMoveInCount)*10000)/100 });
//平均出租率
let occupancyRateAVG = await statsAvgOccupancyRate(year, month);
let lastMonthOccupancyRateAVG = await statsAvgOccupancyRate(lastYear, lastMonth);
statsList.push({key:"平均出租率", value:occupancyRateAVG, mom:Math.round(((occupancyRateAVG-lastMonthOccupancyRateAVG)/lastMonthOccupancyRateAVG)*10000)/100 });
//融资企业数
let financingEnterpriseCount = await statsFinancingEnterpriseCount({taskId:{"$regex":`${year}${month}$`}, draftLock:true});
let lastMonthFinancingEnterpriseCount = await statsFinancingEnterpriseCount({taskId:{"$regex":`${lastYear}${lastMonth}$`}, draftLock:true});
statsList.push({key:"融资企业", value:financingEnterpriseCount, mom:Math.round(((financingEnterpriseCount-lastMonthFinancingEnterpriseCount)/lastMonthFinancingEnterpriseCount)*10000)/100 });
//融资额
let financingCount = await statsFinancingCount({taskId:{"$regex":`${year}${month}$`}, draftLock:true});
let lastMonthFinancingCount = await statsFinancingCount({taskId:{"$regex":`${lastYear}${lastMonth}$`}, draftLock:true});
statsList.push({key:"融资额", value:financingCount, mom:Math.round(((financingCount-lastMonthFinancingCount)/lastMonthFinancingCount)*10000)/100 });
/**新增企业行业分布 */
let industryDBList = await newEnterpriseIndustry(year, month);
let industryList = [];
let industryCount = 0;
industryDBList.forEach(info => {
let {_id, count} = info;
if ( _id ) {
industryList.push({key:changeEnumValue(INDUSTRY, _id), count});
industryCount += count;
}
});
industryList.sort((a, b) => {return b.count - a.count});
for (let i= 0; i < industryList.length; i++) {
let itemValue = industryList[i].count;
industryList[i]["rate"] = Math.round( (itemValue/industryCount)*10000 )/100;
}
return {
taskInfo:{
taskCount,//发送填报表总数
submitCount,//已填报
notSubmitCount:taskCount-submitCount,//未填报
submitRate:Math.round((submitCount/taskCount)*10000)/100,//填报率
notSubmitRate:Math.round( ((taskCount-submitCount)/taskCount)*10000 )/100//未填报率
},
statsList,//卡片列表
industryList//新增企业行业分布
};
}
/**
* 企业标签
*/
export async function enterpriseLabel() {
let labelList = await statsEnterpriseLabels();
let labelNameMap = await getEffectiveLabelMap(LABELGOAL.企业);
let countMap = {};
labelList.forEach(info => {
let id = info._id;
countMap[id] = info.count;
});
let dataList = [];
for (let key in labelNameMap) {
let name = labelNameMap[key].labelName;
dataList.push({
label:name,
count:countMap[key] || 0
});
}
dataList.sort((a,b) => {return b.count-a.count});
return {dataList};
}
/**
* 孵化器标签
*/
export async function fuHuaQiLabel() {
let labelList = await statsFuHuaQiLabels();
let labelNameMap = await getEffectiveLabelMap(LABELGOAL.孵化器);
let countMap = {};
labelList.forEach(info => {
let id = info._id;
countMap[id] = info.count;
});
let dataList = [];
for (let key in labelNameMap) {
let name = labelNameMap[key].labelName;
dataList.push({
label:name,
count:countMap[key] || 0
});
}
dataList.sort((a,b) => {return b.count-a.count});
return {dataList};
}
/**
* 小程序端 管委会 用户基础功能
* 作者: lxm
* 主要包括有 孵化器账号的登录
* 预留好 重置密码 退出登录 接口
*/
import { ERRORENUM } from "../../config/errorEnum";
import { findGuanWeiHuiUserInfoByLoginId } from "../../data/guanWeiHui/guanweihui";
import { BizError } from "../../util/bizError";
import { getPwdMd5, getToken } from "../../tools/system";
import { findFuHuaQiByUSCC } from "../../data/fuHuaQi/fuhuaqi";
const md5 = require("md5");
/**
* 登录
* 4.0版本更新:加入孵化器角色登录
* @param loginId 信用代码
* @param pwd 密码
* @returns resultUserInfo:{uscc, name} 登录后的信息
*/
export async function login(loginId:string, pwd:string) {
let userInfo = await findGuanWeiHuiUserInfoByLoginId(loginId);
if (!userInfo || !userInfo.loginId) throw new BizError(ERRORENUM.账号不存在, loginId);
let checkPwd = getPwdMd5(loginId, pwd);
if (userInfo.pwd != checkPwd) throw new BizError(ERRORENUM.密码错误);
let mobileToken = getToken(loginId);
userInfo.mobileToken = mobileToken;
userInfo.mobileTokenMs = new Date().valueOf();
await userInfo.save();
return {
uscc: userInfo.loginId,
name: userInfo.name,
token: mobileToken,
};
}
/**
* 退出登录
* 小程序端
* @param uscc 信用代码
* @returns {isSuccess:true/false}
*/
export async function logout(userId:string){
if (typeof userId != "string") throw new BizError(ERRORENUM.参数错误, userId);
let userInfo = await findGuanWeiHuiUserInfoByLoginId(userId);
userInfo.mobileToken = "";
userInfo.mobileTokenMs = 0;
await userInfo.save();
return {isSuccess:true};
}
......@@ -120,6 +120,7 @@ export async function sendChangePwdCode(phone:string, code:string) {
* @returns
*/
export async function sendTaskPointOut(phoneList, month:number) {
return;
let sendRes:any = await sendMsmToPhoneNumber(phoneList, SMSTYPE.信息填报提醒, [month]);
if (sendRes.isError) throw new BizError(ERRORENUM.短信发送失败, sendRes.msg);
......
......@@ -19,17 +19,19 @@ import { SMSTYPE } from "../config/enum";
import { dataDeclarationTask } from "./mobileEnterprise/quarterTask/dataDeclaration";
import { findQuarterTaskCountByParam } from "../data/fuHuaQi/quarterTask/quarterTask";
import { provideFuHuaQiQuarterTask } from "./mobileFuHuaQi/fuHuaQi/task/quarterTask";
import { initSystemLabelData, systemLabel } from "./label";
/**
* 初始化任务
* 初始化任务 6.0改成了 管理后台手动发放
*/
export function initSystemTask() {
/**孵化器月度任务 */
fuHuaQiMonthTask();
setInterval(async function () {
await fuHuaQiMonthTask();
}, 3600 * 1000);
export async function initSystemTask() {
// return;//发布的时候要放开
// /**孵化器月度任务 */
// fuHuaQiMonthTask();
// setInterval(async function () {
// await fuHuaQiMonthTask();
// }, 3600 * 1000);
/**孵化器季度任务 */
// fuHuaQiQuarterTask();
......@@ -37,21 +39,33 @@ export function initSystemTask() {
// await fuHuaQiQuarterTask();
// }, 3600 * 1000 * 2);
/**企业季度任务 */
// enterpriseQuarterTask();
// setInterval(async function () {
// await enterpriseQuarterTask();
// }, 3600 * 1000 * 2);
// /**企业季度任务 */
// // enterpriseQuarterTask();
// // setInterval(async function () {
// // await enterpriseQuarterTask();
// // }, 3600 * 1000 * 2);
/**初始化短信任务 */
smsTask();
setInterval(async function () {
await smsTask();
}, 3600 * 1000);
console.log(`systemTask init success`);
// /**初始化短信任务 */
// smsTask();
// setInterval(async function () {
// await smsTask();
// }, 3600 * 1000);
// console.log(`systemTask init success`);
// console.log(`systemTask init success`);
console.log(`systemTask init success`);
/**这个是校验数据 */
await initSystemLabelData();
await systemLabel();
let lastUpdateDay = moment().format("YYYY-MM-DD");
setInterval(async function () {
let hours = moment().hours();
if ( moment().format("YYYY-MM-DD") == lastUpdateDay && hours>2 && hours <= 4) {
await systemLabel();
lastUpdateDay = moment().format("YYYY-MM-DD");
}
}, 3600 * 1000 * 1);
}
......@@ -100,6 +114,7 @@ async function enterpriseQuarterTask() {
* 短信任务 每月倒数第七天发送
*/
async function smsTask() {
return;
let nowMs = new Date().valueOf();
let lastDate = moment(nowMs).endOf("month").format("YYYY-MM-DD");
let checkMs = moment(lastDate+' 00:00:00').subtract(7,'days').valueOf();
......
......@@ -322,7 +322,8 @@ export enum SCOREWAYS {
我的信息 = 1,
我的数据,
我的企业数据,
任务得分
任务得分,
分值重置
}
......@@ -481,4 +482,88 @@ export enum CYCSRBJ {
大企业高管创业,
连续创业,
大学生创业
}
/**
* 标签类型
*/
export enum LABELTYPE {
系统标签 = 1,
自定义标签 = 2
}
export enum LABELGOAL {
孵化器 = 1,
企业
}
export enum LABELUPDATEROAD {
生效 = 1,
重新生效,
失效,
}
/**
* 孵化器系统标签
*/
export enum FHQSYSTEMLABEL {
专业技术平台 = "fhqzyjspt"
}
/**
* 企业系统标签
*/
export enum ENTERPRISESYSTEMLABEL {
在孵企业 = 'zfqy',
毕业企业 = "byqy",
拟毕业企业 = 'nbyqy',
融资企业 = 'rzqy',
上市企业 = 'ssqy',
高新企业 = 'gxqy',
专精特新 = 'zjtxqy',
小巨人 = 'xjrqy',
入驻非孵 = 'rzffqy',
虚拟企业 = 'xnqy',
迁出企业 = 'qcqy',
企业注销 = 'qyzx'
}
/**
* 孵化器自定义任务类型
*/
export enum FUHUAQICUSTOMTASKTYPE {
月度任务 = 1
}
export enum GUANWEIHUIMANANGENTERPRISELABEL {
新注册企业 = 'xzcqy',
新迁入企业 = 'xqrqy',
}
export enum RAS {
续存 = 1,
注销 = 2
}
export enum ENTERPRISESIZE {
未知 = 0,
大型,
中型,
小型,
微型
}
export enum NASHUIRENZIZHI {
未知 = 0,
小规模纳税人,
一般纳税人,
增值税一般纳税人
}
\ No newline at end of file
......@@ -72,7 +72,17 @@ export enum ERRORENUM {
缺少关键参数导致修改失败,
不合规操作,
未填安全手机号无法修改密码,
请输入聊天内容
请输入聊天内容,
目标数据不存在,
不能删除非自定义标签,
该数据周期已存在此类型任务,
任务延期不可将开始时间提前,
任务延期结束时间要大于开始时间,
不可提前回收已完成任务,
缺少月份参数,
多余年份与月份参数,
不可以创建未来数据月的任务,
填报周期不能小于数据周期
}
export enum ERRORCODEENUM {
......
......@@ -42,11 +42,17 @@ const intellectualPropertySchema = new Schema({
secondClassPatent:Number,//二类专利
}, {_id:false});
/**标签 */
const enterpriseLabelSchema = new Schema({
labelId:String,
state:{type:Boolean, default:true},//状态 false表示标签失效
},{_id:false});
const enterpriseSchema = new Schema({
name: {type:String, index: true},//企业名称
taskId:{type:String, index:true},//绑定的任务id
uscc:{type:String, index: true},//统一信用代码
fuHuaQiUscc:{type:String, index:true},//孵化器统一信用代码[-p---------------------------------------------]
fuHuaQiUscc:{type:String, index:true},//孵化器统一信用代码[-p]
industry:[Number],//领域
logonTime:Number,//注册时间
firstIncubationTime:Number,//首次入孵时间
......@@ -95,7 +101,31 @@ const enterpriseSchema = new Schema({
cycxfx:{type:[Number], default:[]},//创业创新方向
cycsrbj:{type:[Number], default:[]},//创业创始人背景
securePhon:String,//安全手机号,用于做修改密码用
/**标签系统 */
labels:{type:[enterpriseLabelSchema], default:[]},
/**导入的补充数据 */
RAS:{type:Number},//登记状态
logOffMS:{type:Number},//注销时间
legalPerson:String,//法人
zhuceziben:{type:String, default:'-'},//注册资本
shijiaoziben:{type:String, default:'-'},//实缴资本
dianHua:String,//电话
gengDuoDianHua:{type:String},//更多电话
mail:{type:String, default:'-'},//邮箱
moreMail:{type:String, default:'-'},//更多邮箱
enterpriseType:{type:String, index:true},//企业(机构)类型
zhuCeHao:String,//注册号
zuZhiJiGouDaiMa:String,//组织机构代码
canBaoRenShu:Number,//参保人数
canBaoRenShuNianBao:Number,//参保人数所属年报
yingYeQiXian:String,//营业期限
qiYeGuiMo:{type:Number, index:true},//企业规模
guanWang:String,//官网
tongXinDiZhi:String,//通信地址
jianJie:String,//企业简介
dengJiJiGuan:String,//登记机关
naShuiRenZiZhi:Number,//纳税人资质
zuiXinNianBaoNianFen:Number//最新年报年份
});
var enterpriseModel;
......@@ -495,4 +525,82 @@ export async function statsEnterpriseIntellectualPropertyInfo() {
"一类专利":reuslt.classIPatent,
"二类专利":reuslt.secondClassPatent
};
}
export async function newEnterpriseIndustry(year:number, month:number) {
let subList = await enterpriseModel.aggregate([
{
"$match":{
taskId:{"$regex":`${year}${month}$`}, draftLock:true
}
},
{
"$project":{
_id:"$uscc",
firstIndustry:{"$arrayElemAt":["$industry", 0]}
}
},
{
"$group":{
_id:"$firstIndustry",
count:{"$sum":1}
}
}
]);
return subList;
}
export async function findUsccList() {
return await enterpriseModel.find({}, {uscc:1});
}
export async function fuHuaQiEnterpairseCount(taskKey:string) {
let subList = await enterpriseModel.aggregate([
{
"$match":{
taskId:{"$regex":`${taskKey}$`}, draftLock:true
}
},
{
"$group":{
_id:"$fuHuaQiUscc",
"isCreateSum": {
"$sum":{"$cond": [ { "$eq":["$isCreate", true] },1, 0 ]}
},
"isNotCreateSum": {
"$sum":{"$cond": [ { "$eq":["$isCreate", false ]},1, 0 ]}
}
}
}
]);
return subList;
}
export async function statsEnterpriseLabels() {
let subList = await enterpriseModel.aggregate([
{
$unwind: "$labels"
},
{
$group: {
_id: "$labels.labelId",
"count": {
"$sum": {
"$cond": [
{ "$eq": ["$labels.state", true] }, // 假设 specificValue 是您想要检查的值
1,
0
]
}
}
}
}
]);
return subList;
}
\ No newline at end of file
/**
* 企业标签
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const enterpriseLabelLogSchema = new Schema({
uscc:{type:String, index:true},
labelId:String,
road:Number,
ct:Number,
desc:String
});
var enterpriseLabelLogModel;
export function initModel(){
enterpriseLabelLogModel = baseDB.model('enterpriseLabelLog', enterpriseLabelLogSchema);
enterpriseLabelLogModel.selectOnceData = async function (paramater:object) {
let selectInfo = await enterpriseLabelLogModel.findOne(paramater).exec();
if (selectInfo) {
if (!selectInfo.runSave) {
selectInfo.runSave = selectInfo.save;
selectInfo.save = save.bind(selectInfo)
}
}
return selectInfo;
}
}
export async function save(throwError=false) {
if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{
console.log(err);
});
}
export async function addManyLabelLog(addList:object) {
await enterpriseLabelLogModel.insertMany(addList);
}
export async function addOnceLabelLog(uscc:string, labelId:string, road:number, desc:string) {
await enterpriseLabelLogModel.create({uscc, labelId, road, desc, ct:new Date().valueOf() });
}
export async function findLabelLogByParam(param) {
return await enterpriseLabelLogModel.find(param);
}
\ No newline at end of file
......@@ -227,4 +227,26 @@ export async function statsFinancingEnterprise() {
list.push({uscc:_id, count});
});
return list;
}
export async function selectEnterpriseFinancingAmount(uscc:string) {
//financingAmount timeToObtainInvestment
let financingList = await financingInfoModel.find({uscc});
financingList.sort( (a, b) => {return a.timeToObtainInvestment - b.timeToObtainInvestment})
let state = false;
for (let i= 0; i < financingList.length; i++) {
let {financingAmount, timeToObtainInvestment} = financingList[i];
let count = financingAmount;
for (let j = (i+1); j < financingList.length; j++) {
count += financingList[j].financingAmount;
if ((financingList[j].timeToObtainInvestment - timeToObtainInvestment) > (365 * 24 * 3600 * 1000)) {
break;
}
}
if (count >= 500) {
state = true;
break;
}
}
return state;
}
\ No newline at end of file
......@@ -197,4 +197,32 @@ export async function statsEnterpriseQuerterBusinessInfo(year:number) {
});
return { biMap, rdMap, txpMap };
}
export async function selectEnterpriseBusinessAmount(uscc:string) {
//year BI
let financingList = await businessDataModel.aggregate([
{"$match":{uscc, "$or":[{isSubmit:true}, {fhqIsSubmit:true}] }},
{"$group":{_id:"$year",
BI:{"$sum":"$BI"},
}}
]);
financingList.sort( (a, b) => {return a._id - b._id});
let state = false;
for (let i= 0; i < financingList.length; i++) {
let {_id, BI} = financingList[i];
let count = BI;
for (let j = (i+1); j < financingList.length; j++) {
count += financingList[j].financingAmount;
if ((financingList[j]._id - _id) > 1) {
break;
}
}
if (count >= 10000000) {
state = true;
break;
}
}
return state;
}
\ No newline at end of file
/**
* 自定义任务
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const customTaskSchema = new Schema({
customTaskId:{type:String, index:true},//格式 fuHuaQiTaskType_数据周期的YYYYMM
customTaskType:{type:Number},//类型 遵循 FUHUAQICUSTOMTASKTYPE
dataCycle:{type:Number},//数据周期 202401 格式
startMs:{type:Number},
endMs:{type:Number},
isExtension:{type:Boolean, default:false}//是否延期
});
var customTaskModel;
export function initModel(){
customTaskModel = baseDB.model('customtask', customTaskSchema);
customTaskModel.selectOnceData = async function (paramater:object) {
let selectInfo = await customTaskModel.findOne(paramater).exec();
if (selectInfo) {
if (!selectInfo.runSave) {
selectInfo.runSave = selectInfo.save;
selectInfo.save = save.bind(selectInfo)
}
}
return selectInfo;
}
}
export async function save(throwError=false) {
if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{
console.log(err);
});
}
/**
* 通过taskId 获取此次自定义任务
* 支持.save方法保存对象修改
* @param taskId 任务id 格式遵循tool中getTaskId
* @returns {}
*/
export async function findCustomTaskByTaskId(customTaskId:string) {
let taskInfo = await customTaskModel.selectOnceData({customTaskId});
return taskInfo;
}
/**
* 列表 分页
* @param param
* @param skipCount
* @returns
*/
export async function findCustomTaskListByPage(param, skipCount) {
return await customTaskModel.find(param).skip(skipCount).limit(10);
}
export async function findCustomTaskCount(param) {
return await customTaskModel.find(param).countDocuments();
}
/**
* 添加自定义任务
* @param customTaskId
* @param customTaskType
* @param dataCycle
* @param startMs
* @param endMs
*/
export async function addTask(customTaskId:string, customTaskType:number, dataCycle:number, startMs:number, endMs:number ) {
await customTaskModel.create({customTaskId, customTaskType, dataCycle, startMs, endMs});
}
/**
* 孵化器标签
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const fuHuaQiLabelLogSchema = new Schema({
uscc:{type:String, index:true},
labelId:String,
road:Number,
ct:Number,
desc:String//描述
});
var fuHuaQiLabelLogModel;
export function initModel(){
fuHuaQiLabelLogModel = baseDB.model('fuHuaQiLabelLog', fuHuaQiLabelLogSchema);
fuHuaQiLabelLogModel.selectOnceData = async function (paramater:object) {
let selectInfo = await fuHuaQiLabelLogModel.findOne(paramater).exec();
if (selectInfo) {
if (!selectInfo.runSave) {
selectInfo.runSave = selectInfo.save;
selectInfo.save = save.bind(selectInfo)
}
}
return selectInfo;
}
}
export async function save(throwError=false) {
if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{
console.log(err);
});
}
export async function addManyLabelLog(addList:object) {
await fuHuaQiLabelLogModel.insertMany(addList);
}
export async function addOnceLabelLog(uscc:string, labelId:string, road:number, desc:string) {
await fuHuaQiLabelLogModel.create({uscc, labelId, road, desc, ct:new Date().valueOf() });
}
export async function findLabelLogByParam(param) {
return await fuHuaQiLabelLogModel.find(param);
}
\ No newline at end of file
......@@ -29,6 +29,12 @@ const hatchingGroundSchema = new Schema({
personInChargeAddress:{type:[String], default:[]}
},{_id:false});
/**标签 */
const labelSchema = new Schema({
labelId:String,
state:{type:Boolean, default:true},//状态 false表示标签失效
},{_id:false});
const fuHuaQiSchema = new Schema({
name: {type:String,index: true},//名称
operationName:String,//运营机构名称 不可修改
......@@ -81,7 +87,10 @@ const fuHuaQiSchema = new Schema({
/**2024年04月23日字段 */
fuHuazhuCeDiZhi:{type:[String], default:[]},//孵化注册地址
fuHuaLianXiDiZhi:{type:[String], default:[]},//孵化联系地址
/**标签系统 */
labels:{type:[labelSchema], default:[]},
/**2024年6月 */
caiLiHuGuanDi:{type:String, default:""}//财力户管地
});
var fuHuaQiModel;
......@@ -175,6 +184,20 @@ export async function findAllFuHuaQiOperationNameMap() {
* 获取所有运营机构名称的map
* @returns map key:统一信用代码 value:运营机构名称
*/
export async function findFuHuaQiOperationNameMapByOperationName(param) {
let dataList = await fuHuaQiModel.find(param);
let map = {};
dataList.forEach(info => {
map[info.uscc] = info.operationName;
});
return map;
}
/**
* 获取所有运营机构名称的map
* @returns map key:统一信用代码 value:运营机构名称
*/
export async function findFuHuaQiOperationNameMapByParam(param) {
let dataList = await fuHuaQiModel.find(param);
let map = {};
......@@ -262,4 +285,29 @@ export async function findFuHuaQiByBindId(bindId:string) {
*/
export async function findFuHuaQiFilesDataByParam(param, files) {
return await fuHuaQiModel.find(param, files);
}
export async function statsFuHuaQiLabels() {
let subList = await fuHuaQiModel.aggregate([
{
$unwind: "$labels"
},
{
$group: {
_id: "$labels.labelId",
"count": {
"$sum": {
"$cond": [
{ "$eq": ["$labels.state", true] }, // 假设 specificValue 是您想要检查的值
1,
0
]
}
}
}
}
]);
return subList;
}
\ No newline at end of file
......@@ -134,3 +134,64 @@ export async function deleteEnterpriseFinancing(uscc:string, taskId:string) {
export async function findFinancingList(selectParam:object) {
return await financingModel.find(selectParam);
}
/**
* 获取融资企业数量
* @param param
* @returns
*/
export async function statsFinancingEnterpriseCount(param) {
let statsList = await financingModel.aggregate([
{"$match":param },
{"$group":{_id:{"uscc":"$uscc", "dist":"1"}, count:{"$sum":1} }},
{"$group":{_id:"$_id.dist", count:{"$sum":1} }}
]);
return statsList[0] ? statsList[0].count : 0;
}
/**
* 统计融资金额
* @param param
* @returns
*/
export async function statsFinancingCount(param) {
let statsList = await financingModel.aggregate([
{"$match":param },
{"$group":{_id:null, count:{"$sum":"$financingAmount"} }}
]);
return statsList[0] ? statsList[0].count : 0;
}
/**
* 统计融资金额和融资企业数量
* @param param
* @returns
*/
export async function statsFinancingEnterpriseAndCount(taskKey) {
let statsList = await financingModel.aggregate([
{"$match":{taskId:{"$regex":`${taskKey}$`}, draftLock:true} },
{
"$group":{
_id:{
"fuHuaQiUscc":"$fuHuaQiUscc",
"enterpriseUscc":"$enterpriseUscc"
},
"count":{"$sum":"$financingAmount"}
}
},
{
"$group":{
_id:"$_id.fuHuaQiUscc",
"enterpriseCount":{"$sum":1},
"financingAmount":{"$sum":"$count"}
}
}
]);
return statsList;
}
......@@ -140,4 +140,19 @@ export async function statsFuHuaQiMonthDataCount(year:number, month:number) {
*/
export async function getLowOccupancyRateForMonthData(year:number, month:number) {
return await monthTableModel.find({year, month, draftLock:true}).sort({occupancyRate:1}).limit(5);
}
/**
* 计算平均出租率
* @param year
* @param month
*/
export async function statsAvgOccupancyRate(year:number, month:number) {
let statsList = await monthTableModel.aggregate([
{"$match":{year, month, draftLock:true}},
{"$group":{_id:"$month", avgRate:{"$avg":"$occupancyRate"} }}
]);
return statsList[0] ? statsList[0].avgRate : 0;
}
\ No newline at end of file
......@@ -25,6 +25,10 @@ const fuHuaQiTaskSchema = new Schema({
month:Number,//数据的月
year:Number,//数据的年 2.0算分的时候加入的
submitCount:{type:Number, default:0},//提交数量 默认0
startTime:{type:Number, default:0},//任务开始时间 6.0加入
endTime:{type:Number, default:0},//任务结束时间 6.0加入
customTaskId:{type:Number}//自定义任务id 用于找关联数据
});
var fuHuaQiTaskModel;
......@@ -116,6 +120,10 @@ export async function updateTaskYearData(year:number) {
}
export async function upodateTaskStartAdnEndTime(selectParam, updateParam) {
return await fuHuaQiTaskModel.updateMany(selectParam, {$set:updateParam});
}
/**
* 根据条件分页查询任务列表
* @param selectParam 查询条件
......@@ -144,7 +152,7 @@ export async function updateSubmitCount(taskId:string, type:number, count:number
/**
* 获取个月的所有孵化器的填报率
* 获取个月的所有孵化器的填报率
* @param year
* @param month
* @returns
......@@ -161,4 +169,13 @@ export async function statsFuHuaQiTaskReportingRate(year:number, month:number) {
export async function findOneFuHuaQiMonthTaskData(selectParam) {
return await fuHuaQiTaskModel.findOne(selectParam);
}
\ No newline at end of file
}
/**
* 填报周期
*/
export async function distinctCycle() {
return await fuHuaQiTaskModel.distinct('key');
}
......@@ -73,3 +73,7 @@ export async function initFuHuaQiScore(array) {
export async function findScoreDataByParam(param) {
return await fuHuaQiScoreModel.find(param);
}
export async function updateOneByUscc(uscc, updateInfo) {
await fuHuaQiScoreModel.updateOne({uscc}, {"$set":updateInfo});
}
\ No newline at end of file
......@@ -98,4 +98,16 @@ export async function getLogByParam(param) {
export async function updateLog(uscc:string, timeMs:number,ways:number,taskType:number, newTimeMs:number) {
return await fuHuaQiScoreLogModel.updateOne({uscc, ways, taskType, timeMs}, {"$set":{timeMs:newTimeMs}});
}
export async function removeLogByParam(param) {
await fuHuaQiScoreLogModel.deleteMany(param);
}
export async function updateInfo(param, updateInfo) {
return await fuHuaQiScoreLogModel.updateOne(param, {"$set":updateInfo});
}
export async function getNewLog(uscc) {
return await fuHuaQiScoreLogModel.findOne({uscc}).sort({timeMs:-1});
}
\ No newline at end of file
......@@ -11,7 +11,9 @@ const guanWeiHuiSchema = new Schema({
loginId: {type:String, index:true},//登录账号
pwd:String,//密码
token:String,
tokenMs:Number
tokenMs:Number,
mobileToken:String,
mobileTokenMs:Number
});
var guanWeiHuiModel;
......
......@@ -69,7 +69,7 @@ export async function selectInformationByParam(param) {
}
export async function selectInformationByParamToPage(param, skipNumber:number) {
return await informationModel.find(param).sort({createTimeMs:-1}).skip(skipNumber).limit(10);;
return await informationModel.find(param).sort({createTimeMs:-1}).skip(skipNumber).limit(10);
}
export async function selectInformationByParamCount(param) {
......
/**管委会月报 */
import moment = require("moment");
import { FUHUAQILV, FUHUASTATE, INDUSTRY, INSTITUTIONALNATURE } from "../../config/enum";
import { findEnterpriseList } from "../enterprise/enterprise";
import { findFuHuaQiCount, findFuHuaQiList } from "../fuHuaQi/fuhuaqi";
import { findTaskListByParam } from "../fuHuaQi/monthTask/task";
import { findMonthTableList, findMonthTableListCount } from "../fuHuaQi/monthTask/monthTable";
import { changeEnumValue } from "../../util/verificationEnum";
export async function gtest() {
let fuHuaQiCountParam = {userState:false, uscc:{"$ne":"123456789123456789"}};
let fuHuaQiCount = await findFuHuaQiCount(fuHuaQiCountParam);//孵化器个数
let fuHuaQiList = await findFuHuaQiList(fuHuaQiCountParam);
let acreageTotalCount = 0;
let incubatedAcreageCount = 0;
let lvMap = {
1:{name:FUHUAQILV[FUHUAQILV.国家级众创空间], count:0},
2:{name:FUHUAQILV[FUHUAQILV.市级众创空间], count:0},
3:{name:FUHUAQILV[FUHUAQILV.国家级孵化器], count:0},
4:{name:FUHUAQILV[FUHUAQILV.市级孵化器], count:0},
5:{name:FUHUAQILV[FUHUAQILV.区级], count:0}
};
let institutionalNatureMap = {
1:{name:INSTITUTIONALNATURE[INSTITUTIONALNATURE.国资为主], count:0},
2:{name:INSTITUTIONALNATURE[INSTITUTIONALNATURE.民资为主], count:0},
3:{name:INSTITUTIONALNATURE[INSTITUTIONALNATURE.外资为主], count:0}
};
let industryMap = {};
for (let key in INDUSTRY) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
industryMap[INDUSTRY[key]]= {name:keyStr, count:0}
}
}
let fuHuaQiUsccNameMap = {};
fuHuaQiList.forEach(info => {
let {acreageTotal, incubatedAcreage, acreagePersonalUse, institutionalNature, industry, lv} = info;
if (acreageTotal) acreageTotalCount += acreageTotal;
if (incubatedAcreage) incubatedAcreageCount += incubatedAcreage;
if(lv) lvMap[lv].count += 1;
institutionalNatureMap[institutionalNature].count += 1;
if (industry[0]) {
industryMap[industry[0]].count += 1;
}
fuHuaQiUsccNameMap[info.uscc] = {opName:info.operationName, name:info.name, acreageTotal}
});
console.log("孵化器总面积", acreageTotalCount, "总在孵面积", incubatedAcreageCount);
console.log("国家级科技企业孵化器:",lvMap[FUHUAQILV.国家级孵化器].count);
console.log("国家级众创空间:",lvMap[FUHUAQILV.国家级众创空间].count);
console.log("市级孵化器:",lvMap[FUHUAQILV.市级孵化器].count);
console.log("市级众创空间:",lvMap[FUHUAQILV.市级众创空间].count);
console.log("=====================");
console.log("国有:",institutionalNatureMap[INSTITUTIONALNATURE.国资为主].count);
console.log("民营:",institutionalNatureMap[INSTITUTIONALNATURE.民资为主].count);
console.log("外资:",institutionalNatureMap[INSTITUTIONALNATURE.外资为主].count);
console.log("=====================");
console.log("人工智能及信息技术:",industryMap[INDUSTRY.人工智能及智能制造].count+industryMap[INDUSTRY.软件和信息服务业].count);
console.log("生物医药:",industryMap[INDUSTRY.生物医药].count);
console.log("集成电路:",industryMap[INDUSTRY.集成电路].count);
console.log("综合及其他:",industryMap[INDUSTRY.航空航天].count+industryMap[INDUSTRY.汽车产业].count+industryMap[INDUSTRY.低碳环保及新材料].count+industryMap[INDUSTRY.综合].count+industryMap[INDUSTRY.文化创意].count);
let enterpriseSelectParam = {
"$or": [
{
"$and":[
{
"draftLock":true
},
{
"taskId":{
"$ne":null
}
}
]
},
{
"$and": [
{
"draftLock":false
},
{
"taskId":null
}
]
}
],
state:{"$ne":FUHUASTATE.迁出}
};
let enterpriseList = await findEnterpriseList(enterpriseSelectParam);
let count = 0;
let nullCount = 0;
let thisYearCount = 0;
let thisYearCountMap = {};
enterpriseList.forEach(info => {
let {operatingAddress, logonAddress, fuHuaQiUscc, logonTime, industry, taskId, createTime, uscc, name} = info;
if (createTime && createTime > new Date("2024-01-01 00:00:00").valueOf()) {
// if (delList.indexOf(uscc) != -1) {
// return;
// }
let monthKey = moment(createTime).format("YYYYMM");
if (!thisYearCountMap[monthKey]) {
thisYearCountMap[monthKey] = {count:0};
for (let key in INDUSTRY) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
thisYearCountMap[monthKey][keyStr]= 0;
}
}
}
thisYearCountMap[monthKey].count += 1;
if (industry && industry[0]) thisYearCountMap[monthKey][changeEnumValue(INDUSTRY,industry[0])] += 1;
thisYearCount += 1;
}
// if(taskId) {
// let taskIndex = taskId.slice(-5);
// if (taskIndex == "20242" || taskIndex == "20243" || taskIndex == "20244" || taskIndex == "20245") {
// if (!thisYearCountMap[taskIndex]) thisYearCountMap[taskIndex] = 0;
// thisYearCountMap[taskIndex] += 1;
// thisYearCount += 1;
// }
// }
if (logonAddress[0] && logonAddress[0] != "上海市" ) {
// console.log("注册地不在上海+1");
return;
}
if (logonAddress[1] && logonAddress[1] != "上海市" ) {
// console.log("经营地不在上海+1");
return;
}
// if (delList.indexOf(uscc) != -1) {
// // console.log("xxx");
// return;
// }
if(!logonAddress[0]) nullCount += 1;
if (logonTime) {
let yearLong = moment().diff(logonTime, 'years');
if (industry.indexOf(INDUSTRY.人工智能及智能制造) != -1 || industry.indexOf(INDUSTRY.生物医药) != -1 || industry.indexOf(INDUSTRY.集成电路) != -1) {
if (yearLong <= 5) count += 1;
} else {
if (yearLong <=4) count += 1;
}
}
});
console.log("本年累计新增",thisYearCount,"家");
console.log("在孵企业",count);
console.log("注册地址缺失:", nullCount);
let wangList = [];
//出租率
let monthAVGList = [];
for (let i = 1; i < 5; i++) {
let monthList = await findMonthTableList({year:2024, month:i, draftLock:true});
let thisMonthCheckCount = await findMonthTableListCount({year:2024, month:i, draftLock:true});
let monthCount = 0;
monthList.forEach(info => {
let {occupancyRate, fuHuaQiUscc} = info;
monthCount += occupancyRate;
if (i == 4 && occupancyRate < 50) {
wangList.push({name:fuHuaQiUsccNameMap[fuHuaQiUscc].opName, value:occupancyRate, acreageTotal:fuHuaQiUsccNameMap[fuHuaQiUscc].acreageTotal});
}
});
let avg = Math.ceil((monthCount / monthList.length)*100)/100;
monthAVGList.push(avg);
if (i != 1) console.log(`${i}月发出填报要求105,有效填报${thisMonthCheckCount}份,未填报${105-thisMonthCheckCount}份共收集,月平均出租率${avg},环比${(avg-monthAVGList[i-2])>0 ? "上升":"下降"}${Math.abs(Math.round((avg-monthAVGList[i-2])*100)/100)}`);
}
console.log("=================");
wangList.forEach(info => {
console.log(info.name, " 出租率:", info.value, " 孵化面积", info.acreageTotal);
});
console.log("============");
console.log("本月新增企业领域占比");
let thisMonth = moment().format("YYYYMM");//本月
for (let key in thisYearCountMap[thisMonth]) {
if (key == "count") continue;
let value = thisYearCountMap[thisMonth][key];
if (value) {
console.log(`${key}${value}家,占比${Math.round((value/thisYearCountMap[thisMonth]["count"]) *10000 )/100}`);
}
}
console.log();
}
\ No newline at end of file
/**
* 标签系统
*/
import {Schema} from 'mongoose';
import { baseDB } from '../db/mongo/dbInit';
const labelSchema = new Schema({
id:{type:String, index:true},//标识
labelName:String,
ctMs:Number,//创建时间
goal:Number,//目标 LABELGOAL
labelType:Number,//标签类型 LABELTYPE 系统标签不可以删除
state:{type:Boolean, default:false}//是否停用 true表示已停用
});
var labelModel;
export function initModel(){
labelModel = baseDB.model('label', labelSchema);
labelModel.selectOnceData = async function (paramater:object) {
let selectInfo = await labelModel.findOne(paramater).exec();
if (selectInfo) {
if (!selectInfo.runSave) {
selectInfo.runSave = selectInfo.save;
selectInfo.save = save.bind(selectInfo)
}
}
return selectInfo;
}
}
export async function save(throwError=false) {
if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{
console.log(err);
});
}
export async function createLabel(goal:number, labelType:number, name:string, id:string) {
let addInfo = { id, goal, labelType, labelName:name, ctMs:new Date().valueOf(), state:false, isDelete:false };
return await labelModel.create(addInfo);
}
export async function findOnceLabel(id:string) {
return await labelModel.selectOnceData({id});
}
export async function selectLabelList(param) {
return await labelModel.find(param);
}
export async function selectLabelListToPage(param, skipNumber) {
return await labelModel.find(param).skip(skipNumber).limit(10);
}
export async function selectLabelCount(param) {
return await labelModel.find(param).countDocuments();
}
export async function addSystemLabel(labels) {
await labelModel.insertMany(labels);
}
export async function delLabel(id) {
return await labelModel.deleteOne({id});
}
export async function getEffectiveLabelMap(goal:number) {
let list = await labelModel.find({goal, state:false});
let map = {};
list.forEach( info => {
let {id, labelName, labelType} = info;
map[id] = {labelName, labelType};
});
return map;
}
export async function getLabelNamMap(goal:number) {
let list = await labelModel.find({goal});
let nameMap = {};
list.forEach(info => {
let {id, labelName, state} = info;
nameMap[id] = {labelName, state};
});
return nameMap;
}
\ No newline at end of file
......@@ -28,6 +28,13 @@ import * as dataMaintenanceLogModel from "../../data/guanWeiHui/dataMaintenance
/**测试 */
import * as scoreRepairModel from "../../data/fuHuaQi/scoreRepair";
import * as scoreLogRepairModel from "../../data/fuHuaQi/scoreLogRepair";
/**标签 */
import * as labelModel from "../../data/label";
import * as enterpriseLabelLogModel from "../../data/enterprise/enterpriseLabelLog";
import * as fuHuaQiLabelLogModel from "../../data/fuHuaQi/fuHuaQiLabelLog";
import * as customTaskModel from "../../data/fuHuaQi/customTask";
export async function initTable() {
......@@ -60,4 +67,12 @@ export async function initTable() {
scoreRepairModel.initModel();
scoreLogRepairModel.initModel();
labelModel.initModel();
enterpriseLabelLogModel.initModel();
fuHuaQiLabelLogModel.initModel();
customTaskModel.initModel();
}
\ No newline at end of file
......@@ -23,7 +23,6 @@ async function lanuch() {
initOutline();
/**创建http服务 */
httpServer.createServer(systemConfig.port);
// await smsTask();
console.log('This indicates that the server is started successfully.');
}
......
......@@ -4,6 +4,35 @@ import { findFuHuaQiByUSCC } from "../data/fuHuaQi/fuhuaqi";
import { findGuanWeiHuiUserInfoByLoginId } from "../data/guanWeiHui/guanweihui";
import { BizError } from "../util/bizError";
/**
* 管委会小程序中间件
* @param req
* @param res
* @param next
* @returns
*/
export async function checkGuanWeiHuiMobileToken(req, res, next) {
if (!req.headers) req.headers = {};
const reqToken = req.headers.token;
const userId = req.headers.userid || "";
if (!userId) return next(new BizError(ERRORENUM.身份验证失败, `userId:${userId} token:${reqToken}`));
let userInfo = await findGuanWeiHuiUserInfoByLoginId(userId);
if (!userInfo) return next(new BizError(ERRORENUM.非法登录, `userId:${userId} token:${reqToken}`));
/**2023-2-8日需求 登录一次一直有效 */
// if (userInfo.token != reqToken || (new Date().valueOf() - userInfo.tokenMs) > (3600*100*24*7) ) return next(new BizError(ERRORENUM.身份验证过期, `userId:${userId} token:${reqToken}`));
if (userInfo.mobileToken != reqToken ) return next(new BizError(ERRORENUM.身份验证过期, `userId:${userId} token:${reqToken}`));
req.headers.uscc = req.headers.userid;
next();
}
/**
* 中间件 校验孵化器token
* @param req
......
/**
* 管理后台 标签路由
*/
import * as asyncHandler from 'express-async-handler';
import { checkGuanWeiHuiToken } from '../../middleware/user';
import { eccReqParamater } from '../../util/verificationParam';
import * as labelBiz from '../../biz/admin/label';
import * as fuHuaQiLabelBiz from '../../biz/admin/fuHuaQi/fuHuaQiLabel';
import * as enterpriseLabelBiz from '../../biz/admin/enterprise/enterpriseLabel';
export function setRouter(httpServer) {
/** 标签管理*/
httpServer.post('/admin/labels/list',checkGuanWeiHuiToken, asyncHandler(labList));
httpServer.post('/admin/labels/add',checkGuanWeiHuiToken, asyncHandler(createLab));
httpServer.post('/admin/labels/update',checkGuanWeiHuiToken, asyncHandler(updateLab));
httpServer.post('/admin/labels/delete',checkGuanWeiHuiToken, asyncHandler(deleteLab));
httpServer.post('/admin/labels/select',checkGuanWeiHuiToken, asyncHandler(labelSelect));
/** 孵化器标签*/
httpServer.post('/admin/labels/fuhuaqi/list',checkGuanWeiHuiToken, asyncHandler(fuHuaQiLabList));
httpServer.post('/admin/labels/fuhuaqi/add',checkGuanWeiHuiToken, asyncHandler(addFuHuaQiLab));
httpServer.post('/admin/labels/fuhuaqi/log',checkGuanWeiHuiToken, asyncHandler(fuHuaQiLabLog));
httpServer.post('/admin/labels/fuhuaqi/del',checkGuanWeiHuiToken, asyncHandler(delFuHuaQiLab));
/**企业标签 */
httpServer.post('/admin/labels/enterprise/list',checkGuanWeiHuiToken, asyncHandler(enterpriseLabList));
httpServer.post('/admin/labels/enterprise/add',checkGuanWeiHuiToken, asyncHandler(addEnterpriseLab));
httpServer.post('/admin/labels/enterprise/log',checkGuanWeiHuiToken, asyncHandler(enterpriseLabLog));
httpServer.post('/admin/labels/enterprise/del',checkGuanWeiHuiToken, asyncHandler(delEnterpriseLab));
}
async function labList(req, res) {
let reqConf = {
pageNumber:'Number'
};
const NotMustHaveKeys = [];
let {pageNumber} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await labelBiz.labelList(pageNumber);
res.success(result);
}
async function createLab(req, res) {
let reqConf = {
name: 'String',//机构名称
goal: 'Number' //类型
};
const NotMustHaveKeys = [];
let {goal, name} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await labelBiz.addLabel(name, goal);
res.success(result);
}
async function updateLab(req, res) {
let reqConf = {
name: 'String',//机构名称
id: 'String' //id
};
const NotMustHaveKeys = [];
let {id, name} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await labelBiz.updateLabelName(id, name);
res.success(result);
}
async function deleteLab(req, res) {
let reqConf = {
id: 'String'//标识
};
const NotMustHaveKeys = [];
let {id} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await labelBiz.deleteLabel(id);
res.success(result);
}
async function fuHuaQiLabList(req, res) {
let reqConf = {
name: 'String',//标识
labelIdList:'[String]',
pageNumber:'Number'
};
const NotMustHaveKeys = ["name", "pageNumber", "labelIdList"];
let {name, pageNumber, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await fuHuaQiLabelBiz.fuHuaQiLabelList(name, pageNumber, labelIdList);
res.success(result);
}
async function addFuHuaQiLab(req, res) {
let reqConf = {
uscc: 'String',//企业统一信用代码
labelIdList:'[String]',//标签列表
};
const NotMustHaveKeys = [];
let {uscc, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await fuHuaQiLabelBiz.addFuHuaQiLabel(uscc, labelIdList);
res.success(result);
}
async function delFuHuaQiLab(req, res) {
let reqConf = {
uscc: 'String',//企业统一信用代码
labelIdList:'[String]'//标签列表
};
const NotMustHaveKeys = [];
let {uscc, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await fuHuaQiLabelBiz.deleteFuHUaQiLabel(uscc, labelIdList);
res.success(result);
}
async function fuHuaQiLabLog(req, res) {
let reqConf = {
uscc: 'String',//企业统一信用代码
};
const NotMustHaveKeys = [];
let {uscc} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await fuHuaQiLabelBiz.labelLogList(uscc);
res.success(result);
}
async function enterpriseLabList(req, res) {
let reqConf = {
name: 'String',//标识
labelIdList:'[String]',
pageNumber:'Number'
};
const NotMustHaveKeys = ["name", "pageNumber", "labelIdList"];
let {name, pageNumber, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await enterpriseLabelBiz.enterpriseLabelList(name, pageNumber, labelIdList);
res.success(result);
}
async function addEnterpriseLab(req, res) {
let reqConf = {
uscc: 'String',//标识
labelIdList:'[String]'
};
const NotMustHaveKeys = [];
let {uscc, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await enterpriseLabelBiz.addEnterpriseLabel(uscc, labelIdList);
res.success(result);
}
async function delEnterpriseLab(req, res) {
let reqConf = {
uscc: 'String',//标识
labelIdList:'[String]'
};
const NotMustHaveKeys = [];
let {uscc, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await enterpriseLabelBiz.deleteEnterpriseLabel(uscc, labelIdList);
res.success(result);
}
async function enterpriseLabLog(req, res) {
let reqConf = {
uscc: 'String',//标识
};
const NotMustHaveKeys = [];
let {uscc} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await enterpriseLabelBiz.enterpriseLabelLogList(uscc);
res.success(result);
}
async function labelSelect(req, res) {
let reqConf = {
goal:'Number',//1是孵化器 2是企业
};
const NotMustHaveKeys = [];
let {goal} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await enterpriseLabelBiz.getLabelListByGoal(goal);
res.success(result);
}
\ No newline at end of file
......@@ -3,7 +3,7 @@
*/
import * as asyncHandler from 'express-async-handler';
import * as fuHuaQiAdminBiz from '../../biz/admin/fuHuaQi/fuHuaQi';
import * as customTaskBiz from '../../biz/admin/fuHuaQi/customTask';
import * as taskBiz from '../../biz/admin/fuHuaQi/task';
import { checkGuanWeiHuiToken } from '../../middleware/user';
import { eccReqParamater } from '../../util/verificationParam';
......@@ -17,7 +17,12 @@ export function setRouter(httpServer) {
httpServer.post('/admin/data/output/financingtasklist',checkGuanWeiHuiToken, asyncHandler(outPutFinancingTask));
httpServer.post('/admin/data/output/enterprisetasklist',checkGuanWeiHuiToken, asyncHandler(outPutEnterpriseTaskList));
httpServer.post('/admin/data/output/businesstasklist',checkGuanWeiHuiToken, asyncHandler(outPutQBusinessTaskList));
/**自定义任务 */
// httpServer.post('/admin/task/customtask/fuhuaqi/list', checkGuanWeiHuiToken, asyncHandler(customTaskList));
// httpServer.post('/admin/task/customtask/fuhuaqi/add', checkGuanWeiHuiToken, asyncHandler(addCustomTask));
// httpServer.post('/admin/task/customtask/fuhuaqi/recovery', checkGuanWeiHuiToken, asyncHandler(recoveryCustomTask));
// httpServer.post('/admin/task/customtask/fuhuaqi/changecycle', checkGuanWeiHuiToken, asyncHandler(changeCustomTaskCycle));
}
......@@ -123,4 +128,63 @@ async function outPutQBusinessTaskList(req, res) {
let fileName = `孵化器${name}经营数据.xlsx`;
res.success({name:fileName, data:dataList});
}
async function customTaskList(req, res) {
let reqConf = {
fuHuaQiTaskType:'Number',
dataCycle:'Number',
pageNumber:'Number'
};
const NotMustHaveKeys = ["fuHuaQiTaskType", "dataCycle"];
let { fuHuaQiTaskType, dataCycle, pageNumber } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await customTaskBiz.taskList( fuHuaQiTaskType, dataCycle, pageNumber);
res.success(result);
}
async function addCustomTask(req, res) {
let reqConf = {
fuHuaQiTaskType:'Number',
dataCycle:'Number',
startMs:'Number',
endMs:'Number'
};
const NotMustHaveKeys = [];
let { fuHuaQiTaskType, dataCycle, startMs, endMs } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await customTaskBiz.createTask( fuHuaQiTaskType, dataCycle, startMs, endMs);
res.success(result);
}
async function recoveryCustomTask(req, res) {
let reqConf = {
id:'String',
};
const NotMustHaveKeys = [];
let { id } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await customTaskBiz.recovery(id);
res.success(result);
}
async function changeCustomTaskCycle(req, res) {
let reqConf = {
id:'String',
startMs:'Number',
endMs:'Number'
};
const NotMustHaveKeys = [];
let { id, startMs, endMs } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await customTaskBiz.changeCycle(id, startMs, endMs);
res.success(result);
}
\ No newline at end of file
/**
* 小程序端 管委会 用户基础功能路由
*/
import * as asyncHandler from 'express-async-handler';
import * as enterpriseManageBaseBiz from '../../biz/mobileGuanWeiHui/enterpriseManage/base';
import * as fuHuaQiManageBaseBiz from '../../biz/mobileGuanWeiHui/fuHuaQiManage/base';
import * as fuHuaQiManageTaskBiz from '../../biz/mobileGuanWeiHui/fuHuaQiManage/task';
import * as homePageBiz from '../../biz/mobileGuanWeiHui/homePage';
import { eccReqParamater } from '../../util/verificationParam';
import { checkGuanWeiHuiMobileToken } from '../../middleware/user';
export function setRouter(httpServer) {
httpServer.post('/guanweihui/enterprise/list', checkGuanWeiHuiMobileToken, asyncHandler(enterpriseList));
httpServer.post('/guanweihui/enterprise/info', checkGuanWeiHuiMobileToken, asyncHandler(enterpriseInfo));
httpServer.post('/guanweihui/fuhuaqi/list', checkGuanWeiHuiMobileToken, asyncHandler(fuHuaQiList));
httpServer.post('/guanweihui/fuhuaqi/info', checkGuanWeiHuiMobileToken, asyncHandler(fuHuaQiInfo));
httpServer.post('/guanweihui/fuhuaqi/task/tasklist', checkGuanWeiHuiMobileToken, asyncHandler(fuHuaQiTaskList));
httpServer.post('/guanweihui/fuhuaqi/task/monthlist', checkGuanWeiHuiMobileToken, asyncHandler(fuHuaQiTaskMonthsList))
httpServer.post('/guanweihui/homepage/info', checkGuanWeiHuiMobileToken, asyncHandler(homePageTop));
httpServer.post('/guanweihui/homepage/enterpriselabel', checkGuanWeiHuiMobileToken, asyncHandler(getEnterpriseLabel));
httpServer.post('/guanweihui/homepage/fuhuaqilabel', checkGuanWeiHuiMobileToken, asyncHandler(getFuHuaQiLabel));
}
async function enterpriseList(req, res) {
let reqConf = {name:'String', page:'Number', labelId:"String", year:"Number", month:"Number"};
let {labelId, year, month, name, page} = eccReqParamater(reqConf, req.body, ["teams","labelId", "year", "month",]);
let result = await enterpriseManageBaseBiz.enterpriseList(name, page, labelId, year, month);
res.success(result);
}
async function enterpriseInfo(req, res) {
let reqConf = {uscc:'String'};
let {uscc} = eccReqParamater(reqConf, req.body);
let result = await enterpriseManageBaseBiz.enterpriseInfomation(uscc);
res.success(result);
}
async function fuHuaQiList(req, res) {
let reqConf = {labelId:"String", name:'String', page:'Number'};
let {name, page, labelId} = eccReqParamater(reqConf, req.body);
let result = await fuHuaQiManageBaseBiz.fuHuaQiList(name, page, labelId);
res.success(result);
}
async function fuHuaQiInfo(req, res) {
let reqConf = {uscc:'String'};
let {uscc} = eccReqParamater(reqConf, req.body);
let result = await fuHuaQiManageBaseBiz.fuHuaQiInfomation(uscc);
res.success(result);
}
async function fuHuaQiTaskList(req, res) {
let reqConf = {
type:'Number',
year:'Number',
month:'Number',
name:'String',
page:'Number'
};
let {type, year, month, name, page} = eccReqParamater(reqConf, req.body, ["name"]);
let result = await fuHuaQiManageTaskBiz.taskList(type, year, month, name, page);
res.success(result);
}
async function fuHuaQiTaskMonthsList(req, res) {
let result = await fuHuaQiManageTaskBiz.taskMonthsList();
res.success(result);
}
async function homePageTop(req, res) {
let reqConf = {
year:'Number',
month:'Number'
};
let {year, month} = eccReqParamater(reqConf, req.body);
let result = await homePageBiz.stagingHomePageTop(year, month);
res.success(result);
}
async function getEnterpriseLabel(req, res) {
let result = await homePageBiz.enterpriseLabel();
res.success(result);
}
async function getFuHuaQiLabel(req, res) {
let result = await homePageBiz.fuHuaQiLabel();
res.success(result);
}
\ No newline at end of file
/**
* 小程序端 管委会 用户基础功能路由
*/
import * as asyncHandler from 'express-async-handler';
import * as userBiz from '../../biz/mobileGuanWeiHui/user';
import { eccReqParamater } from '../../util/verificationParam';
import { checkGuanWeiHuiMobileToken } from '../../middleware/user';
export function setRouter(httpServer) {
httpServer.post('/guanweihui/login', asyncHandler(login));
httpServer.post('/guanweihui/logout', checkGuanWeiHuiMobileToken, asyncHandler(loginOut));
}
/**
* 管理后台登录
* @param req
* @param res
*/
async function login(req, res) {
let reqConf = {loginId:'String', pwd:'String'};
let {loginId, pwd} = eccReqParamater(reqConf, req.body);
let userInfo = await userBiz.login(loginId, pwd);
res.success(userInfo);
}
/**
* 退出登录
* @param req
* @param res
*/
async function loginOut(req, res) {
const userId = req.headers.userid;
let result = await userBiz.logout(userId);
res.success(result);
}
......@@ -47,6 +47,17 @@ export function setRouter(httpServer) {
httpServer.post('/admin/provide/fuhuaqi/scort/enterpriseoutanin', checkInterior, asyncHandler(enterpriseOutAnInRot) );
httpServer.post('/admin/provide/fuhuaqi/scort/enterpriseoutandinmoverout', checkInterior, asyncHandler(enterpriseOutAndInMoverOutRot) );
/**更新分数 */
httpServer.post('/admin/provide/fuhuaqi/scort/updte2024scort', checkInterior, asyncHandler(updte2024scort) );
httpServer.post('/admin/provide/fuhuaqi/scort/repair2024scort', checkInterior, asyncHandler(repairReset2024Score) );
/**迁出91310115MA1K4TB91Q*/
httpServer.post('/admin/provide/fuhuaqi/output/once/1', checkInterior, asyncHandler(outPutOnceEnterpriseFor91310115MA1K4TB91Q) );
/**第一次企业数据清洗 */
httpServer.post('/admin/provide/enterprise/etl1', checkInterior, asyncHandler(etlfirst) );
}
async function inputEnterprise202304Data(req, res) {
......@@ -185,3 +196,24 @@ async function enterpriseOutAndInMoverOutRot(req, res) {
await provideBiz.enterpriseOutAndInMoverOut();
res.success({isUsccess:true});
}
async function updte2024scort(req, res) {
await provideBiz.updteScortFor2024();
res.success({isUsccess:true});
}
async function repairReset2024Score(req, res) {
await provideBiz.repairResettingScore();
res.success({isUsccess:true});
}
async function outPutOnceEnterpriseFor91310115MA1K4TB91Q(req, res) {
await provideBiz.outPutOnceEnterprise91310115MA1K4TB91Q();
res.success({isUsccess:true});
}
async function etlfirst(req, res) {
await provideBiz.ETL();
res.success({isUsccess:true});
}
\ No newline at end of file
......@@ -3,7 +3,8 @@
*/
import * as asyncHandler from 'express-async-handler';
import { FUHUAQILV, INSTITUTIONALNATURE, FUHUAINDUSTRY, INDUSTRY, FUHUAQILNVESTMENTSTYLE, OPERATIONMODEL, TEAM, DEGREE, FINANCINGROUNDS, INSIDESTATE, VIRTUALCAUSE, MOVEOUTTYPE, MOVEOUTCAUSE, MOVEOUTCAUSECLIENT, MOVEOUTCAUSENOTCLIENT, MOVEOUTTRACE, ENTERPRISETEAM, LISTINGSITUATION, BUSINESSDATATYPE, COOPERATIONMODE, SPECIALITY, TEACHERLV, ZJBEYONDLAYOUTOPERATIONMODE, CYCXFX, CYCSRBJ } from '../config/enum';
import { FUHUAQILV, INSTITUTIONALNATURE, FUHUAINDUSTRY, INDUSTRY, FUHUAQILNVESTMENTSTYLE, OPERATIONMODEL, TEAM, DEGREE, FINANCINGROUNDS, INSIDESTATE, VIRTUALCAUSE, MOVEOUTTYPE, MOVEOUTCAUSECLIENT, MOVEOUTCAUSENOTCLIENT, MOVEOUTTRACE, ENTERPRISETEAM, LISTINGSITUATION, BUSINESSDATATYPE, COOPERATIONMODE, SPECIALITY, TEACHERLV, ZJBEYONDLAYOUTOPERATIONMODE, CYCXFX, CYCSRBJ, FUHUAQICUSTOMTASKTYPE, GUANWEIHUIMANANGENTERPRISELABEL, LABELGOAL, ENTERPRISESYSTEMLABEL, LABELTYPE, FHQSYSTEMLABEL } from '../config/enum';
import { selectLabelList } from '../data/label';
export function setRouter(httpServer) {
httpServer.post('/public/fuhuaqilv', asyncHandler(getFuHuaQiLv));
......@@ -36,7 +37,12 @@ export function setRouter(httpServer) {
/**4.2 */
httpServer.post('/public/cycxfx', asyncHandler(cycxfx) );
httpServer.post('/public/cycsrbj', asyncHandler(cycsrbj) );
/**6.0 */
httpServer.post('/public/fuhuaqicustomtasktype', asyncHandler(fuhuaqiCustomTaskType) );
httpServer.post('/public/enterpriseselectlist', asyncHandler(enterpriseSelectList) );
httpServer.post('/public/admin/enterprilabelselectlist', asyncHandler(enterpriLabelSelectList) );
httpServer.post('/public/fuhuaqiselectlist', asyncHandler(fuHuaQiSelectList) );
}
/**
......@@ -467,3 +473,72 @@ async function getIndustry(req, res) {
res.success({lvList});
}
async function fuhuaqiCustomTaskType(req, res) {
let lvList = [];
for (let key in FUHUAQICUSTOMTASKTYPE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
lvList.push({key, value:FUHUAQICUSTOMTASKTYPE[key]});
}
}
res.success({lvList});
}
/**
* 企业库下拉菜单
* @param req
* @param res
*/
async function enterpriseSelectList(req, res) {
let labelList = await selectLabelList({goal:LABELGOAL.企业, state:false});
let dataList = [];
dataList.push({key:"新注册企业", value:GUANWEIHUIMANANGENTERPRISELABEL.新注册企业});
dataList.push({key:"新迁入企业", value:GUANWEIHUIMANANGENTERPRISELABEL.新迁入企业});
labelList.forEach(info => {
dataList.push({key:info.labelName, value:info.id});
});
res.success({dataList});
}
/**
* 管理后台企业列表下拉框
* @param req
* @param res
*/
async function enterpriLabelSelectList(req, res) {
let labelList = await selectLabelList({goal:LABELGOAL.企业, state:false});
let dataList = [];
labelList.forEach(info => {
dataList.push({key:info.labelName, value:info.id});
});
res.success({dataList});
}
/**
* 孵化器下拉菜单
* @param req
* @param res
*/
async function fuHuaQiSelectList(req, res) {
let labelList = await selectLabelList({goal:LABELGOAL.孵化器, state:false, labelType:LABELTYPE.自定义标签});
let dataList = [];
dataList.push({key:"专业技术平台", value:FHQSYSTEMLABEL.专业技术平台});
labelList.forEach(info => {
dataList.push({key:info.labelName, value:info.id});
});
res.success({dataList});
}
......@@ -37,6 +37,9 @@ import * as testABIRouters from "./mobileClient/testAbi";
import * as pointRouters from "./point";
import * as gptRouters from "./gpt/ai";
import * as adminLabelsRouters from './admin/labels';
import * as guanWeiHuiMobileClientRouters from './guanWeiHuiMobileClient/manange';
import * as guanWeiHuiMobileClientUserRouters from './guanWeiHuiMobileClient/user';
export function setRouter(httpServer){
/**下拉框等公用 路由 */
......@@ -79,4 +82,11 @@ export function setRouter(httpServer){
/**gpt */
gptRouters.setRouter(httpServer);
/**标签系统 */
adminLabelsRouters.setRouter(httpServer);
/**管委会 */
guanWeiHuiMobileClientRouters.setRouter(httpServer);
guanWeiHuiMobileClientUserRouters.setRouter(httpServer);
}
\ No newline at end of file
var baiduMap = require('baidumap');
var bdmap = baiduMap.create({'ak':'QCxLry4y9BjIDRDIsGAerkcHrnrbo55I'});
import { areaList } from "../config/area";
export function changeAddresCode(address, city) {
return new Promise((resolve, reject) => {
var geocoderOption = {address, city};
bdmap.geocoder(geocoderOption, function(err, reuslt){
if (err) {
resolve({error:true});
} else {
try {
let resObj = JSON.parse(reuslt);
resolve(resObj.result.location)
}catch(err) {
resolve({error:true});
}
}
});
});
}
//使用射线法
export function isPointInPolygon(point) {
let isInside = false;
for (let k = 0; k < areaList.length; k++) {
let polygon:any = areaList[k];//单个区域
if(polygon[0].lat != polygon[polygon.length-1].lat || polygon[0].lng != polygon[polygon.length-1].lng) {
polygon.push(polygon[0]);
}
isInside = itemIsPointInPolygon(point, polygon);
if (isInside) break;
}
return isInside;
}
function itemIsPointInPolygon(point,pts){
var N = pts.length; //pts [{lat:xxx,lng:xxx},{lat:xxx,lng:xxx}]
var boundOrVertex = true; //如果点位于多边形的顶点或边上,也算做点在多边形内,直接返回true
var intersectCount = 0;//cross points count of x
var precision = 2e-10; //浮点类型计算时候与0比较时候的容差
var p1, p2;//neighbour bound vertices
var p = point; //point {lat:xxx,lng:xxx}
p1 = pts[0];//left vertex
for(var i = 1; i <= N; ++i){//check all rays
if((p.lat==p1.lat)&&(p.lng==p1.lng)){
return boundOrVertex;//p is an vertex
}
p2 = pts[i % N];//right vertex
if(p.lat < Math.min(p1.lat, p2.lat) || p.lat > Math.max(p1.lat, p2.lat)){//ray is outside of our interests
p1 = p2;
continue;//next ray left point
}
if(p.lat > Math.min(p1.lat, p2.lat) && p.lat < Math.max(p1.lat, p2.lat)){//ray is crossing over by the algorithm (common part of)
if(p.lng <= Math.max(p1.lng, p2.lng)){//x is before of ray
if(p1.lat == p2.lat && p.lng >= Math.min(p1.lng, p2.lng)){//overlies on a horizontal ray
return boundOrVertex;
}
if(p1.lng == p2.lng){//ray is vertical
if(p1.lng == p.lng){//overlies on a vertical ray
return boundOrVertex;
}else{//before ray
++intersectCount;
}
}else{//cross point on the left side
var xinters = (p.lat - p1.lat) * (p2.lng - p1.lng) / (p2.lat - p1.lat) + p1.lng;//cross point of lng
if(Math.abs(p.lng - xinters) < precision){//overlies on a ray
return boundOrVertex;
}
if(p.lng < xinters){//before ray
++intersectCount;
}
}
}
}else{//special case when ray is crossing through the vertex
if(p.lat == p2.lat && p.lng <= p2.lng){//p crossing over p2
var p3 = pts[(i+1) % N]; //next vertex
if(p.lat >= Math.min(p1.lat, p3.lat) && p.lat <= Math.max(p1.lat, p3.lat)){//p.lat lies between p1.lat & p3.lat
++intersectCount;
}else{
intersectCount += 2;
}
}
}
p1 = p2;//next ray left point
}
if(intersectCount % 2 == 0){//偶数在多边形外
return false;
} else { //奇数在多边形内
return true;
}
};
\ No newline at end of file
......@@ -76,6 +76,7 @@ function getExcel(filePath) {
* 初始化原始数据
*/
export async function initBasicData() {
return;
await initFuHuaQiData();
await initEnterprise();
await initMonth();
......
......@@ -180,8 +180,14 @@ export function getRandomId(uscc:string) {
export function changeAddToString(address) {
let str = "";
address.forEach(item => {
address.forEach((item, index) => {
if (index == 0 && item == "上海市") return;
str += item;
});
return str;
}
export function getLabelId() {
return `${md5(`label${new Date().valueOf()}${Math.ceil(Math.ceil(Math.random() * 10000))}${Math.ceil(Math.ceil(Math.random() * 10000))}`)}`
}
\ No newline at end of file
......@@ -84,4 +84,32 @@ export function changeEnumValue(enumConf, value:any) {
});
return str;
}
export function changeEnumManyValue(enumConf, value:any) {
let list = [];
value.forEach((item, index) => {
let subStr = enumConf[item];
/** 特化处理 中文引号在枚举中不适用*/
if (subStr == "_投资__孵化_类型") {
subStr = subStr.replace("__","+");
subStr = subStr.replace("_","“");
subStr = subStr.replace("_","”");
}
if (subStr == "经营成本过高_场地成本或人员成本_" || subStr == "办公空间拓展_无合适办公空间_") {
subStr = subStr.replace("_","(");
subStr = subStr.replace("_",")");
}
if (subStr == "迁出孵化器_仍在张江" || subStr == "迁出张江_仍在浦东" || subStr == "迁出浦东_仍在上海") {
subStr = subStr.replace("_",",");
}
if (subStr == "科技金融_风险投资_" || subStr == "科技金融_其他_" || subStr == "技术专家_法律专家_") {
subStr = subStr.replace("_","(");
subStr = subStr.replace("_",")");
}
list.push(subStr);
});
return list;
}
\ 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