Commit fa991a1c by lixinming

2.0小程序功能归档

parent ea34afcf
......@@ -124,6 +124,29 @@
"printj": "~1.1.0"
}
},
"agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"requires": {
"debug": "4"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
......@@ -613,6 +636,11 @@
"has-symbols": "^1.0.3"
}
},
"get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz",
......@@ -675,6 +703,30 @@
"sshpk": "^1.7.0"
}
},
"https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"requires": {
"agent-base": "6",
"debug": "4"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"httpx": {
"version": "2.2.7",
"resolved": "https://registry.npm.taobao.org/httpx/download/httpx-2.2.7.tgz",
......@@ -727,6 +779,11 @@
"resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604429388528&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
"integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
},
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz",
......@@ -993,6 +1050,14 @@
"resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
"integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
},
"node-fetch": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz",
"integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==",
"requires": {
"whatwg-url": "^5.0.0"
}
},
"node-xlsx": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.16.1.tgz",
......@@ -1088,11 +1153,6 @@
"resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
"integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
},
"qcloudsms_js": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/qcloudsms_js/-/qcloudsms_js-0.1.1.tgz",
"integrity": "sha512-ewdlD32XF0BkV5sGNCFHCR9FSf6fi6PijJGX1YkowFziycYUyoCThDWKM0aeZG6kSQ1y8qHHBYFhAl7JTSlhuQ=="
},
"qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
......@@ -1377,6 +1437,31 @@
"opentype.js": "^0.7.3"
}
},
"tencentcloud-sdk-nodejs": {
"version": "4.0.562",
"resolved": "https://registry.npmjs.org/tencentcloud-sdk-nodejs/-/tencentcloud-sdk-nodejs-4.0.562.tgz",
"integrity": "sha512-v519qlSr39bWeQiulCYZx6Doz3rs2R5gyKenj3LEDdo/SIlfZHdPEOEwqxcc5Fu9WSL4BRX74H2w8o/BN+1xyg==",
"requires": {
"form-data": "^3.0.0",
"get-stream": "^6.0.0",
"https-proxy-agent": "^5.0.0",
"is-stream": "^2.0.0",
"node-fetch": "^2.2.0",
"tslib": "1.13.0"
},
"dependencies": {
"form-data": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
"integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
}
}
},
"tiny-inflate": {
"version": "1.0.3",
"resolved": "https://registry.npm.taobao.org/tiny-inflate/download/tiny-inflate-1.0.3.tgz",
......@@ -1396,6 +1481,16 @@
"punycode": "^2.1.1"
}
},
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
},
"tslib": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
"integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz",
......@@ -1466,6 +1561,20 @@
"extsprintf": "^1.2.0"
}
},
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"wmf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
......
......@@ -19,10 +19,10 @@
"mysql": "^2.18.1",
"node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1",
"qcloudsms_js": "^0.1.1",
"qs": "^6.11.0",
"request": "^2.88.0",
"svg-captcha": "^1.3.12",
"tencentcloud-sdk-nodejs": "^4.0.562",
"ws": "^5.2.2",
"xml2js": "^0.4.23"
},
......
......@@ -157,4 +157,120 @@ export async function getAffiliationFuHuaQi() {
});
return {result}
}
/**
* 企业迁出列表
* @param name 企业名称
* @param fuHuaQiUscc 所属孵化器统一信用代码
* @param industry 领域多选
* @param isNaturalPersonHolding 是否自然人控股
* @param page 页面
* @returns
*/
export async function enterpriseMoveOutList(name:string, fuHuaQiUscc:string, industry, isNaturalPersonHolding:number, page:number) {
/**拼接查询条件 */
let selectParam:any = {state:configEnum.FUHUASTATE.迁出};
if (name) {
selectParam.name = {"$regex":`${name}`};
}
if (fuHuaQiUscc) selectParam.fuHuaQiUscc = fuHuaQiUscc;
if (industry.length > 0) {
verificationEnumTools.eccEnumValue('管理后台获取在孵企业信息列表', 'industry', configEnum.INDUSTRY, industry);
selectParam.industry = industry;
}
if (isNaturalPersonHolding == 2 || isNaturalPersonHolding == 3) {
selectParam.isNaturalPersonHolding = isNaturalPersonHolding == 2 ? true : false;
}
selectParam.draftLock = true; //未提交的企业不能查看
/**需要用到的查询数据 */
let usccMap = await fuHuaQiData.findAllFuHuaQiOperationNameMap();//用于将孵化器uscc变成孵化器名称
let dataBaseList = await enterpriseData.findEnterpriseListToPage(selectParam, (page-1)*10 );
let count = await enterpriseData.findEnterpriseCount(selectParam);//符合查询条件的数据总数
/**组合返回结果 */
let dataList = [];
dataBaseList.forEach( info => {
/**截取返回数据 */
let changeData:any = extractData(splitResultConfig.EnterpriseMoveOutListConfig, info, true);
/**匹配所属孵化器名称 匹配不上时这里显示空字符串 */
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
changeData.isNaturalPersonHolding = changeData.isNaturalPersonHolding ? "是" : "否";
/**将枚举值转为字符 */
changeData.industry = verificationEnumTools.changeEnumValue(configEnum.INDUSTRY, changeData.industry);
dataList.push(changeData);
});
return {count, dataList};
}
/**
* 导出 企业迁出列表
* @param name 企业名称
* @param fuHuaQiUscc 所属孵化器统一信用代码
* @param industry 领域多选
* @param isNaturalPersonHolding 是否自然人控股
* @param type 页面
* @returns
*/
export async function outPutEnterpriseMoveOutList(name:string, fuHuaQiUscc:string, industry, isNaturalPersonHolding:number, type:number) {
let fileName = "全部";
/**拼接查询条件 */
let selectParam:any = {state:configEnum.FUHUASTATE.迁出};
if (type == configEnum.OUTPUTTYPE.当前数据) {
if (name) {
selectParam.name = {"$regex":`${name}`};
}
if (fuHuaQiUscc) selectParam.fuHuaQiUscc = fuHuaQiUscc;
if (industry.length > 0) {
verificationEnumTools.eccEnumValue('管理后台获取在孵企业信息列表', 'industry', configEnum.INDUSTRY, industry);
selectParam.industry = industry;
}
if (isNaturalPersonHolding == 2 || isNaturalPersonHolding == 3) {
selectParam.isNaturalPersonHolding = isNaturalPersonHolding == 2 ? true : false;
}
selectParam.draftLock = true; //未提交的企业不能查看
fileName = "当前数据";
}
/**需要用到的查询数据 */
let usccMap = await fuHuaQiData.findAllFuHuaQiOperationNameMap();//用于将孵化器uscc变成孵化器名称
let dataBaseList = await enterpriseData.findEnterpriseList(selectParam);
let keyList = [ "name", "moveOutTime", "moveOutType", "moveOutCause", "fuHuaQiUscc", "industry",
"createTime","uscc","mainBusiness","logonTime","timeOfImmigration","oldLogonAdd","firstIncubationTime",
"isNaturalPersonHolding","logonAdd","operatingAdd","leasedArea"];
let titleList = ["企业名称"," 迁出时间"," 迁出类型"," 迁出原因"," 前所属孵化器"," 行业领域",
"入库时间", "统一信用代码", "主营业务", "注册时间", "迁入时间", "迁入前注册地址",
"首次入孵时间","是否自然人控股","注册地址","经营地址","租赁面积(平方米)"];
/**组合返回结果 */
let dataList = [titleList];
dataBaseList.forEach( info => {
/**截取返回数据 */
let changeData:any = extractData(splitResultConfig.EnterpriseMoveOutListConfig, info, true);
/**匹配所属孵化器名称 匹配不上时这里显示空字符串 */
changeData.fuhuaqiUscc = usccMap[info.fuHuaQiUscc] || "";
changeData.isNaturalPersonHolding = changeData.isNaturalPersonHolding ? "是" : "否";
/**将枚举值转为字符 */
changeData.industry = verificationEnumTools.changeEnumValue(configEnum.INDUSTRY, changeData.industry);
let subList = [];
for (let i = 0; i < keyList.length; i++) {
let value = changeData[keyList[i]]
subList.push(value);
}
dataList.push(subList);
});
return { fileName, dataList };
}
\ No newline at end of file
......@@ -14,7 +14,9 @@ import * as monthTableData from "../../../data/fuHuaQi/monthTable";
import * as taskData from "../../../data/fuHuaQi/task";
import { logHandle } from "../../../util/log";
import * as scoreData from "../../../data/fuHuaQi/score";
import * as scoreLogData from "../../../data/fuHuaQi/scoreLog";
import { starCount } from "../../mobileFuHuaQi/fuHuaQi/score";
import { sendInitPointOut } from "../../sms";
/**
* 获取孵化器基本信息列表
......@@ -308,6 +310,8 @@ export async function addUser(param) {
} catch (err) {
new BizError(ERRORENUM.系统错误, '添加任务和月度报表的时候 出现了异常 请检查数据库 ', err);
}
await sendInitPointOut(param.personInChargePhone);
return {isSuccess:true};
}
......@@ -324,7 +328,7 @@ export async function addUser(param) {
export async function fuHuaQiUserList(operationName:string, page:number) {
let selectParam:any = {};
if (operationName) {
selectParam.operationName = {"$regex":`${operationName}`};;
selectParam.operationName = {"$regex":`${operationName}`};
}
let dataBaseList = await fuhuaqiData.findFuHuaQiUserList(selectParam, (page-1)*10 );
......@@ -358,27 +362,85 @@ export async function fuHuaQiScore(time:number, name:string, page:number) {
}
let resultList = [];
let rankList = [];
if (!time) {
let scoreDataList = await scoreData.findScoreDataByParam({});
let rankList = [];
let scoreDataList = await scoreData.findScoreDataByParam(param);
scoreDataList.forEach((info) => {
let name = nameMap[info.uscc]
if (!name) return;
let score = info.startScore+info.myDataScore+info.baseDataScore+info.myEnterpriseScore+info.taskScore;
let star = starCount(score);
rankList.push({ name, star, score });
});
rankList.sort((a, b) => { return a.score - b.score} );
rankList.forEach((info, index) => {
info.rank = index + 1;
rankList.push({ uscc:info.uscc, name, star, score });
});
resultList = rankList.splice((page-1 * 10), 10);
} else {
let datList = await scoreLogData.getUptotheminuteScore(time);
rankList
datList.forEach(info => {
let name = nameMap[info._id]
if (!name) return;
let star = starCount(info.maxScore);
rankList.push({ uscc:info._id, name, star, score:info.maxScore });
});
}
rankList.sort((a, b) => { return b.score - a.score} );
rankList.forEach((info, index) => {
info.rank = index + 1;
});
let resultList = rankList.splice((page-1 )* 10, 10);
let pageCount = Math.ceil(rankList.length/10);
return {count:rankList.length, dataList:resultList, pageCount };
}
/**
* 导出孵化器评分排名
* @param time
*/
export async function outPutFuHuaQiScore(time:number) {
let nameMap = await fuhuaqiData.findAllFuHuaQiOperationNameMap();
let param:any = {};
let outPutName = "";
let rankList = [];
if (!time) {
outPutName = "当前";
let scoreDataList = await scoreData.findScoreDataByParam(param);
scoreDataList.forEach((info) => {
let name = nameMap[info.uscc]
if (!name) return;
let score = info.startScore+info.myDataScore+info.baseDataScore+info.myEnterpriseScore+info.taskScore;
let star = starCount(score);
rankList.push({ uscc:info.uscc, name, star, score });
});
} else {
let datList = await scoreLogData.getUptotheminuteScore(time);
outPutName = `${new Date(time).getFullYear()}${new Date(time).getMonth() + 1}月`;
rankList
datList.forEach(info => {
let name = nameMap[info._id]
if (!name) return;
let star = starCount(info.maxScore);
rankList.push({ uscc:info._id, name, star, score:info.maxScore });
});
}
rankList.sort((a, b) => { return b.score - a.score} );
let outPutList = [["孵化器运营机构名称", "当前排名", "当前分值(本年度)", "当前孵化器等级"]];
rankList.forEach((info, index) => {
info.rank = index + 1;
outPutList.push([info.name, info.rank, info.score, info.star]);
});
return {outPutList, outPutName};
}
\ No newline at end of file
/**
* 管理后台 任务中心相关逻辑
*/
import { OUTPUTTYPE, TASKTYPEENUM, UPDATESTATE } from "../../../config/enum";
import * as taskData from "../../../data/fuHuaQi/task";
import * as fuhuaqiData from "../../../data/fuHuaQi/fuhuaqi";
import { BizError } from "../../../util/bizError";
import { ERRORENUM } from "../../../config/errorEnum";
/**
* 融资企业填报任务 列表
* @param upState 填报状态
* @param time 日期
* @param page 页数
*/
export async function financingTaskList(state:number, time:number, page:number) {
if ( !(state >=1 || state <=3) ) throw new BizError(ERRORENUM.参数错误, `state状态不合法 不合法值为 ${state}`);
let selectParam:any= {type:TASKTYPEENUM.融资企业填报};
if (state > 1) {
selectParam.isSubmit = state == 2 ? true : false;
}
if (time) {
selectParam.year = new Date(time).getFullYear();
selectParam.month = new Date(time).getMonth() + 1;
}
let nameMap = await fuhuaqiData.findAllFuHuaQiOperationNameMap();
let taskList = await taskData.findTaskListByParamAndPage(selectParam, (page -1)*10);
let reslutList = [];
taskList.forEach(info => {
let {submitCount, fuHuaQiUscc, month, year, isSubmit } = info;
let item = {
name : nameMap[fuHuaQiUscc],
addCount:submitCount,
dataTime:`${year}${month}`,
state:isSubmit? "已填报": "未填报"
};
reslutList.push(item);
});
let count = await taskData.findTaskCountByParamAnd(selectParam);
let pageCount = Math.ceil(count/10);
return {count, dataList:reslutList, pageCount};
}
/**
* 导出融资企业填报任务 列表
* @param upState 填报状态
* @param time 日期
* @param type 查询类型
*/
export async function outPutFinancingTaskList(state:number, time:number, type:number) {
if ( !(state >=1 || state <=3) ) throw new BizError(ERRORENUM.参数错误, `state状态不合法 不合法值为 ${state}`);
let selectParam:any= {type:TASKTYPEENUM.融资企业填报};
let name = "全部";
if (type == OUTPUTTYPE.当前数据 ) {
if (state == 2 || state == 3) {
selectParam.draftLock = state == 2 ? true : false;
}
if (time) {
selectParam.year = new Date(time).getFullYear();
selectParam.month = new Date(time).getMonth() + 1;
name = `${selectParam.year}${selectParam.month}月`;
}
}
let nameMap = await fuhuaqiData.findAllFuHuaQiOperationNameMap();
let taskList = await taskData.findTaskListByParam(selectParam);
let dataList = [["运营机构名称", "填报状态", "数据月份", "本月新增数量"]];
taskList.forEach(info => {
let {submitCount, fuHuaQiUscc, month, year, isSubmit } = info;
let name = nameMap[fuHuaQiUscc];
let state = isSubmit? "已填报": "未填报" ;
let dataTime = `${year}${month}`;
dataList.push([name, state, dataTime, submitCount]);
});
return { dataList, name };
}
/**
* 新增企业任务 列表
* @param upState 填报状态
* @param time 日期
*/
export async function addEnterpriseTaskList(state:number, time:number, page:number) {
if ( !(state >=1 || state <=3) ) throw new BizError(ERRORENUM.参数错误, `state状态不合法 不合法值为 ${state}`);
let selectParam:any= {type:TASKTYPEENUM.新注册或迁入企业登记};
if (state>1) {
selectParam.isSubmit = state == 2 ? true : false;
}
if (time) {
selectParam.year = new Date(time).getFullYear();
selectParam.month = new Date(time).getMonth() + 1;
}
let nameMap = await fuhuaqiData.findAllFuHuaQiOperationNameMap();
let taskList = await taskData.findTaskListByParamAndPage(selectParam, (page -1)*10);
let reslutList = [];
taskList.forEach(info => {
let {submitCount, fuHuaQiUscc, month, year, isSubmit } = info;
let item = {
name : nameMap[fuHuaQiUscc],
addCount:submitCount,
dataTime:`${year}${month}`,
state:isSubmit? "已填报": "未填报"
};
reslutList.push(item);
});
let count = await taskData.findTaskCountByParamAnd(selectParam);
let pageCount = Math.ceil(count/10);
return {count, dataList:reslutList, pageCount};
}
/**
* 导出新增企业任务 列表
* @param upState 填报状态
* @param time 日期
* @param type 查询类型
*/
export async function outPutAddEnterpriseTaskList(state:number, time:number, type:number) {
if ( !(state >=1 || state <=3) ) throw new BizError(ERRORENUM.参数错误, `state状态不合法 不合法值为 ${state}`);
let selectParam:any= {type:TASKTYPEENUM.新注册或迁入企业登记};
let name = "全部";
if (type == OUTPUTTYPE.当前数据 ) {
if (state == 2 || state == 3) {
selectParam.draftLock = state == 2 ? true : false;
}
if (time) {
selectParam.year = new Date(time).getFullYear();
selectParam.month = new Date(time).getMonth() + 1;
name = `${selectParam.year}${selectParam.month}月`;
}
}
let nameMap = await fuhuaqiData.findAllFuHuaQiOperationNameMap();
let taskList = await taskData.findTaskListByParam(selectParam);
let dataList = [["运营机构名称", "填报状态", "数据月份", "本月新增数量"]];
taskList.forEach(info => {
let {submitCount, fuHuaQiUscc, month, year, isSubmit } = info;
let name = nameMap[fuHuaQiUscc];
let state = isSubmit? "已填报": "未填报" ;
let dataTime = `${year}${month}`;
dataList.push([name, state, dataTime, submitCount]);
});
return { dataList, name };
}
\ No newline at end of file
......@@ -10,6 +10,7 @@ import { BizError } from "../../util/bizError";
import { logHandle } from "../../util/log";
import { initFuHuaQiScore } from "../../data/fuHuaQi/score";
import { updateScore } from "../mobileFuHuaQi/fuHuaQi/score";
import { findFinancingList } from "../../data/enterprise/financing";
......@@ -96,4 +97,44 @@ export async function initScoreData() {
}
console.log("初始化评分成功");
}
export async function replenishTaskData() {
let list = await enterpriseData.findStats();
let taskMap = {};
list.forEach(info => {
if (info.taskId) {
if (!taskMap[info.taskId]) taskMap[info.taskId] = 0;
taskMap[info.taskId] += 1;
}
});
for (let key in taskMap) {
let value = taskMap[key];
await taskData.updateSubmitCount(key, TASKTYPEENUM.新注册或迁入企业登记, value);
}
let fList = await findFinancingList({});
let fTaskMap = {};
fList.forEach(info => {
if (info.taskId) {
if (!fTaskMap[info.taskId]) fTaskMap[info.taskId] = 0;
fTaskMap[info.taskId] += 1;
}
});
for (let key in fTaskMap) {
let value = fTaskMap[key];
await taskData.updateSubmitCount(key, TASKTYPEENUM.融资企业填报, value);
}
console.log("初始化任务提交数成功");
}
\ No newline at end of file
......@@ -273,6 +273,7 @@ export async function updatePhysicalInfo(fuHuaQiUscc:string, uscc:string, leased
enterpriseInfo.virtualCauseDes = "";//虚拟孵化原因
enterpriseInfo.moveOutType = null;//迁出类型
enterpriseInfo.moveOutCause = [];//迁出原因
enterpriseInfo.moveOutTime = 0;
await enterpriseInfo.save();
......@@ -310,6 +311,7 @@ export async function updateVirtualInfo(fuHuaQiUscc:string, uscc:string, virtual
enterpriseInfo.moveOutType = null;//迁出类型
enterpriseInfo.moveOutCause = [];//迁出原因
enterpriseInfo.leasedArea = 0;//租赁面积
enterpriseInfo.moveOutTime = 0;
await enterpriseInfo.save();
......@@ -337,10 +339,11 @@ export async function updateMoveOutInfo(fuHuaQiUscc:string, uscc:string, moveOu
enterpriseInfo.moveOutType = moveOutType;
enterpriseInfo.moveOutCause = moveOutCause;
enterpriseInfo.moveOutTime = new Date().valueOf();
enterpriseInfo.state = configEnum.FUHUASTATE.迁出;
/**修改为虚拟时,需要把实体的和迁出的字段清空 */
/**修改为迁出时,需要把实体的和虚拟的字段清空 */
enterpriseInfo.virtualCause = null;//虚拟孵化模式
enterpriseInfo.virtualCauseDes = "";//虚拟孵化原因
enterpriseInfo.leasedArea = 0;//租赁面积
......
......@@ -15,8 +15,8 @@
import moment = require("moment");
import { SCOREWAYS, TASKTYPEENUM } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { findEnterpriseListByTaskId, updateEnterpriseDraftLock } from "../../../data/enterprise/enterprise";
import { findFinancingListByTaskId, updateFinancingDraftLock } from "../../../data/enterprise/financing";
import { findEnterpriseCount, findEnterpriseListByTaskId, updateEnterpriseDraftLock } from "../../../data/enterprise/enterprise";
import { findFinancingCount, findFinancingListByTaskId, updateFinancingDraftLock } from "../../../data/enterprise/financing";
import { findAllNotDisabledFuHuaQi } from "../../../data/fuHuaQi/fuhuaqi";
import * as monthTableData from "../../../data/fuHuaQi/monthTable";
import * as taskData from "../../../data/fuHuaQi/task";
......@@ -210,6 +210,7 @@ export async function checkTask(uscc:string, taskType:number) {
if (!taskInfo) throw new BizError(ERRORENUM.任务不存在, uscc, TaskId);
if ( taskInfo.isSubmit ) throw new BizError(ERRORENUM.不能重复提交任务, uscc, taskType);
let submitCount = 0;
switch (taskType) {
case TASKTYPEENUM.孵化器月度填报:
/**月度报表每个月初和任务数据一起初始化 所以只需要修改状态 */
......@@ -226,12 +227,14 @@ export async function checkTask(uscc:string, taskType:number) {
case TASKTYPEENUM.新注册或迁入企业登记:
/**将录入的企业数据 draftLock 改为 true 表示不再是草稿状态 */
await updateEnterpriseDraftLock(TaskId);
submitCount = await findEnterpriseCount({taskId:TaskId});
/**更新分数 */
await scoreBiz.updateScore(uscc, SCOREWAYS.任务得分, true, TASKTYPEENUM.新注册或迁入企业登记);
break;
case TASKTYPEENUM.融资企业填报:
/**将录入的融资数据 draftLock 改为 true 表示不再是草稿状态 */
await updateFinancingDraftLock(TaskId);
submitCount = await findFinancingCount({taskId:TaskId});
/**更新分数 */
await scoreBiz.updateScore(uscc, SCOREWAYS.任务得分, true, TASKTYPEENUM.融资企业填报);
break;
......@@ -240,6 +243,7 @@ export async function checkTask(uscc:string, taskType:number) {
/** 修改任务状态标识 和相关信息 */
taskInfo.isSubmit = true;
taskInfo.submitTime = new Date().valueOf();
taskInfo.submitCount = submitCount;
await taskInfo.save();
......
......@@ -2,14 +2,47 @@
* 短信主要逻辑
*/
const QcloudSms = require("qcloudsms_js");
const tencentcloud = require("tencentcloud-sdk-nodejs");
const smsClient = tencentcloud.sms.v20210111.Client
import { SMSTYPE } from "../config/enum";
import { ERRORENUM } from "../config/errorEnum";
import { systemConfig } from "../config/serverConfig";
import { BizError } from "../util/bizError";
/**实例化 QcloudSms */
var qcloudsms;
var client;
export function initSMS() {
qcloudsms = QcloudSms(systemConfig.smsSDKId, systemConfig.smsAppKey);
client = new smsClient({
credential: {
/* 必填:腾讯云账户密钥对secretId,secretKey。
* 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
* 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
* 以免泄露密钥对危及你的财产安全。
* SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi */
secretId: "AKIDHUYO0Xq0wc1DD2e1CJ1xpuqYIxQo0yrd",
secretKey: "zl01oOkswmXJ4apnaUJsCW5PivudLtFP",
},
/* 必填:地域信息,可以直接填写字符串ap-guangzhou,支持的地域列表参考 https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8 */
region: "ap-guangzhou",
/* 非必填:
* 客户端配置对象,可以指定超时时间等配置 */
profile: {
/* SDK默认用TC3-HMAC-SHA256进行签名,非必要请不要修改这个字段 */
signMethod: "HmacSHA256",
httpProfile: {
/* SDK默认使用POST方法。
* 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求 */
reqMethod: "POST",
/* SDK有默认的超时时间,非必要请不要进行调整
* 如有需要请在代码中查阅以获取最新的默认值 */
reqTimeout: 30,
/**
* 指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为 sms.ap-guangzhou.tencentcloudapi.com
*/
endpoint: "sms.tencentcloudapi.com"
},
},
})
}
/**
......@@ -19,28 +52,45 @@ export function initSMS() {
* @param params 参数数组
*/
function sendMsmToPhoneNumber(phone, type:number, params) {
var ssender = qcloudsms.SmsSingleSender();
let phoneAreaList = [];
phone.forEach(info => {
phoneAreaList.push(`+86${info}`);
});
let templateId = -1;
if (type == SMSTYPE.修改密码) templateId = systemConfig.smsModelChangePwd;
else if (type == SMSTYPE.信息填报提醒) templateId = systemConfig.smsModelPointOut;
else if (type == SMSTYPE.创建孵化器提醒) templateId = systemConfig.smsModelInitPointOut;
const sendParam = {
/* 短信应用ID: 短信SmsSdkAppId在 [短信控制台] 添加应用后生成的实际SmsSdkAppId,示例如1400006666 */
// 应用 ID 可前往 [短信控制台](https://console.cloud.tencent.com/smsv2/app-manage) 查看
SmsSdkAppId: systemConfig.smsSDKId,
/* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名 */
// 签名信息可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-sign) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-sign) 的签名管理查看
SignName: systemConfig.smsSign,
/* 模板 ID: 必须填写已审核通过的模板 ID */
// 模板 ID 可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-template) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-template) 的正文模板管理查看
TemplateId: templateId,
/* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空 */
TemplateParamSet: params,
/* 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
/* 用户的 session 内容(无需要可忽略): 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
SessionContext: "",
PhoneNumberSet: phoneAreaList,
/* 短信码号扩展号(无需要可忽略): 默认未开通,如需开通请联系 [腾讯云短信小助手] */
ExtendCode: "",
/* 国际/港澳台短信 senderid(无需要可忽略): 国内短信填空,默认未开通,如需开通请联系 [腾讯云短信小助手] */
SenderId: "",
}
return new Promise( (resolve, reject) => {
ssender.sendWithParam("86", phone, templateId, params, systemConfig.smsSign, "", "", function (err, res, resData) {
client.SendSms(sendParam, function (err, response) {
let isError = false;
let msg = "";
if (err) {
msg = err;
isError = true;
} else {
console.log("request data: ", res.req);
console.log("response data: ", resData);
//todo
if (resData.errmsg != 'OK') {
isError = true;
msg = resData.errmsg;
}
}
resolve({isError, msg});
});
......@@ -69,7 +119,10 @@ export async function sendChangePwdCode(phone:string, code:string) {
* @returns
*/
export async function sendTaskPointOut(phoneList, month:number) {
let sendRes:any = await sendMsmToPhoneNumber(phoneList, SMSTYPE.修改密码, [month]);
let sendRes:any = await sendMsmToPhoneNumber(phoneList, SMSTYPE.信息填报提醒, [month]);
if (sendRes.isError) throw new BizError(ERRORENUM.短信发送失败, sendRes.msg);
return sendRes.isError;
}
......@@ -81,7 +134,7 @@ export async function sendTaskPointOut(phoneList, month:number) {
*/
export async function sendInitPointOut(phone:string) {
let sendPhoneList = [phone];
let sendRes:any = await sendMsmToPhoneNumber(sendPhoneList, SMSTYPE.修改密码, []);
let sendRes:any = await sendMsmToPhoneNumber(sendPhoneList, SMSTYPE.创建孵化器提醒, []);
return sendRes.isError;
}
......@@ -3,12 +3,19 @@
* 作者:李欣鸣
* 目前下发任务有
* 1: 每月1日0时0分,下发孵化器任务
* 2:每月倒数第7天,发送短信提示
*
*/
import { findTaskCountByKey } from "../data/fuHuaQi/task";
import moment = require("moment");
import { findTaskCountByKey, findTaskListByParam } from "../data/fuHuaQi/task";
import { getTimeKey } from "../tools/system";
import { provideTask, retrieveTask } from "./mobileFuHuaQi/fuHuaQi/task";
import { findFuHuaQiList } from "../data/fuHuaQi/fuhuaqi";
import { sendTaskPointOut } from "./sms";
import { logHandle } from "../util/log";
import { createSmsPointOutData, findSmsPointOutData } from "../data/fuHuaQi/smsPointOut";
import { SMSTYPE } from "../config/enum";
export function initSystemTask() {
fuHuaQiTask();
......@@ -19,6 +26,10 @@ export function initSystemTask() {
}
/**
* 发放/回收 任务
* @returns
*/
async function fuHuaQiTask() {
const Key = getTimeKey();
let count = await findTaskCountByKey(Key);
......@@ -31,4 +42,49 @@ async function fuHuaQiTask() {
}
/**
* 短信任务 每月倒数第七天发送
*/
export async function smsTask() {
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();
let dataMonth = moment(nowMs).subtract(1,'month').month() + 1;
let dataYear = new Date(nowMs).getFullYear();
if (nowMs > checkMs) {
/**本月已经更新过了就不再更新 */
let dbData = await findSmsPointOutData(dataMonth, dataYear);
if (dbData && dbData.year) return;
//发送短信验证
let fuHuaQiList = await findFuHuaQiList({userState:false});
let allPhoneMap = {};
for (let i = 0; i < fuHuaQiList.length; i++) {
let {personInChargePhone, uscc} = fuHuaQiList[i];
allPhoneMap[uscc] = personInChargePhone;
}
let notCheckTaskList = await findTaskListByParam({month:dataMonth, year:dataYear, isSubmit:false});
let phoneMap = {};
notCheckTaskList.forEach(info => {
let phone = allPhoneMap[info.fuHuaQiUscc];
if (!phone) return;
phoneMap[phone] = 1;
});
let phoneList = Object.keys(phoneMap);
let sendRes = await sendTaskPointOut(phoneList, dataMonth);
if (!sendRes )logHandle(`提示短信发送成功 共计${phoneList.length}条`);
await createSmsPointOutData(dataMonth, dataYear, SMSTYPE.信息填报提醒);
}
}
......@@ -43,6 +43,7 @@ export enum ERRORENUM {
验证码失效,
验证码过期,
不能修改过期任务数据,
短信发送失败
}
export enum ERRORCODEENUM {
......
......@@ -123,6 +123,32 @@ export const EnterpriseListConfig = {
/**
* 使用端: 管理后台
* 场景: 迁出企业列表
* 备注: 导出和列表共用一份配置
*/
export const EnterpriseMoveOutListConfig = {
name:{key:"企业名称"},
moveOutTime:{key:"迁出时间", changeDate:true},
moveOutType:{key:"迁出类型"},
moveOutCause:{key:"迁出原因"},
fuHuaQiUscc:{key:"前所属孵化器"},
industry:{key:"行业领域[] 最多 选择三个"},
createTime:{key:"入库时间 不可修改", changeDate:true},
uscc:{key:"统一信用代码 也是登录账号 不可修改"},
mainBusiness:{key:"主营业务"},//主营业务
logonTime:{key:"注册时间", changeDate:true},
timeOfImmigration:{key:"迁入时间", changeDate:true},
oldLogonAdd:{key:"迁入前注册地址"},
firstIncubationTime:{key:"首次入孵时间", changeDate:true},
isNaturalPersonHolding:{key:"是否自然人控股"},
logonAdd:{key:"注册地址"},
operatingAdd:{key:"经营地址"},
leasedArea:{key:"租赁面积(平方米)"},
};
/**
* 使用端: 管理后台
* 场景: 企业融资信息列表
* 备注: 导出和列表共用一份配置
*/
......@@ -256,3 +282,4 @@ export const MyEnterpriseBaseDataConfig = {
operatingAdd:{key:"经营地址"},//
}
......@@ -34,6 +34,7 @@ const enterpriseSchema = new Schema({
virtualCauseDes:String,//虚拟孵化描述 ----2.0
moveOutType:Number,// 迁出类型 遵循 MOVEOUTTYPE 的值 ----2.0
moveOutCause:[Number],//迁出原因 遵循 MOVEOUTCAUSE 的值 ----2.0
moveOutTime:Number,//迁出时间
});
var enterpriseModel;
......@@ -98,7 +99,7 @@ export async function selectOneEnterpriseByParam(param:object) {
* @returns [{draftId}]
*/
export async function findEnterpriseListByTaskId(taskId:string, draftLock:boolean) {
return await enterpriseModel.find({taskId, draftLock}, 'draftId name isCreate uscc');
return await enterpriseModel.find({taskId, draftLock, enterpriseIsInPut:false}, 'draftId name isCreate uscc');
}
......@@ -129,7 +130,7 @@ export async function createEnterprise(fuHuaQiUscc:string, taskId:string, param)
* @returns number 孵化器拥有的企业数量
*/
export async function findEnterpriseCountByFuHuaQiUscc(fuHuaQiUscc:string) {
return await enterpriseModel.find({fuHuaQiUscc}).count();
return await enterpriseModel.find({fuHuaQiUscc, state:{"$ne":4 }}).count();
}
......@@ -237,4 +238,9 @@ export async function updateEnterpriseState(state:number) {
export async function replenishData(fuHuaQiUscc:string, param) {
let addInfo = Object.assign({fuHuaQiUscc, createTime:new Date().valueOf()}, param);
await enterpriseModel.create(addInfo);
}
\ No newline at end of file
}
export async function findStats() {
return await enterpriseModel.find({enterpriseIsInPut:false});
}
......@@ -56,4 +56,18 @@ export async function addMany(addList) {
*/
export async function getLog(uscc:string, startTime:number, endTime:number) {
// await fuHuaQiScoreModel.create({uscc, score, addScore, timeMs:new Date().valueOf() });
}
/**
* 查询孵化器最新的分数
* @param timeMs
* @returns
*/
export async function getUptotheminuteScore(timeMs:number) {
return await fuHuaQiScoreLogModel.aggregate([
{"$match":{ timeMs :{"$lt":timeMs } } },
{"$project":{ score:1, uscc:1, timeMs:1 } },
{"$group":{_id:"$uscc", maxScore:{"$last":"$score"} } }
]);
}
\ No newline at end of file
/**
* 短信提示
*
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const smsPointOutSchema = new Schema({
month:Number,
year:Number,
type:Number,
sendMs:Number
});
var smsPointOutModel;
export function initModel(){
smsPointOutModel = baseDB.model('smspointout', smsPointOutSchema);
}
export async function createSmsPointOutData(month:number, year:number, type:number) {
return await smsPointOutModel.create({
month, year, type, sendMs:new Date().valueOf()
});
}
export async function findSmsPointOutData(month:number, year:number) {
return await smsPointOutModel.findOne({month, year});
}
......@@ -20,6 +20,7 @@ const fuHuaQiTaskSchema = new Schema({
isSubmit:Boolean,//是否提交
month:Number,//数据填报月
year:Number,//数据填报年 2.0算分的时候加入的
submitCount:{type:Number, default:0},//提交数量 默认0
});
var fuHuaQiTaskModel;
......@@ -106,3 +107,17 @@ export async function findTaskListByParam(param) {
export async function updateTaskYearData(year:number) {
return await fuHuaQiTaskModel.updateMany({}, {$set:{year}});
}
export async function findTaskListByParamAndPage(selectParam, skipCount:number) {
return await fuHuaQiTaskModel.find(selectParam).skip(skipCount).limit(10);
}
export async function findTaskCountByParamAnd(selectParam) {
return await fuHuaQiTaskModel.find(selectParam).count();
}
export async function updateSubmitCount(taskId:string, type:number, count:number) {
await fuHuaQiTaskModel.updateOne({type, taskId}, {$set:{submitCount:count}});
}
\ No newline at end of file
......@@ -7,6 +7,7 @@ import * as guanweihuiModel from "../../data/guanWeiHui/guanweihui";
import * as scoreModel from "../../data/fuHuaQi/score";
import * as scoreLogModel from "../../data/fuHuaQi/scoreLog";
import * as codeModel from "../../data/fuHuaQi/code";
import * as smsPointOutModel from "../../data/fuHuaQi/smsPointOut";
export async function initTable() {
taskinModel.initModel();
......@@ -18,4 +19,5 @@ export async function initTable() {
scoreModel.initModel();
scoreLogModel.initModel();
codeModel.initModel();
smsPointOutModel.initModel();
}
\ No newline at end of file
import { initSMS } from "./biz/sms";
import { initSystemTask } from "./biz/systemTask";
import { initSystemTask, smsTask } from "./biz/systemTask";
import { initConfig, systemConfig} from "./config/serverConfig";
import { initDB } from "./db/mongo/dbInit";
import { httpServer } from "./net/http_server";
......@@ -18,8 +18,12 @@ async function lanuch() {
await initSMS();
/**创建http服务 */
httpServer.createServer(systemConfig.port);
// await smsTask();
console.log('This indicates that the server is started successfully.');
}
lanuch();
\ No newline at end of file
......@@ -18,6 +18,10 @@ export function setRouter(httpServer) {
httpServer.post('/admin/enterprise/affiliationfuhuaqi',checkGuanWeiHuiToken,asyncHandler(affiliationFuHuaQi));
httpServer.post('/admin/data/output/enterprise',checkGuanWeiHuiToken, asyncHandler(outPutEnterpriseData));
httpServer.post('/admin/data/output/financing',checkGuanWeiHuiToken, asyncHandler(outPutFinancingData));
/**迁出企业 */
httpServer.post('/admin/enterprise/moveoutlist',checkGuanWeiHuiToken, asyncHandler(moveOutList));
httpServer.post('/admin/data/output/moveoutlist',checkGuanWeiHuiToken, asyncHandler(outPutMoveOutList));
}
......@@ -98,3 +102,27 @@ async function outPutFinancingData(req, res) {
res.success({name, data:dataList});
}
async function moveOutList(req, res) {
let reqConf = {name:'String', fuHuaQiUscc: 'String', industry: '[Number]', isNaturalPersonHolding: 'Number', page: 'Number' };
const NotMustHaveKeys = ["name", "fuHuaQiUscc", "industry", "isNaturalPersonHolding" ];
let { name, fuHuaQiUscc, industry, isNaturalPersonHolding, page } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let restult = await enterpriseAdminBiz.enterpriseMoveOutList(name, fuHuaQiUscc, industry, isNaturalPersonHolding, page);
res.success(restult);
}
async function outPutMoveOutList(req, res) {
let reqConf = {name:'String', fuHuaQiUscc: 'String', industry: '[Number]', isNaturalPersonHolding: 'Number', type: 'Number' };
const NotMustHaveKeys = ["name", "fuHuaQiUscc", "industry", "isNaturalPersonHolding" ];
let { name, fuHuaQiUscc, industry, isNaturalPersonHolding, type } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let {dataList, fileName} = await enterpriseAdminBiz.outPutEnterpriseMoveOutList(name, fuHuaQiUscc, industry, isNaturalPersonHolding, type);
res.success({data:dataList, name:`迁出企业${fileName}.xlsx`});
}
\ No newline at end of file
......@@ -5,19 +5,49 @@
import * as asyncHandler from 'express-async-handler';
import * as fuHuaQiAdminBiz from '../../biz/admin/fuHuaQi/fuHuaQi';
import { checkGuanWeiHuiToken } from '../../middleware/user';
import { eccReqParamater } from '../../util/verificationParam';
export function setRouter(httpServer) {
httpServer.post('/admin//baselist',checkGuanWeiHuiToken, asyncHandler(fuHuaQiBaseList));
httpServer.post('/admin/score/ranklist',checkGuanWeiHuiToken, asyncHandler(fuHuaQiScoreList));
httpServer.post('/admin/data/output/score',checkGuanWeiHuiToken, asyncHandler(outPutList));
}
/**
* 孵化器排名
* @param req
* @param res
*/
async function fuHuaQiScoreList(req, res) {
let reqConf = {
time: 'Number', //时间
name: 'String',//机构名称
page: 'Number'
};
const NotMustHaveKeys = ["time", "name"];
let {time, name, page} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await fuHuaQiAdminBiz.fuHuaQiScore(time, name, page);
res.success(result);
}
/**
* 孵化器基本信息列表
* 导出孵化器排名
* @param req
* @param res
*/
async function fuHuaQiBaseList(req, res) {
async function outPutList(req, res) {
let reqConf = {
time: 'Number', //时间
};
const NotMustHaveKeys = ["time"];
let {time } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let {outPutList, outPutName} = await fuHuaQiAdminBiz.outPutFuHuaQiScore(time);
let name = `孵化器${outPutName}排名.xlsx`;
res.success({name, data:outPutList});
}
/**
* 任务中心路由
*/
import * as asyncHandler from 'express-async-handler';
import * as fuHuaQiAdminBiz from '../../biz/admin/fuHuaQi/fuHuaQi';
import * as taskBiz from '../../biz/admin/fuHuaQi/task';
import { checkGuanWeiHuiToken } from '../../middleware/user';
import { eccReqParamater } from '../../util/verificationParam';
export function setRouter(httpServer) {
httpServer.post('/admin/task/financingtasklist',checkGuanWeiHuiToken, asyncHandler(getFinancingTaskList));
httpServer.post('/admin/task/enterprisetasklist',checkGuanWeiHuiToken, asyncHandler(getEnterpriseTaskList));
/**导出 */
httpServer.post('/admin/data/output/financingtasklist',checkGuanWeiHuiToken, asyncHandler(outPutFinancingTask));
httpServer.post('/admin/data/output/enterprisetasklist',checkGuanWeiHuiToken, asyncHandler(outPutEnterpriseTaskList));
}
async function getFinancingTaskList(req, res) {
let reqConf = {
state: 'Number', //状态
time: 'Number',//数据月份
page: 'Number'
};
const NotMustHaveKeys = ["state", "time"];
let {state, time, page} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await taskBiz.financingTaskList(state, time, page);
res.success(result);
}
async function getEnterpriseTaskList(req, res) {
let reqConf = {
state: 'Number', //状态
time: 'Number',//数据月份
page: 'Number'
};
const NotMustHaveKeys = ["state", "time"];
let {state, time, page} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await taskBiz.addEnterpriseTaskList(state, time, page);
res.success(result);
}
async function outPutFinancingTask(req, res) {
let reqConf = {
state: 'Number', //状态
time: 'Number',//数据月份
type:'Number',//下载类型
};
const NotMustHaveKeys = ["state", "time"];
let {state, time, type} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let {dataList, name} = await taskBiz.outPutFinancingTaskList(state, time, type);
let fileName = `孵化器${name}融资企业任务列表.xlsx`;
res.success({name:fileName, data:dataList});
}
async function outPutEnterpriseTaskList(req, res) {
let reqConf = {
state: 'Number', //状态
time: 'Number',//数据月份
type:'Number',//下载类型
};
const NotMustHaveKeys = ["state", "time"];
let {state, time, type} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let {dataList, name} = await taskBiz.outPutAddEnterpriseTaskList(state, time, type);
let fileName = `孵化器${name}新迁入企业任务列表.xlsx`;
res.success({name:fileName, data:dataList});
}
\ No newline at end of file
......@@ -13,8 +13,10 @@ export function setRouter(httpServer) {
httpServer.post('/admin/provide/enterprise/updatestate',checkInterior, asyncHandler(updateEnterpriseState));
httpServer.post('/admin/provide/task/updatetaskyear',checkInterior, asyncHandler(updateTaskYear));
httpServer.post('/admin/provide/task/initScore',checkInterior, asyncHandler(initScore));
httpServer.post('/admin/provide/task/replenishtaskcount',checkInterior, asyncHandler(replenishTaskCount));
}
/**
* 手动发放一月份任务
* 使用情况:1.0使用 已弃用
......@@ -61,4 +63,11 @@ async function updateEnterpriseState(req, res) {
async function initScore(req, res) {
await provideBiz.initScoreData();
res.success({isUsccess:true});
}
\ No newline at end of file
}
async function replenishTaskCount(req, res) {
await provideBiz.replenishTaskData();
res.success({isUsccess:true});
}
......@@ -31,8 +31,13 @@ function moveOutType(req, res) {
for (let key in MOVEOUTTYPE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
dataList.push({key, value:MOVEOUTTYPE[key]});
let keyStr = key;
if (keyStr == "迁出孵化器_仍在张江" || keyStr == "迁出张江_仍在浦东" || keyStr == "迁出浦东_仍在上海") {
keyStr = keyStr.replace("_",",");
}
dataList.push({key:keyStr, value:MOVEOUTTYPE[key]});
}
}
res.success({dataList});
}
......@@ -46,7 +51,13 @@ function moveOutCause(req, res) {
for (let key in MOVEOUTCAUSE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
dataList.push({key, value:MOVEOUTCAUSE[key]});
let keyStr = key;
if (keyStr == "经营成本过高_场地成本或人员成本_" || keyStr == "办公空间拓展_无合适办公空间_") {
keyStr = keyStr.replace("_","(");
keyStr = keyStr.replace("_",")");
}
dataList.push({key:keyStr, value:MOVEOUTCAUSE[key]});
}
}
res.success({dataList});
......@@ -235,4 +246,5 @@ async function getIndustry(req, res) {
}
}
res.success({lvList});
}
\ No newline at end of file
}
......@@ -12,6 +12,8 @@ import * as mobileClientUserRouters from './mobileClient/user';
import * as adminEnterpriseRouters from './admin/enterprise';
import * as adminFuHuaQiRouters from './admin/fuHuaQi';
import * as adminUserRouters from './admin/user';
import * as adminScoreRouters from './admin/score';
import * as adminTaskRouters from './admin/task';
import * as provideRouters from './provide';
......@@ -29,6 +31,8 @@ export function setRouter(httpServer){
adminEnterpriseRouters.setRouter(httpServer);
adminFuHuaQiRouters.setRouter(httpServer);
adminUserRouters.setRouter(httpServer);
adminScoreRouters.setRouter(httpServer);
adminTaskRouters.setRouter(httpServer);
/**系统维护 入口路由 */
provideRouters.setRouter(httpServer);
}
\ No newline at end of file
......@@ -80,7 +80,7 @@ export async function initBasicData() {
async function initFuHuaQiData() {
let count = await findFuHuaQiUserCount({});
if (count > 10) {
if (count > 1) {
console.log("*** 孵化器数据 无需初始化");
return;
}
......
......@@ -43,6 +43,13 @@ export function changeEnumValue(enumConf, value:any) {
str = str.replace("_","“");
str = str.replace("_","”");
}
if (str == "经营成本过高_场地成本或人员成本_" || str == "办公空间拓展_无合适办公空间_") {
str = str.replace("_","(");
str = str.replace("_",")");
}
if (str == "迁出孵化器_仍在张江" || str == "迁出张江_仍在浦东" || str == "迁出浦东_仍在上海") {
str = str.replace("_",",");
}
return str
}
let str = "";
......@@ -54,6 +61,13 @@ export function changeEnumValue(enumConf, value:any) {
subStr = subStr.replace("_","“");
subStr = subStr.replace("_","”");
}
if (str == "经营成本过高_场地成本或人员成本_" || str == "办公空间拓展_无合适办公空间_") {
str = str.replace("_","(");
str = str.replace("_",")");
}
if (str == "迁出孵化器_仍在张江" || str == "迁出张江_仍在浦东" || str == "迁出浦东_仍在上海") {
str = str.replace("_",",");
}
str += subStr;
if (index == value.length-1) str+="";
else str += ","
......
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