Commit 23b1b9f7 by lixinming

修bug

parent 931bfbd0
......@@ -13,6 +13,7 @@ import * as businessData from "../../../data/enterprise/quarterTask/businessdata
import * as initialTeamData from "../../../data/enterprise/initialTeam";
import moment = require("moment");
import { findEnterpriseNewTeamData } from "../../../data/enterprise/quarterTask/team";
import { changeAddToString } from "../../../tools/system";
/**
......@@ -43,6 +44,8 @@ export async function enterpriseList(createType:number, fuHuaQiUscc:string, indu
if (state != configEnum.INSIDESTATE.全部) {
if (state == configEnum.INSIDESTATE.实体孵化) selectParam.state = configEnum.FUHUASTATE.实体孵化;
if (state == configEnum.INSIDESTATE.虚拟孵化) selectParam.state = configEnum.FUHUASTATE.虚拟孵化;
} else {
selectParam.state = {"$ne":configEnum.FUHUASTATE.迁出};
}
if (createTime) {
let startT = createTime;
......@@ -69,14 +72,26 @@ export async function enterpriseList(createType:number, fuHuaQiUscc:string, indu
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
/** 返回的isCreate字段为字符串 当为导入数据时这里显示为空字符 */
if (info.enterpriseIsInPut) changeData.isCreate = "";
if (!info.taskId || info.enterpriseIsInPut) changeData.isCreate = "底库数据";
else changeData.isCreate = (changeData.isCreate) ? "新注册" : "新迁入";
changeData.state = verificationEnumTools.changeEnumValue(configEnum.FUHUASTATE, changeData.state);
changeData.virtualCause = !changeData.virtualCause ? '-' : verificationEnumTools.changeEnumValue(configEnum.VIRTUALCAUSE, changeData.virtualCause);
if (!changeAddToString(info.oldLogonAddress)) {
changeData.oldLogonAddress = "-";
}
if (!changeAddToString(info.logonAddress)) {
changeData.logonAddress = "-";
}
if (!changeAddToString(info.operatingAddress)) {
changeData.operatingAddress = "-";
}
/**将枚举值转为字符 */
changeData.industry = verificationEnumTools.changeEnumValue(configEnum.INDUSTRY, changeData.industry);
changeData.cycxfx = verificationEnumTools.changeEnumValue(configEnum.CYCXFX, changeData.cycxfx) || "未选择";
changeData.cycsrbj = verificationEnumTools.changeEnumValue(configEnum.CYCSRBJ, changeData.cycsrbj) || "未选择";
let intellectualProperty = changeData.intellectualProperty || {}
changeData.alienPatent = intellectualProperty.alienPatent || 0;
......@@ -159,12 +174,16 @@ export async function outPutEnterpriseData(createType:number, fuHuaQiUscc:string
const TitleList = [
"企业名称", "入库时间", "所属孵化器", "新注册/新迁入", "孵化状态", "虚拟孵化服务模式", "统一信用代码", "行业领域","主营业务",
"注册时间", "首次入孵时间", "迁入时间", "是否自然人控股", "迁入前注册地址",
"注册地址", "经营地址", "租赁面积(平方米)"
"注册地址", "经营地址", "租赁面积(平方米)","创业创新方向","创业创始人背景",
"海外专利", "一类专利","二类专利",
"是否上市" , "高新技术" , "专精特新" , "小巨人培育" , "小巨人"
];//表头顺序 如果这里修改了 下面的keyList也要修改
const KeyList = [
"name", "createTime", "fuhuaqiUscc", "isCreate", "state", "virtualCause", "uscc", "industry", "mainBusiness", "logonTime",
"firstIncubationTime", "timeOfImmigration", "isNaturalPersonHolding", "oldLogonAddress",
"logonAddress", "operatingAddress", "leasedArea"
"name", "createTime", "fuhuaqiUscc", "isCreate", "state", "virtualCause", "uscc", "industry", "mainBusiness",
"logonTime","firstIncubationTime", "timeOfImmigration", "isNaturalPersonHolding", "oldLogonAddress",
"logonAddress", "operatingAddress", "leasedArea","cycxfx","cycsrbj",
"alienPatent", "classIPatent", "secondClassPatent",
"beOnTheMarket", "highTechMs", "zjtxMs", "xjrpyMs", "xjrMs"
];//表头对应的字段顺序
let dataList = [TitleList];
......@@ -174,20 +193,62 @@ export async function outPutEnterpriseData(createType:number, fuHuaQiUscc:string
/**匹配所属孵化器名称 匹配不上时这里显示空字符串 */
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
if (info.enterpriseIsInPut) changeData.isCreate = "";
if (!info.taskId || info.enterpriseIsInPut) changeData.isCreate = "底库数据";
else changeData.isCreate = (changeData.isCreate) ? "新注册" : "新迁入";
if (!changeAddToString(info.oldLogonAddress)) {
changeData.oldLogonAddress = "-";
}
if (!changeAddToString(info.logonAddress)) {
changeData.logonAddress = "-";
}
if (!changeAddToString(info.operatingAddress)) {
changeData.operatingAddress = "-";
}
changeData.cycxfx = verificationEnumTools.changeEnumValue(configEnum.CYCXFX, changeData.cycxfx) || "未选择";
changeData.cycsrbj = verificationEnumTools.changeEnumValue(configEnum.CYCSRBJ, changeData.cycsrbj) || "未选择";
changeData.isNaturalPersonHolding = changeData.isNaturalPersonHolding ? "是" : "否";
/**修改枚举值 */
changeData.industry = verificationEnumTools.changeEnumValue(configEnum.INDUSTRY, changeData.industry);
changeData.state = verificationEnumTools.changeEnumValue(configEnum.FUHUASTATE, changeData.state);
changeData.virtualCause = verificationEnumTools.changeEnumValue(configEnum.VIRTUALCAUSE, changeData.virtualCause);
// dataList.push(changeData);
/**- */
let intellectualProperty = changeData.intellectualProperty || {}
changeData.alienPatent = intellectualProperty.alienPatent || 0;
changeData.classIPatent = intellectualProperty.classIPatent || 0;
changeData.secondClassPatent = intellectualProperty.secondClassPatent || 0;
if (changeData.qualification) {
let onceData = changeData.qualification;
let beOnTheMarket = "无上市";
if (onceData.beOnTheMarket){
beOnTheMarket = verificationEnumTools.changeEnumValue( configEnum.FINANCINGROUNDS, onceData.beOnTheMarket) || "无上市"
}
changeData.beOnTheMarket = beOnTheMarket;
changeData.highTechMs = onceData.highTechMs ? new Date(onceData.highTechMs).getFullYear() : '未认证';//高新技术
changeData.zjtxMs = onceData.zjtxMs ? new Date(onceData.zjtxMs).getFullYear() : '未认证';//专精特新
changeData.xjrpyMs = onceData.xjrpyMs ? new Date(onceData.xjrpyMs).getFullYear() : '未认证';//小巨人培育
changeData.xjrMs = onceData.xjrMs ? new Date(onceData.xjrMs).getFullYear() : '未认证';//小巨人
} else {
changeData.beOnTheMarket = "无上市";//是否上市
changeData.highTechMs = '未认证';//高新技术
changeData.zjtxMs = '未认证';//专精特新
changeData.xjrpyMs = '未认证';//小巨人培育
changeData.xjrMs = '未认证';//小巨人
}
/**根据表头与key的顺序 生成小数组 */
let subList = [];
KeyList.forEach( keyStr => {
subList.push(changeData[keyStr] || '');
let value = changeData[keyStr];
if (value == null || value == undefined) value = "-"
subList.push( value );
});
dataList.push(subList);
});
......@@ -269,7 +330,17 @@ export async function enterpriseMoveOutList(name:string, fuHuaQiUscc:string, ind
changeData.isNaturalPersonHolding = changeData.isNaturalPersonHolding ? "是" : "否";
/**将枚举值转为字符 */
changeData.industry = verificationEnumTools.changeEnumValue(configEnum.INDUSTRY, changeData.industry);
changeData.industry = verificationEnumTools.changeEnumValue(configEnum.INDUSTRY, changeData.industry) || "-";
changeData.moveOutCause = verificationEnumTools.changeEnumValue(configEnum.MOVEOUTCAUSE, changeData.moveOutCause);
changeData.moveOutType = verificationEnumTools.changeEnumValue(configEnum.MOVEOUTTYPE, changeData.moveOutType);
changeData.logonAdd = changeAddToString(changeData.logonAddress) || "-";
changeData.operatingAdd = changeAddToString(changeData.operatingAddress) || "-";
changeData.oldLogonAdd = changeAddToString(changeData.oldLogonAddress) || "-";
changeData.mainBusiness = changeData.mainBusiness || "-";
changeData.leasedArea = 0;
dataList.push(changeData);
});
......@@ -329,7 +400,17 @@ export async function outPutEnterpriseMoveOutList(name:string, fuHuaQiUscc:strin
changeData.isNaturalPersonHolding = changeData.isNaturalPersonHolding ? "是" : "否";
/**将枚举值转为字符 */
changeData.industry = verificationEnumTools.changeEnumValue(configEnum.INDUSTRY, changeData.industry);
changeData.industry = verificationEnumTools.changeEnumValue(configEnum.INDUSTRY, changeData.industry) || "-";
changeData.moveOutCause = verificationEnumTools.changeEnumValue(configEnum.MOVEOUTCAUSE, changeData.moveOutCause);
changeData.moveOutType = verificationEnumTools.changeEnumValue(configEnum.MOVEOUTTYPE, changeData.moveOutType);
changeData.logonAdd = changeAddToString(changeData.logonAddress) || "-";
changeData.operatingAdd = changeAddToString(changeData.operatingAddress) || "-";
changeData.oldLogonAdd = changeAddToString(changeData.oldLogonAddress) || "-";
changeData.mainBusiness = changeData.mainBusiness || "-";
changeData.leasedArea = 0;
let subList = [];
......@@ -364,7 +445,12 @@ export async function getBusinessDataList(name:string, year:number, quarter:numb
let dataCount = await businessData.findBusinessDataCountByParamsToPage(selectParam);
let dataList = [];
dataBaseList.forEach(info => {
let changeData = extractData(splitResultConfig.EnterpriseBusinessDataConfig, info, true);
let changeData:any = extractData(splitResultConfig.EnterpriseBusinessDataConfig, info, true);
if (!info.isUpdate) {
changeData.BI = "-";
changeData.RD = "-";
changeData.TXP = "-";
}
dataList.push(changeData);
});
......@@ -382,7 +468,7 @@ export async function outPutBusinessDataList(name:string, year:number, quarter:n
let fileName = "全部";
/**拼接查询条件 */
let selectParam:any = {state:configEnum.FUHUASTATE.迁出};
let selectParam:any = {state:{"$ne":configEnum.FUHUASTATE.迁出}};
if (type == configEnum.OUTPUTTYPE.当前数据) {
if (name) {
selectParam.name = {"$regex":`${name}`};
......@@ -402,7 +488,12 @@ export async function outPutBusinessDataList(name:string, year:number, quarter:n
let dataList = [titleList];
dataBaseList.forEach(info => {
let changeData = extractData(splitResultConfig.EnterpriseBusinessDataConfig, info, true);
let changeData:any = extractData(splitResultConfig.EnterpriseBusinessDataConfig, info, true);
if (!info.isUpdate) {
changeData.BI = "-";
changeData.RD = "-";
changeData.TXP = "-";
}
let subList = [];
for (let i = 0; i < keyList.length; i++) {
let value = changeData[keyList[i]]
......
......@@ -55,7 +55,7 @@ export async function financingList(monthData:string, fuHuaQiName:string, indust
/** 字段的特化处理 */
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
changeData.industry = changeEnumValue(configEnum.INDUSTRY, info.industry);
changeData.industry = changeEnumValue(configEnum.INDUSTRY, info.industry) || "-";
changeData.financingRounds = changeEnumValue(configEnum.FINANCINGROUNDS, info.financingRounds);
changeData.fuHuaQiInvestmentStyle = changeEnumValue(configEnum.FUHUAQILNVESTMENTSTYLE, info.fuHuaQiInvestmentStyle);
dataList.push(changeData);
......@@ -115,7 +115,7 @@ export async function outPutFinancingList(monthData:string, fuHuaQiName:string,
/**截取返回字段 */
let changeData:any = extractData(splitResultConfig.FinancingListConfig, info, true);
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
changeData.industry = changeEnumValue(configEnum.INDUSTRY, info.industry);
changeData.industry = changeEnumValue(configEnum.INDUSTRY, info.industry) || "-";
changeData.financingRounds = changeEnumValue(configEnum.FINANCINGROUNDS, info.financingRounds);
changeData.fuHuaQiInvestmentStyle = changeEnumValue(configEnum.FUHUAQILNVESTMENTSTYLE, info.fuHuaQiInvestmentStyle);
......
......@@ -62,9 +62,12 @@ export async function fuHuaQiBaseList(lv:number, institutionalNature:number, ind
selectParam.operationName = {"$regex":`${name}`};
}
let enterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam({draftLock:true});//计算孵化器拥有的累计企业数量
let shiTiEnterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam({draftLock:true, state:configEnum.FUHUASTATE.实体孵化});//实体
let xuNiEnterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam({draftLock:true, state:configEnum.FUHUASTATE.虚拟孵化});//虚拟
let startEnterpriseParam:any = {"$or":[{"$and":[{"draftLock":true}, {"taskId":{"$ne":null}}]}, {"$and":[{"draftLock":false}, {"taskId":null}]}]};
let enterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam(startEnterpriseParam);//计算孵化器拥有的累计企业数量
startEnterpriseParam.state = configEnum.FUHUASTATE.实体孵化;
let shiTiEnterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam(startEnterpriseParam);//实体
startEnterpriseParam.state = configEnum.FUHUASTATE.虚拟孵化;
let xuNiEnterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam(startEnterpriseParam);//虚拟
let dataBaseList = await fuhuaqiData.findFuHuaQiListByPage(selectParam, (page-1)*10 );
......@@ -79,9 +82,9 @@ export async function fuHuaQiBaseList(lv:number, institutionalNature:number, ind
changeData.enterpriseTotal = enterpriseMap[info.uscc] || 0; //企业孵化总数(包括历史)
changeData.virtualEnterpriseNum = xuNiEnterpriseMap[info.uscc] || 0;//虚拟企业数量
changeData.shiTiEnterpriseNum = shiTiEnterpriseMap[info.uscc] || 0;//实体企业数量
changeData.zaiFuEnterpriseNum = changeData.shiTiEnterpriseNum + changeData.virtualEnterpriseNum;
let outEnterpriseNum = changeData.enterpriseTotal - changeData.zaiFuEnterpriseNum ;
changeData.outEnterpriseNum = outEnterpriseNum < 0 ? 0 : outEnterpriseNum;
changeData.zaiFuEnterpriseNum = changeData.shiTiEnterpriseNum + changeData.virtualEnterpriseNum;//在孵
let outEnterpriseNum = changeData.enterpriseTotal - changeData.zaiFuEnterpriseNum;
changeData.outEnterpriseNum = outEnterpriseNum < 0 ? 0 : outEnterpriseNum;//迁出
/**备案地址转换 */
......@@ -167,9 +170,12 @@ export async function outPutFuHuaQiBaseData(lv:number, institutionalNature:numbe
}
}
let enterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam({draftLock:true});//计算孵化器拥有的累计企业数量
let shiTiEnterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam({draftLock:true, state:configEnum.FUHUASTATE.实体孵化});//实体
let xuNiEnterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam({draftLock:true, state:configEnum.FUHUASTATE.虚拟孵化});//虚拟
let startEnterpriseParam:any = {"$or":[{"$and":[{"draftLock":true}, {"taskId":{"$ne":null}}]}, {"$and":[{"draftLock":false}, {"taskId":null}]}]};
let enterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam(startEnterpriseParam);//计算孵化器拥有的累计企业数量
startEnterpriseParam.state = configEnum.FUHUASTATE.实体孵化;
let shiTiEnterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam(startEnterpriseParam);//实体
startEnterpriseParam.state = configEnum.FUHUASTATE.虚拟孵化;
let xuNiEnterpriseMap = await enterpriseData.groupFindEnterpriseCountByParam(startEnterpriseParam);//虚拟
let dataBaseList = await fuhuaqiData.findFuHuaQiList(selectParam);
......
......@@ -33,11 +33,14 @@ export async function monthTableList(state:number, year:number, month:number, pa
let dataList = [];
dataBaseList.forEach( info => {
let state = info.draftLock==false?'未填报':'已填报';
let occupancyRate = info.occupancyRate == null || info.occupancyRate == undefined ? '-' : info.occupancyRate;
if (state == "未填报" && occupancyRate != "-") state = "填写未提交";
let onceInfo = {
operationName:operationNameMap[info.fuHuaQiUscc] || '',
state:info.draftLock==false?'未填报':'已填报',
time:`${info.year}${info.month}月`,
occupancyRate:info.occupancyRate || '-'
state,
occupancyRate
};
dataList.push(onceInfo);
});
......@@ -72,11 +75,14 @@ export async function outPutMonthTableList(state:number, year:number, month:numb
let titleList = [ "运营机构名称","填报状态","数据月份","出租率(%)"];
let dataList = [titleList];
dataBaseList.forEach( info => {
let state = info.draftLock==false?'未填报':'已填报';
let occupancyRate = info.occupancyRate == null || info.occupancyRate == undefined ? '-' : info.occupancyRate;
if (state == "未填报" && occupancyRate != "-") state = "填写未提交";
let onceInfo = {
operationName:operationNameMap[info.fuHuaQiUscc],
state:info.draftLock==false?'未填报':'已填报',
operationName:operationNameMap[info.fuHuaQiUscc] || '',
time:`${info.year}${info.month}月`,
occupancyRate:info.occupancyRate || '-'
state,
occupancyRate
};
let subList = [];
......
......@@ -475,3 +475,16 @@ export async function initEnterprisePwd() {
return {}
}
export async function addFinancingIndustry() {
let dataList = await financingData.findFinancingList({});
for (let i = 0; i < dataList.length; i++) {
let {uscc, fuHuaQiUscc, name, taskId} = dataList[i];
let enterInfo = await enterpriseData.findEnterpriseByUscc(uscc);
let finInfo = await financingData.findFinancingInfoByTaskIdAndSucc(taskId, uscc);
finInfo.industry = JSON.parse( JSON.stringify(enterInfo.industry));
finInfo.save();
}
console.log("补全融资领域成功",dataList.length);
return {}
}
\ No newline at end of file
......@@ -3,9 +3,10 @@
* 作者:lxm
*/
import moment = require("moment");
import { GuanWeiHuiChnageFuHuaQiBaseConfig } from "../../../../config/eccParam/admin";
import { OrganizationParamUpdateConfig } from "../../../../config/eccParam/fuHuaQi";
import { FUHUAINDUSTRY, FUHUAQILV, INSTITUTIONALNATURE, OPERATIONMODEL, SCOREWAYS } from "../../../../config/enum";
import { FUHUAINDUSTRY, FUHUAQILV, INDUSTRY, INSTITUTIONALNATURE, OPERATIONMODEL, SCOREWAYS, STATEENUM } from "../../../../config/enum";
import { ERRORENUM } from "../../../../config/errorEnum";
import { StarConfig } from "../../../../config/scoreConfig";
import { findFuHuaQiByUSCC } from "../../../../data/fuHuaQi/fuhuaqi";
......@@ -14,7 +15,7 @@ import * as zjBeyondLayoutData from "../../../../data/fuHuaQi/instituQualify/zjB
import * as scoreData from "../../../../data/fuHuaQi/score";
import { BizError } from "../../../../util/bizError";
import { checkChange } from "../../../../util/piecemeal";
import { eccEnumValue } from "../../../../util/verificationEnum";
import { changeEnumValue, eccEnumValue } from "../../../../util/verificationEnum";
import { eccFormParam } from "../../../../util/verificationParam";
import { updateScore } from "../../../mobileFuHuaQi/fuHuaQi/score";
......@@ -43,11 +44,12 @@ export async function fuHuaQiBaseData(uscc:string) {
operationName:fuHuaQiInfo.operationName,//运营机构名称 不可修改
name,//名称
uscc:fuHuaQiInfo.uscc,//统一信用代码 也是登录账号 不可修改
lv:fuHuaQiInfo.lv,//孵化器级别
identificationTime:fuHuaQiInfo.identificationTime,//认定时间
industry:fuHuaQiInfo.industry,//孵化领域
institutionalNature:fuHuaQiInfo.institutionalNature,//机构性质
isCreatePTP:fuHuaQiInfo.isCreatePTP,//是成立创投基金
lv:changeEnumValue(FUHUAQILV, fuHuaQiInfo.lv),//孵化器级别
identificationTime:moment(fuHuaQiInfo.identificationTime).format("YYYY-MM-DD"),//认定时间
logonTime:moment(fuHuaQiInfo.logonTime).format("YYYY-MM-DD"),//注册时间
industry:changeEnumValue(INDUSTRY, fuHuaQiInfo.industry),//孵化领域
institutionalNature:changeEnumValue(INSTITUTIONALNATURE, fuHuaQiInfo.institutionalNature),//机构性质
isCreatePTP:changeEnumValue(STATEENUM, fuHuaQiInfo.isCreatePTP),//是成立创投基金
liaison:fuHuaQiInfo.liaison,//联系人
personInCharge:fuHuaQiInfo.personInCharge,//负责人
personInChargePhone:fuHuaQiInfo.personInChargePhone,//负责人联系电话
......
......@@ -18,16 +18,28 @@ import { changeEnumValue } from "../../../../util/verificationEnum";
* @param uscc
*/
export async function fuHuaQiOperateStats(uscc:string, year:number) {
let enterpriseTotal = await findEnterpriseCountByFuHuaQiUscc(uscc); //非迁出企业总数
let virtualEnterpriseNum = await findEnterpriseCount({fuHuaQiUscc:uscc, state:FUHUASTATE.虚拟孵化, draftLock:true}) || 0; //虚拟孵化
let monthTableDataList = await findMonthTableList({uscc, year});
let selectParam = {
state : {"$ne":FUHUASTATE.迁出},
fuHuaQiUscc : uscc,
"$or":[{"$and":[{"draftLock":true}, {"taskId":{"$ne":null}}]}, {"$and":[{"draftLock":false}, {"taskId":null}]}]//未提交的企业不能查看
};
let enterpriseTotal = await findEnterpriseCount(selectParam); //非迁出企业总数
let xuniSelectParam = {
state : FUHUASTATE.虚拟孵化,
fuHuaQiUscc : uscc,
"$or":[{"$and":[{"draftLock":true}, {"taskId":{"$ne":null}}]}, {"$and":[{"draftLock":false}, {"taskId":null}]}]//未提交的企业不能查看
};
let virtualEnterpriseNum = await findEnterpriseCount(xuniSelectParam); //虚拟孵化
let monthTableDataList = await findMonthTableList({fuHuaQiUscc:uscc, year});
monthTableDataList.sort((a, b) => {return a.month - b.month});
let czlbhqs = {monthList:[], dataList:[]};
monthTableDataList.forEach(info => {
let {month, occupancyRate} = info;
czlbhqs.monthList.push(month);
let {month, occupancyRate, draftLock} = info;
czlbhqs.monthList.push(`${month}月`);
if (!draftLock) occupancyRate = "未填报";
czlbhqs.dataList.push(occupancyRate);
});
......@@ -64,30 +76,27 @@ export async function fuHuaQiOperateStats(uscc:string, year:number) {
* @param uscc
*/
async function getFuHuaQiOwnEnterpriseCountStats(uscc:string, year:number) {
let dataStartMs = new Date().valueOf();
let dataEndMs = new Date().valueOf();
if (year!= new Date().getFullYear()) {
dataStartMs = new Date(year+"-01-01 00:00:00").valueOf();
dataEndMs = new Date((year+1)+"-01-01 00:00:00").valueOf();
} else {
dataStartMs = new Date(moment().subtract(12, 'months').format("YYYY-MM")+"-01 00:00:00").valueOf();
}
let dataStartMs = new Date(moment().subtract(6, 'months').format("YYYY-MM")+"-01 00:00:00").valueOf();
let param = {
uid:uscc,
ct:{"$gt":dataStartMs, "$lt":dataEndMs},
ct:{"$gt":dataStartMs},
};
let pointDataList = await getPointDataByParam(POINTTYPEENUM.孵化器, FUHUAQINODEENUM.企业状态变化, param);
let distinctMap = {}; //{ month:{ct:xxx, dataInfo:{} } }
let distinctMap = {}; //{ month:{ct:xxx, pointInfo:{} } }
for (let i = 1; i <= 6; i++) {
let key = moment().subtract(i, 'months').format("YYYY-MM");
distinctMap[key]={ct:0,pointInfo:{}};
}
/**获取每个月的最后一次改动 */
pointDataList.forEach(info => {
let {p1, ct } = info;
let pointInfo = JSON.parse(p1);
let dataMonth = new Date(ct).getMonth() + 1;
let dataMonth = moment(ct).format("YYYY-MM");
if (!distinctMap[dataMonth]) distinctMap[dataMonth] = {ct, pointInfo};
if (!distinctMap[dataMonth]) console.log("数据异常 不符合范围之内的值 检查点1003");
else if(distinctMap[dataMonth].ct < ct) distinctMap[dataMonth] = {ct, pointInfo};
});
......@@ -104,13 +113,15 @@ async function getFuHuaQiOwnEnterpriseCountStats(uscc:string, year:number) {
let monthData = [];
dataList.forEach(info => {
let {month, xn, st} = info;
monthData.push(month);
monthData.push(`${month}月`);
xnData.push(xn);
stData.push(st);
});
return {xnData, stData, monthData}
}
// async function newGetFuHuaQiEnterpriseCountStats(uscc:string, year:number) {}
/**
* 毕业企业数量变化趋势
......@@ -119,44 +130,49 @@ async function getFuHuaQiOwnEnterpriseCountStats(uscc:string, year:number) {
* @returns
*/
async function getFuHuaQiOwnEnterpriseGraduateCountStats(uscc:string, year:number) {
let dataStartMs = new Date().valueOf();
let dataEndMs = new Date().valueOf();
if (year!= new Date().getFullYear()) {
dataStartMs = new Date(year+"-01-01 00:00:00").valueOf();
dataEndMs = new Date((year+1)+"-01-01 00:00:00").valueOf();
} else {
dataStartMs = new Date(moment().subtract(12, 'months').format("YYYY-MM")+"-01 00:00:00").valueOf();
}
let dataStartMs = new Date(moment().subtract(6, 'months').format("YYYY-MM")+"-01 00:00:00").valueOf();
let param = {
uid:uscc,
ct:{"$gt":dataStartMs, "$lt":dataEndMs},
ct:{"$gt":dataStartMs},
};
let pointDataList = await getPointDataByParam(POINTTYPEENUM.孵化器, FUHUAQINODEENUM.我的企业_孵化状态, param);
let monthDataMap = {};
for (let i = 1; i <= 6; i++) {
let key = moment().subtract(i, 'months').format("YYYY-MM");
monthDataMap[key]={ct:0, month:key, count:0, graduation:0};
}
pointDataList.forEach(info => {
let { p2, ct } = info;
let { state, moveOutType } = JSON.parse(p2);
let { state, moveOutType, graduation } = JSON.parse(p2);
let dataMonth = new Date(ct).getMonth() + 1;
let dataMonth = moment(ct).format("YYYY-MM");
if (state == FUHUASTATE.迁出 && moveOutType == MOVEOUTTYPE.毕业迁出) {
if (!monthDataMap[dataMonth]) monthDataMap[dataMonth] = {ct, month:dataMonth, count:0}
if (!monthDataMap[dataMonth]) {
console.log("数据异常 不符合范围之内的值 检查点1002");
} else {
monthDataMap[dataMonth].count += 1;
monthDataMap[dataMonth].graduation = Math.max(graduation||0, monthDataMap[dataMonth].graduation);
monthDataMap[dataMonth].ct = ct;
monthDataMap[dataMonth].month = dataMonth;
}
}
});
let dataList = Object.values(monthDataMap);
let monthData = [];
let graduateData = [];
let nbyData = [];
dataList.forEach(info => {
let {month, count}:any = info;
let {month, count, graduation}:any = info;
monthData.push(month);
graduateData.push(count)
graduateData.push(count);
nbyData.push(graduation);
});
//todo 这缺一个 拟毕业
return {monthData, graduateData};
return {monthData, graduateData, nbyData};
}
async function getEnterpriseIndustry(uscc:string, year:number) {
......
......@@ -3,6 +3,7 @@
* 作者:lxm
*/
import moment = require("moment");
import { findTeamDataByParams } from "../../../../data/enterprise/quarterTask/team";
import * as i18nRegisterData from "../../../../data/fuHuaQi/instituQualify/i18nRegister";
import * as icrData from "../../../../data/fuHuaQi/instituQualify/icr";
......@@ -14,62 +15,99 @@ export async function getValueStats(uscc) {
let i18nCount = await i18nRegisterData.getCount(uscc);//国际合作/大企业合作机构数
let icrCount = await icrData.getCount(uscc); //大学/科研院所合作机构
let businessData = await findBusinessDataByParam({fuHuaQiUscc:uscc, year:ThisYear });
businessData.sort((a, b)=>{return a.quarter - b.quarter});
/**季度任务查询条件 */
let queryDataMap = { };//格式 {"YYYY-季度":{TP:0, member:0, index:1}},
let quarterTaskParam:any = {fuHuaQiUscc:uscc};
let {declarationYear, declarationQuarter} = getDeclarationTime();
if (ThisYear != declarationYear) {
quarterTaskParam.year = declarationYear;
for (let i = 1; i <= 4; i++ ) {
let key = `${declarationYear}-Q${i}`;
queryDataMap[key] = {key, TP:0, member:0,index:i};
}
} else {
quarterTaskParam["$or"] = [
{year:ThisYear},
{year:declarationYear, declarationQuarter:{"$gte":declarationQuarter+1}}
];
for (let i = 4; i >= (declarationQuarter+1); i--) {
let key = `${declarationYear}-Q${i}`;
queryDataMap[key] = {key, TP:0, member:0,index:4-i};
}
for (let i =1; i < (declarationQuarter+1); i++) {
let key = `${ThisYear}-Q${i}`;
queryDataMap[key] = {key, TP:0, member:0,index:4+i};
}
}
let queryDataMap = {
1:{TP:0, member:0},
2:{TP:0, member:0},
3:{TP:0, member:0},
4:{TP:0, member:0}
};
let businessData = await findBusinessDataByParam(quarterTaskParam);
businessData.forEach(info => {
let {quarter, TP} = info;
queryDataMap[quarter].TP = TP;
let {quarter,year, TP} = info;
queryDataMap[`${year}-Q${quarter}`].TP = TP;
});
let teamData = await findTeamDataByParams({fuHuaQiUscc:uscc, year:ThisYear });
let teamData = await findTeamDataByParams(quarterTaskParam);
teamData.forEach(info => {
let { quarter } = info;
let { year, quarter } = info;
let quarterDataCount = 0;
quarterDataCount += info.doctor || 0;//博士
quarterDataCount += info.master || 0;//硕士
quarterDataCount += info.undergraduate || 0;//本科
quarterDataCount += info.juniorCollege || 0;//专科
quarterDataCount += info.other || 0;//其他
queryDataMap[quarter].member += quarterDataCount;
queryDataMap[`${year}-Q${quarter}`].member += quarterDataCount;
});
let quaryDataRank = Object.values(queryDataMap).sort((a:any, b:any) => {return a.index - b.index});
let tpList = [];
let jyrsqsList = [];
let queryList = [];
for (let key in queryDataMap) {
queryList.push(parseInt(key));
tpList.push( queryDataMap[key].TP );
jyrsqsList.push( queryDataMap[key].member );
}
quaryDataRank.forEach((info:any) => {
queryList.push(info.key);
tpList.push( info.TP );
jyrsqsList.push( info.member );
});
/**融资企业数量趋势 */
let startTime = new Date(`${ThisYear}-01-01 00:00:00`).valueOf();
let endTime = new Date(`${ThisYear+1}-01-01 00:00:00`).valueOf();
let financingData = await findFinancingList({fuHuaQiUscc:uscc, timeToObtainInvestment:{"$gt":startTime, "$lt":endTime} });
let startTime = new Date(moment().subtract(6, 'months').format("YYYY-MM")+"-01 00:00:00").valueOf();
let financingData = await findFinancingList({fuHuaQiUscc:uscc, timeToObtainInvestment:{"$gt":startTime} });
let financingMap = {};//结构 {"YYYY-MM":{distinctKey:0,} }
for (let i = 1; i <= 6; i++) {
let key = moment().subtract(i, 'months').format("YYYY-MM");
let ms = moment().subtract(i, 'months').valueOf();
financingMap[key]={ms, key, data:{}};
}
let financingMap = {};//结构 {month:{distinctKey:0,} }
financingData.forEach(info => {
let { uscc, investmentInstitutionsName, timeToObtainInvestment } = info;
let distinctKey = uscc + investmentInstitutionsName + timeToObtainInvestment;
let month = new Date(timeToObtainInvestment).getMonth() + 1;
if ( !financingMap[month] ) financingMap[month] = {};
financingMap[month][distinctKey] = 1;
let month = moment(timeToObtainInvestment).format("YYYY-MM");
if (!financingMap[month]) console.log("数据异常 不符合范围之内的值 检查点1001");
financingMap[month].data[distinctKey] = 1;
});
let financingRankList = Object.values(financingMap).sort((a:any, b:any) => {return a.ms - b.ms});
let rzqyslqs = [];
for (let key in financingMap) {
let count = Object.keys(financingMap[key]);
financingRankList.forEach((info:any) => {
let {data, ms, key} = info;
let count = Object.keys(data || {}).length;
rzqyslqs.push({
month:parseInt(key),
month:key,
count
});
}
});
return { jyrsqs:{jyrsqsList, queryList}, i18nCount, icrCount, rzqyslqs, tpInfo:{tpList, queryList} };
}
function getDeclarationTime() {
let thisYear = new Date().getFullYear();
let thisQuarter = moment().quarter();//当月填报季度
if ( (thisQuarter - 1) < 1 ) {
thisYear = moment().subtract(1, 'years').year();
thisQuarter = 4;
} else thisQuarter = thisQuarter - 1;
return {declarationYear:thisYear, declarationQuarter:thisQuarter};
}
\ No newline at end of file
......@@ -18,9 +18,9 @@ export async function enterpriseBaseData() {
let businessData = await statsBusinessDataByParam();
let businessDataList = [ //经营数据
{key:"营业收入", count:businessData.BICount}, //营业收入
{key:"研发投入", count:businessData.RDCount}, //研发投入
{key:"纳税", count:businessData.TXPCount} //纳税
{key:"营业收入", count:Math.round(businessData.BICount/10000)}, //营业收入
{key:"研发投入", count:Math.round(businessData.RDCount/10000)}, //研发投入
{key:"纳税", count:Math.round(businessData.TXPCount/10000)} //纳税
];
let intellectualPropertyData = await statsIntellectualPropertyData();
......@@ -34,8 +34,8 @@ export async function enterpriseBaseData() {
let gjylcrCount = 0;//国际一流人才
let initalTeamsList = await statsEnterpriseInitalTeamsType();
initalTeamsList.forEach(item => {
if (item._id == ENTERPRISETEAM.国内一流人才) gnylcrCount = item.count;
else if (item._id == ENTERPRISETEAM.国际一流人才) gjylcrCount = item.count;
if (item._id == ENTERPRISETEAM.国内一流人才) gnylcrCount += item.count;
else if (item._id == ENTERPRISETEAM.国际一流人才) gjylcrCount += item.count;
});
let gnylrczb = Math.round( gjylcrCount/(gjylcrCount + gnylcrCount) *100)/100
let gjylrczb = 1 - gnylrczb;
......@@ -55,8 +55,9 @@ export async function enterpriseBaseData() {
financingStatsList.sort((a, b) => {return a.ms - b.ms});
let financingTrendList = [];//融资趋势
financingStatsList.forEach(info => {
let month = new Date(info.ms).getMonth() + 1;
financingTrendList.push({
month:info.month,
key:month+'月',
count:info.count
});
});
......
......@@ -34,7 +34,8 @@ export async function fuHuaQiWarningOverView() {
lowMonthData.forEach(info => {
let { fuHuaQiUscc, occupancyRate } = info;
let name = fuHuaQiNameMap[fuHuaQiUscc];
lowOccupancyRate.push({name, occupancyRate, uscc:fuHuaQiUscc});
let value = occupancyRate==null || occupancyRate == undefined ? "未填报" : occupancyRate;
lowOccupancyRate.push({name, value, uscc:fuHuaQiUscc});
});
......@@ -53,9 +54,9 @@ export async function fuHuaQiWarningOverView() {
for (let key in taskReportingMap ) {
let {submit, notSubmit} = taskReportingMap[key];
let itemReportingRate = Math.round(submit/(submit+notSubmit) *100 );
rankList.push({name:fuHuaQiNameMap[key], rate:itemReportingRate, uscc:key });
rankList.push({name:fuHuaQiNameMap[key], value:itemReportingRate, uscc:key });
}
rankList.sort( (a, b) => {return a.itemReportingRate - b.itemReportingRate});
rankList.sort( (a, b) => {return a.value - b.value});
let lowReportingRate = rankList.slice(0,5)//低填报率
......@@ -175,7 +176,7 @@ export async function fuHuaQiTPAnomaly(page:number) {
let name = fuHuaQiNameMap[fuHuaQiUscc];
let bcos = "";
if (!draftLock) bcos = "上季度未提交";
else bcos = "提交数据为0"
else bcos = "上季度提交数据为0"
dataMap[fuHuaQiUscc] = {name, TP, bcos};
});
if ((declarationQuarter - 1) == 0) {
......@@ -214,7 +215,7 @@ async function getFuHuaQiTPAnomalyCount(fuHuaQiNameMap) {
let name = fuHuaQiNameMap[fuHuaQiUscc];
let bcos = "";
if (!draftLock) bcos = "上季度未提交";
else bcos = "提交数据为0"
else bcos = "上季度提交数据为0"
dataMap[fuHuaQiUscc] = {name, TP, bcos};
});
if ((declarationQuarter - 1) == 0) {
......
......@@ -33,7 +33,6 @@ export async function fuHuaQiBaseData() {
if (!institutionalNatureMap[institutionalStr]) institutionalNatureMap[institutionalStr] = {count:0, key:institutionalStr};
institutionalNatureMap[institutionalStr].count += 1;
logonTime = new Date('2023-02-01 00:11:00')
if (logonTime) {
let ago = moment(logonTime).fromNow(true);
if (ago.indexOf('months') > -1) {
......@@ -86,10 +85,10 @@ export async function fuHuaQiBaseData() {
async function czlqs() {
let dataList = [];
for (let i = 0; i < 6; i++) {
let dataMonth = moment().subtract(6, 'months').month() +1
let dataYear = moment().subtract(6, 'months').year();
let ms = moment().subtract(6, 'months').valueOf();
for (let i = 1; i <= 6; i++) {
let dataMonth = moment().subtract(i, 'months').month() +1
let dataYear = moment().subtract(i, 'months').year();
let ms = moment().subtract(i, 'months').valueOf();
let dataSum = await statsFuHuaQiMonthDataCount(dataYear, dataMonth);
let dataCount = await findMonthTableListCount({year:dataYear, month:dataMonth, draftLock:true});
......
......@@ -9,6 +9,9 @@ import * as sysTools from "../../tools/system";
import { BizError } from "../../util/bizError";
import * as enterpriseData from "../../data/enterprise/enterprise";
import moment = require("moment");
import * as codeData from "../../data/fuHuaQi/code";
import { sendChangePwdCode } from "../sms";
import { CODETYPE } from "../../config/enum";
/**
* 企业登录
......@@ -71,7 +74,6 @@ export async function firstChangePwd(uscc:string, pwd:string, confirmPwd:string)
/**
* 找回密码
* todo 有问题, 企业没有负责人
* @param phone 负责人电话号码 如果和库里的对不上 就要报错
* @param uscc 企业统一信用代码
* @param code 验证码
......@@ -79,35 +81,82 @@ export async function firstChangePwd(uscc:string, pwd:string, confirmPwd:string)
* @param confirmPwd 确认密码
*/
export async function resettingPwd(phone:string, uscc:string, code:string, pwd:string, confirmPwd:string) {
// if (!sysTools.eccUscc(uscc)) throw new BizError(ERRORENUM.统一社会信用代码不合法, '重置密码时');
// let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
// if (!enterpriseInfo) throw new BizError(ERRORENUM.账号不存在, `重置密码时 uscc:${uscc}`);
// if ( phone != fuHuaQiInfo.personInChargePhone) throw new BizError(ERRORENUM.号码与主体不一致, '修改密码发验证码时');
// if (pwd != confirmPwd) throw new BizError(ERRORENUM.密码不一致);
// if (pwd.search(/^[A-Za-z0-9]{6,18}$/) < 0) throw new BizError(ERRORENUM.密码只能由6至18位字符和数字组成);
if (!sysTools.eccUscc(uscc)) throw new BizError(ERRORENUM.统一社会信用代码不合法, '重置密码时');
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo) throw new BizError(ERRORENUM.账号不存在, `重置密码时 uscc:${uscc}`);
if (!enterpriseInfo.securePhon) throw new BizError(ERRORENUM.未填安全手机号无法修改密码, '企业-修改密码发验证码时-没有安全手机号');
if ( phone != enterpriseInfo.securePhon) throw new BizError(ERRORENUM.号码与主体不一致, '企业-修改密码发验证码时');
if (pwd != confirmPwd) throw new BizError(ERRORENUM.密码不一致);
if (pwd.search(/^[A-Za-z0-9]{6,18}$/) < 0) throw new BizError(ERRORENUM.密码只能由618位字符和数字组成);
let todayMs = sysTools.getTodayMs();
let codeList = await codeData.findTodayCodeByUscc(uscc, todayMs);
let now = new Date().valueOf();
let codeId = '';
let msg = ERRORENUM.验证码错误;
codeList.forEach(info => {
if (info.code == code) {
if (info.isUse) msg = ERRORENUM.验证码失效;
else if ( (now - info.sendMs) > (30 * 60 * 1000) ) msg = ERRORENUM.验证码过期
else codeId = info.id;
}
});
// let todayMs = sysTools.getTodayMs();
// let codeList = await codeData.findTodayCodeByUscc(uscc, todayMs);
if (!codeId) throw new BizError(msg, `uscc:${uscc}重置密码的code:${code}`);
// let now = new Date().valueOf();
await codeData.updateCodeState(codeId);
// let codeId = '';
// let msg = ERRORENUM.验证码错误;
// codeList.forEach(info => {
// if (info.code == code) {
// if (info.isUse) msg = ERRORENUM.验证码失效;
// else if ( (now - info.sendMs) > (30 * 60 * 1000) ) msg = ERRORENUM.验证码过期
// else codeId = info.id;
// }
// });
enterpriseInfo.pwd = sysTools.getPwdMd5(uscc, sysTools.md5PwdStr(pwd));
// if (!codeId) throw new BizError(msg, `uscc:${uscc}重置密码的code:${code}`);
await enterpriseInfo.save();
// await codeData.updateCodeState(codeId);
return {isSuccess:true};
}
// fuHuaQiInfo.pwd = sysTools.getPwdMd5(uscc, sysTools.md5PwdStr(pwd));
// await fuHuaQiInfo.save();
/**
* 发送修改密码的短信验证码
* @param uscc 企业统一信用代码
*/
export async function changePwdSendCode(uscc:string, phone:string) {
if (!sysTools.eccUscc(uscc)) throw new BizError(ERRORENUM.统一社会信用代码不合法, '重置密码时');
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo) throw new BizError(ERRORENUM.账号不存在, `企业-发送验证码时 uscc:${uscc}`);
if (!enterpriseInfo.securePhon) throw new BizError(ERRORENUM.未填安全手机号无法修改密码, '企业-修改密码发验证码时-没有安全手机号');
if ( phone != enterpriseInfo.securePhon) throw new BizError(ERRORENUM.号码与主体不一致, '企业-修改密码发验证码时');
let todayMs = sysTools.getTodayMs();
let todayCodeList = await codeData.findTodayCodeByUscc(uscc, todayMs);
if (todayCodeList.length >= 4) throw new BizError(ERRORENUM.发送验证码次数超限制, `${uscc} 修改密码发送验证码次数超限制4`);
let sendMs = todayMs;
todayCodeList.forEach(info => {
sendMs = Math.max(sendMs, info.sendMs);
});
let now = new Date().valueOf();
if ((now - sendMs) <= (60 * 1000) ) throw new BizError(ERRORENUM.发送验证码频率过快, `${uscc}`);
let codeId = sysTools.getSMSCodeId(uscc, todayCodeList.length);
let code = sysTools.getSMSCode();
await sendChangePwdCode(phone, code);
now = new Date().valueOf();
await codeData.createCode(uscc, codeId, code, CODETYPE.修改密码, now);
return {
isSuccess:true,
sendMs:now
};
}
export async function getFirstUpdatePwdState(uscc:string) {
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
// return {isSuccess:true};
return {firstLogin : !enterpriseInfo.firstLoginIsChangePwd,};
}
\ No newline at end of file
......@@ -152,9 +152,9 @@ export async function updatePhysicalInfo(fuHuaQiUscc:string, uscc:string, leased
if (changeState) {
/**企业状态改变埋点 */
let xn = await enterpriseData.findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.虚拟孵化, draftLock:true}) || 0; //虚拟孵化
let st = await enterpriseData.findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.实体孵化, draftLock:true}) || 0; //实体孵化
let qc = await enterpriseData.findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.迁出, draftLock:true}) || 0; //迁出孵化
let xn = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.虚拟孵化}) || 0; //虚拟孵化
let st = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.实体孵化}) || 0; //实体孵化
let qc = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.迁出}) || 0; //迁出孵化
addPoint(POINTTYPEENUM.孵化器, fuHuaQiUscc, FUHUAQINODEENUM.企业状态变化, {xn, st, qc}, {});
}
......@@ -181,6 +181,11 @@ export async function updateVirtualInfo(fuHuaQiUscc:string, uscc:string, virtual
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo) throw new BizError(ERRORENUM.该企业不存在, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
/**埋点 -新值 */
let oldData = {
leasedArea: enterpriseInfo.leasedArea || 0,
state: enterpriseInfo.state,
};
if (enterpriseInfo.fuHuaQiUscc != fuHuaQiUscc) throw new BizError(ERRORENUM.无法操作其他孵化器的企业, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
......@@ -195,11 +200,7 @@ export async function updateVirtualInfo(fuHuaQiUscc:string, uscc:string, virtual
enterpriseInfo.leasedArea = 0;//租赁面积
enterpriseInfo.moveOutTime = 0;
/**埋点 */
let oldData = {
leasedArea: enterpriseInfo.leasedArea || 0,
state: enterpriseInfo.state,
};
/**埋点 -新值 */
let newData = {
leasedArea : 0,
state: configEnum.FUHUASTATE.虚拟孵化,
......@@ -210,9 +211,9 @@ export async function updateVirtualInfo(fuHuaQiUscc:string, uscc:string, virtual
await enterpriseInfo.save();
/**企业状态改变埋点 */
let xn = await enterpriseData.findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.虚拟孵化, draftLock:true}) || 0; //虚拟孵化
let st = await enterpriseData.findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.实体孵化, draftLock:true}) || 0; //实体孵化
let qc = await enterpriseData.findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.迁出, draftLock:true}) || 0; //迁出孵化
let xn = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.虚拟孵化}) || 0; //虚拟孵化
let st = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.实体孵化}) || 0; //实体孵化
let qc = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.迁出}) || 0; //迁出孵化
addPoint(POINTTYPEENUM.孵化器, fuHuaQiUscc, FUHUAQINODEENUM.企业状态变化, {xn, st, qc}, {});
return {isUsccess:true};
......@@ -256,6 +257,14 @@ export async function updateMoveOutInfo(fuHuaQiUscc:string, uscc:string, moveOu
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo) throw new BizError(ERRORENUM.该企业不存在, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
/**埋点 -旧值 */
let oldData = {
leasedArea: enterpriseInfo.leasedArea || 0,
state: enterpriseInfo.state,
virtualCause : null,//虚拟孵化模式
virtualCauseDes : "",//虚拟孵化原因
};
if (enterpriseInfo.fuHuaQiUscc != fuHuaQiUscc) throw new BizError(ERRORENUM.无法操作其他孵化器的企业, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
enterpriseInfo.moveOutType = moveOutType;
......@@ -270,13 +279,7 @@ export async function updateMoveOutInfo(fuHuaQiUscc:string, uscc:string, moveOu
enterpriseInfo.virtualCauseDes = "";//虚拟孵化原因
enterpriseInfo.leasedArea = 0;//租赁面积
/**埋点 */
let oldData = {
leasedArea: enterpriseInfo.leasedArea || 0,
state: enterpriseInfo.state,
virtualCause : null,//虚拟孵化模式
virtualCauseDes : "",//虚拟孵化原因
};
/**埋点 -新值*/
let newData = {
leasedArea : 0,
state: configEnum.FUHUASTATE.迁出,
......@@ -284,15 +287,17 @@ export async function updateMoveOutInfo(fuHuaQiUscc:string, uscc:string, moveOu
moveOutCause: moveOutCause,
moveOutTrace: moveOutTrace,
moveOutTime: new Date().valueOf(),
graduation: await enterpriseData.findEnterpriseCount({ fuHuaQiUscc, graduation:true })
};
addPoint(POINTTYPEENUM.孵化器, fuHuaQiUscc, FUHUAQINODEENUM.我的企业_孵化状态, oldData, newData );
await enterpriseInfo.save();
/**企业状态改变埋点 */
let xn = await enterpriseData.findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.虚拟孵化, draftLock:true}) || 0; //虚拟孵化
let st = await enterpriseData.findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.实体孵化, draftLock:true}) || 0; //实体孵化
let qc = await enterpriseData.findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.迁出, draftLock:true}) || 0; //迁出孵化
let xn = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.虚拟孵化}) || 0; //虚拟孵化
let st = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.实体孵化}) || 0; //实体孵化
let qc = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.迁出}) || 0; //迁出孵化
addPoint(POINTTYPEENUM.孵化器, fuHuaQiUscc, FUHUAQINODEENUM.企业状态变化, {xn, st, qc}, {});
return {isUsccess:true};
......@@ -404,9 +409,9 @@ export async function replenishMyEnterpriseInPutInfo(fuHuaQiUscc:string, param)
addPoint(POINTTYPEENUM.孵化器, fuHuaQiUscc, FUHUAQINODEENUM.我的企业_补录企业, param.uscc, '新迁入' );
/**企业状态改变埋点 */
let xn = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.虚拟孵化, draftLock:true}) || 0; //虚拟孵化
let st = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.实体孵化, draftLock:true}) || 0; //实体孵化
let qc = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.迁出, draftLock:true}) || 0; //迁出孵化
let xn = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.虚拟孵化}) || 0; //虚拟孵化
let st = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.实体孵化}) || 0; //实体孵化
let qc = await enterpriseData.findEnterpriseCount({fuHuaQiUscc, state:configEnum.FUHUASTATE.迁出}) || 0; //迁出孵化
addPoint(POINTTYPEENUM.孵化器, fuHuaQiUscc, FUHUAQINODEENUM.企业状态变化, {xn, st, qc}, {});
return {isSuccess:true};
......
......@@ -327,3 +327,15 @@ export async function resettingPwd(phone:string, uscc:string, code:string, pwd:s
return {isSuccess:true};
}
/**
* 获取孵化器首次登录状态
* @param uscc
* @returns
*/
export async function getFirstUpdatePwdState(uscc:string) {
let fuHuaQiInfo = await fuhuaqiData.findFuHuaQiByUSCC(uscc);
return {firstLogin:!fuHuaQiInfo.firstLoginIsChangePwd};
}
\ No newline at end of file
......@@ -103,10 +103,10 @@ export async function getPointDataByParam(type:number, pointId:number, param) {
let url = 'http://localhost:7078/point/query';
let result:any = await post(url, {type, pointId, param}, {sign:Sign});
if (!result.success || result.countDocuments != 200) {
if (!result.success || result.code != 200) {
logError(url, "请求失败", JSON.stringify(result) );
console.log(url, "请求失败", JSON.stringify(result));
return [];
}
return result.data || [];
return result.data.dataList || [];
}
\ No newline at end of file
......@@ -70,7 +70,8 @@ export enum ERRORENUM {
系统错误请联系管理员,
企业审批中请下个自然月登录,
缺少关键参数导致修改失败,
不合规操作
不合规操作,
未填安全手机号无法修改密码
}
export enum ERRORCODEENUM {
......
......@@ -121,7 +121,9 @@ export const EnterpriseListConfig = {
state:{key:"孵化状态"},
virtualCause:{key:"虚拟孵化模式"},
intellectualProperty:{key:"知识产权"},
qualification:{key:"企业资质"}
qualification:{key:"企业资质"},
cycxfx:{key:"创业创新方向"},
cycsrbj:{key:"创业创始人背景"}
};
......@@ -142,15 +144,18 @@ export const EnterpriseMoveOutListConfig = {
mainBusiness:{key:"主营业务"},//主营业务
logonTime:{key:"注册时间", changeDate:true},
timeOfImmigration:{key:"迁入时间", changeDate:true},
oldLogonAdd:{key:"迁入前注册地址"},
oldLogonAddress:{key:"迁入前注册地址"},
firstIncubationTime:{key:"首次入孵时间", changeDate:true},
isNaturalPersonHolding:{key:"是否自然人控股"},
logonAdd:{key:"注册地址"},
operatingAdd:{key:"经营地址"},
logonAddress:{key:"注册地址"},
operatingAddress:{key:"经营地址"},
leasedArea:{key:"租赁面积(平方米)"},
};
/**
* 使用端: 管理后台
* 场景: 企业融资信息列表
......
......@@ -51,9 +51,9 @@ const enterpriseSchema = new Schema({
firstIncubationTime:Number,//首次入孵时间
timeOfImmigration:Number,//迁入时间
isNaturalPersonHolding:{type:Boolean, default:true},//是否自然人控股企业
oldLogonAdd:String,//迁入前注册地址
logonAdd:String,//注册地址
operatingAdd:String,//经营地址
oldLogonAdd:String,//迁入前注册地址 弃用
logonAdd:String,//注册地址 弃用
operatingAdd:String,//经营地址 弃用
isCreate:{type:Boolean, default:false},//是否新建
// isPhysicalPresence:{type:Boolean, default:true},//是否实地孵化 暂时弃用
leasedArea:Number,//租赁面积(平方米)
......
......@@ -19,6 +19,7 @@ const financingSchema = new Schema({
fuHuaQiInvestmentStyle:Number,//孵化器投资方式
createTime:Number,//录入时间
type:{type:Number, default:1},//1为 孵化器 2为企业自己添加 3为孵化器添加企业修改
});
var financingInfoModel;
......@@ -106,7 +107,7 @@ export async function selectEnterpriseTwoYeasFinancing(uscc:string, startTime:nu
export async function statsEnterpriseFinancing() {
let statsList = await financingInfoModel.aggregate([
{"$group":{_id:"$financingRounds", count:{"$sum":"$financingAmount"} }}
{"$group":{_id:"$financingRounds", count:{"$sum":1} }}
]);
return statsList;
}
......
......@@ -109,7 +109,7 @@ export async function addManyTeamData(addList) {
export async function statsEnterpriseTeamData(year:number, quarter:number) {
let statsList = await teamModel.aggregate([
{"$match":{year, quarter, draftLock:true}},
{"$match":{year, quarter, "$or":[{isSubmit:true}, {fhqIsSubmit:true}] }},
{"$group":{
_id:"stats",
doctorCount:{"$sum":"$doctor"},
......@@ -124,7 +124,7 @@ export async function statsEnterpriseTeamData(year:number, quarter:number) {
export async function statsEnterTeamDataByFHQ(year:number, quarter:number) {
let statsList = await teamModel.aggregate([
{"$match":{year, quarter, draftLock:true}},
{"$match":{year, quarter, "$or":[{isSubmit:true}, {fhqIsSubmit:true}] }},
{"$group":{
_id:"$fuHuaQiUscc",
doctorCount:{"$sum":"$doctor"},
......@@ -144,7 +144,7 @@ export async function statsEnterTeamDataByFHQ(year:number, quarter:number) {
export async function statsEnterpriseTeamCountByNull(year:number, quarter:number) {
let statsList = await teamModel.aggregate([
{"$match":{year, quarter, draftLock:true}},
{"$match":{year, quarter, "$or":[{isSubmit:true}, {fhqIsSubmit:true}] }},
{"$project":{
name:1, count:[ "$doctor", "$master", "$undergraduate", "$juniorCollege", "$other"]
}},
......
......@@ -89,8 +89,8 @@ export async function updateFinancingDraftLock(taskId:string) {
* @param taskId 任务id 格式遵循tool中getTaskId
* @param param 所添加表单 需要提前验证
*/
export async function createFinancing(fuHuaQiUscc:string, taskId:string, uscc:string, logonTime:number,industry, param) {
let addInfo = Object.assign({fuHuaQiUscc, taskId, uscc, logonTime, createTime:new Date().valueOf()}, param);
export async function createFinancing(fuHuaQiUscc:string, taskId:string, uscc:string, logonTime:number, industry, param) {
let addInfo = Object.assign({fuHuaQiUscc,industry, taskId, uscc, logonTime, createTime:new Date().valueOf()}, param);
if (logonTime) addInfo.logonTime = logonTime;
await financingModel.create(addInfo);
}
......
......@@ -143,7 +143,7 @@ export async function updateSubmitCount(taskId:string, type:number, count:number
*/
export async function statsFuHuaQiTaskReportingRate(year:number, month:number) {
let statsList = await fuHuaQiTaskModel.aggregate([
{"$match":{year, month, isSubmit:true}},
{"$match":{year, month}},
{"$group":{_id:{uid:"$fuHuaQiUscc", isSubmit:"$isSubmit"}, count:{"$sum":1} } }
]);
......
......@@ -10,6 +10,9 @@ import { checkEnterpriseToken } from '../../middleware/user';
export function setRouter(httpServer) {
httpServer.post('/enterprise/login', asyncHandler(login));
httpServer.post('/enterprise/user/firstchangepwd', checkEnterpriseToken, asyncHandler(firstLoginChangeEnterprisePwd));
httpServer.post('/enterprise/changepwd/resetting', asyncHandler(resettingEnterprisePwd));
httpServer.post('/enterprise/changepwd/sendcode', asyncHandler(changeEnterprisePwdSendCode));
httpServer.post('/enterprise/user/firstupdatepwdstate', checkEnterpriseToken, asyncHandler(firstUpdatePwdState));
}
......@@ -45,3 +48,48 @@ async function firstLoginChangeEnterprisePwd(req, res) {
}
/**
* 重置密码
* @param req
* @param res
*/
async function resettingEnterprisePwd(req, res) {
let reqConf = { phone:"String", uscc:"String", code:"String", pwd:"String", confirmPwd:"String"};
let {phone, uscc, code, pwd, confirmPwd} = eccReqParamater(reqConf, req.body);
let result = await userBiz.resettingPwd(phone, uscc, code, pwd, confirmPwd);
res.success(result);
}
/**
* 重置密码发验证码
* @param req
* @param res
*/
async function changeEnterprisePwdSendCode(req, res) {
let reqConf = {uscc:'String', phone:'String'};
let {uscc, phone} = eccReqParamater(reqConf, req.body);
let result = await userBiz.changePwdSendCode(uscc, phone);
res.success(result);
}
/**
* 获取孵化器首次登录状态
* @param uscc
* @returns
*/
export async function firstUpdatePwdState(req, res) {
const Uscc = req.headers.uscc;
let result = await userBiz.getFirstUpdatePwdState(Uscc);
res.success(result);
}
\ No newline at end of file
......@@ -16,6 +16,7 @@ export function setRouter(httpServer) {
httpServer.post('/fuhuaqi/bindlist', checkFuHuaQiToken, asyncHandler(bindList));
httpServer.post('/fuhuaqi/changeuser', checkFuHuaQiToken, asyncHandler(changeUser));
httpServer.post('/fuhuaqi/forgotpwd', asyncHandler(forgotPwd));
httpServer.post('/fuhuaqi/user/firstupdatepwdstate', checkFuHuaQiToken, asyncHandler(firstUpdatePwdState));
/**发送短信验证码 */
httpServer.post('/fuhuaqi/changepwd/sendcode', asyncHandler(sendCode));
}
......@@ -148,7 +149,6 @@ async function bindList(req, res) {
* @param res
*/
async function changeUser(req, res) {
let reqConf = { targetUscc:'String' };
let { targetUscc} = eccReqParamater(reqConf, req.body);
......@@ -158,3 +158,16 @@ async function changeUser(req, res) {
res.success(result);
}
/**
* 获取孵化器首次登录状态
* @param req
* @param res
*/
async function firstUpdatePwdState(req, res) {
const Uscc = req.headers.uscc;
let result = await userBiz.getFirstUpdatePwdState(Uscc);
res.success(result);
}
\ No newline at end of file
......@@ -26,6 +26,9 @@ export function setRouter(httpServer) {
/**3.2 */
httpServer.post('/admin/provide/enterprise/initpwd', checkInterior, asyncHandler(updateEnterprisePwd) );
/**4.2 */
httpServer.post('/admin/provide/enterprise/financing/industry', checkInterior, asyncHandler(addFinancingIndustry) );
}
async function inputEnterprise202304Data(req, res) {
......@@ -107,3 +110,8 @@ async function updateEnterprisePwd(req, res) {
await provideBiz.initEnterprisePwd();
res.success({isUsccess:true});
}
async function addFinancingIndustry(req, res) {
await provideBiz.addFinancingIndustry();
res.success({isUsccess:true});
}
\ 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