Commit 9764f721 by lixinming

6.0

parent 0a956982
......@@ -253,6 +253,176 @@
"regenerator-runtime": "^0.11.0"
}
},
"baidumap": {
"version": "0.0.4",
"resolved": "https://registry.npmmirror.com/baidumap/-/baidumap-0.0.4.tgz",
"integrity": "sha512-nRFyZIayBVtGqsesmMEORfeitu2IksGP8jgvnhV2bljqy/3LR3R3//iq2c0VgoErbCXa7wuZ6XNgxwpXINhMTg==",
"requires": {
"lodash": "2.4.1",
"request": "2.44.0"
},
"dependencies": {
"asn1": {
"version": "0.1.11",
"resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.1.11.tgz",
"integrity": "sha512-Fh9zh3G2mZ8qM/kwsiKwL2U2FmXxVsboP4x1mXjnhKHv3SmzaBZoYvxEQJz/YS2gnCgd8xlAVWcZnQyC9qZBsA==",
"optional": true
},
"assert-plus": {
"version": "0.1.5",
"resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-0.1.5.tgz",
"integrity": "sha512-brU24g7ryhRwGCI2y+1dGQmQXiZF7TtIj583S96y0jjdajIe6wn8BuXyELYhvD22dtIxDQVFk04YTJwwdwOYJw==",
"optional": true
},
"async": {
"version": "0.9.2",
"resolved": "https://registry.npmmirror.com/async/-/async-0.9.2.tgz",
"integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==",
"optional": true
},
"aws-sign2": {
"version": "0.5.0",
"resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.5.0.tgz",
"integrity": "sha512-oqUX0DM5j7aPWPCnpWebiyNIj2wiNI87ZxnOMoGv0aE4TGlBy2N+5iWc6dQ/NOKZaBD2W6PVz8jtOGkWzSC5EA==",
"optional": true
},
"bl": {
"version": "0.9.5",
"resolved": "https://registry.npmmirror.com/bl/-/bl-0.9.5.tgz",
"integrity": "sha512-njlCs8XLBIK7LCChTWfzWuIAxkpmmLXcL7/igCofFT1B039Sz0IPnAmosN5QaO22lU4qr8LcUz2ojUlE6pLkRQ==",
"requires": {
"readable-stream": "~1.0.26"
}
},
"caseless": {
"version": "0.6.0",
"resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.6.0.tgz",
"integrity": "sha512-/X9C8oGbZJ95LwJyK4XvN9GSBgw/rqBnUg6mejGhf/GNfJukt5tzOXP+CJicXdWSqAX0ETaufLDxXuN2m4/mDg=="
},
"combined-stream": {
"version": "0.0.7",
"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-0.0.7.tgz",
"integrity": "sha512-qfexlmLp9MyrkajQVyjEDb0Vj+KhRgR/rxLiVhaihlT+ZkX0lReqtH6Ack40CvMDERR4b5eFp3CreskpBs1Pig==",
"optional": true,
"requires": {
"delayed-stream": "0.0.5"
}
},
"delayed-stream": {
"version": "0.0.5",
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-0.0.5.tgz",
"integrity": "sha512-v+7uBd1pqe5YtgPacIIbZ8HuHeLFVNe4mUEyFDXL6KiqzEykjbw+5mXZXpGFgNVasdL4jWKgaKIXrEHiynN1LA==",
"optional": true
},
"forever-agent": {
"version": "0.5.2",
"resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.5.2.tgz",
"integrity": "sha512-PDG5Ef0Dob/JsZUxUltJOhm/Y9mlteAE+46y3M9RBz/Rd3QVENJ75aGRhN56yekTUboaBIkd8KVWX2NjF6+91A=="
},
"form-data": {
"version": "0.1.4",
"resolved": "https://registry.npmmirror.com/form-data/-/form-data-0.1.4.tgz",
"integrity": "sha512-x8eE+nzFtAMA0YYlSxf/Qhq6vP1f8wSoZ7Aw1GuctBcmudCNuTUmmx45TfEplyb6cjsZO/jvh6+1VpZn24ez+w==",
"optional": true,
"requires": {
"async": "~0.9.0",
"combined-stream": "~0.0.4",
"mime": "~1.2.11"
}
},
"http-signature": {
"version": "0.10.1",
"resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-0.10.1.tgz",
"integrity": "sha512-coK8uR5rq2IMj+Hen+sKPA5ldgbCc1/spPdKCL1Fw6h+D0s/2LzMcRK0Cqufs1h0ryx/niwBHGFu8HC3hwU+lA==",
"optional": true,
"requires": {
"asn1": "0.1.11",
"assert-plus": "^0.1.5",
"ctype": "0.5.3"
}
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
},
"lodash": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-2.4.1.tgz",
"integrity": "sha512-qa6QqjA9jJB4AYw+NpD2GI4dzHL6Mv0hL+By6iIul4Ce0C1refrjZJmcGvWdnLUwl4LIPtvzje3UQfGH+nCEsQ=="
},
"mime": {
"version": "1.2.11",
"resolved": "https://registry.npmmirror.com/mime/-/mime-1.2.11.tgz",
"integrity": "sha512-Ysa2F/nqTNGHhhm9MV8ure4+Hc+Y8AWiqUdHxsO7xu8zc92ND9f3kpALHjaP026Ft17UfxrMt95c50PLUeynBw==",
"optional": true
},
"mime-types": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-1.0.2.tgz",
"integrity": "sha512-echfutj/t5SoTL4WZpqjA1DCud1XO0WQF3/GJ48YBmc4ZMhCK77QA6Z/w6VTQERLKuJ4drze3kw2TUT8xZXVNw=="
},
"node-uuid": {
"version": "1.4.8",
"resolved": "https://registry.npmmirror.com/node-uuid/-/node-uuid-1.4.8.tgz",
"integrity": "sha512-TkCET/3rr9mUuRp+CpO7qfgT++aAxfDRaalQhwPFzI9BY/2rCDn6OfpZOVggi1AXfTPpfkTrg5f5WQx5G1uLxA=="
},
"oauth-sign": {
"version": "0.4.0",
"resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.4.0.tgz",
"integrity": "sha512-vF36cbrUyfy7Yr6kTIzrj3RsuaPYeJKU3IUOC6MglfNTyiGT6leGvEVOa3UsSsgwBzfVfRnvMiMVyUnpXNqN8w==",
"optional": true
},
"qs": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/qs/-/qs-1.2.2.tgz",
"integrity": "sha512-xEqT+49YIt+BdwQthXKTOkp7atENe6JqrGGerxBPiER6BArOIiVJtpZZYpWOpq2IOkTPVnDM8CgYvppFoJNwyQ=="
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"request": {
"version": "2.44.0",
"resolved": "https://registry.npmmirror.com/request/-/request-2.44.0.tgz",
"integrity": "sha512-gF6ZBvOhdOAANnP9yy9rPJ34PoUA1oqkrABVN2WZWoEBOQHvQuM/h9lYEAg/DQZEMmATx7E1x9Yiq3P3EFKz3Q==",
"requires": {
"aws-sign2": "~0.5.0",
"bl": "~0.9.0",
"caseless": "~0.6.0",
"forever-agent": "~0.5.0",
"form-data": "~0.1.0",
"hawk": "1.1.1",
"http-signature": "~0.10.0",
"json-stringify-safe": "~5.0.0",
"mime-types": "~1.0.1",
"node-uuid": "~1.4.0",
"oauth-sign": "~0.4.0",
"qs": "~1.2.0",
"stringstream": "~0.0.4",
"tough-cookie": ">=0.12.0",
"tunnel-agent": "~0.4.0"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
},
"tunnel-agent": {
"version": "0.4.3",
"resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
"integrity": "sha512-e0IoVDWx8SDHc/hwFTqJDQ7CCDTEeGhmcT9jkWJjoGQSpgBz20nAMr80E3Tpk7PatJ1b37DQDgJR3CNSzcMOZQ=="
}
}
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
......@@ -319,6 +489,15 @@
}
}
},
"boom": {
"version": "0.4.2",
"resolved": "https://registry.npmmirror.com/boom/-/boom-0.4.2.tgz",
"integrity": "sha512-OvfN8y1oAxxphzkl2SnCS+ztV/uVKTATtgLjWYg/7KwcNyf3rzpHxNQJZCKtsZd4+MteKczhWbSjtEX4bGgU9g==",
"optional": true,
"requires": {
"hoek": "0.9.x"
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
......@@ -533,6 +712,21 @@
"resolved": "https://registry.npm.taobao.org/crypt/download/crypt-0.0.2.tgz",
"integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
},
"cryptiles": {
"version": "0.2.2",
"resolved": "https://registry.npmmirror.com/cryptiles/-/cryptiles-0.2.2.tgz",
"integrity": "sha512-gvWSbgqP+569DdslUiCelxIv3IYK5Lgmq1UrRnk+s1WxQOQ16j3GPDcjdtgL5Au65DU/xQi6q3xPtf5Kta+3IQ==",
"optional": true,
"requires": {
"boom": "0.4.x"
}
},
"ctype": {
"version": "0.5.3",
"resolved": "https://registry.npmmirror.com/ctype/-/ctype-0.5.3.tgz",
"integrity": "sha512-T6CEkoSV4q50zW3TlTHMbzy1E5+zlnNcY+yb7tWVYlTwPhx9LpnfAkd4wecpWknDyptp4k97LUZeInlf6jdzBg==",
"optional": true
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz?cache=0&sync_timestamp=1601073333186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdashdash%2Fdownload%2Fdashdash-1.14.1.tgz",
......@@ -847,6 +1041,24 @@
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"hawk": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/hawk/-/hawk-1.1.1.tgz",
"integrity": "sha512-am8sVA2bCJIw8fuuVcKvmmNnGFUGW8spTkVtj2fXTEZVkfN42bwFZFtDem57eFi+NSxurJB8EQ7Jd3uCHLn8Vw==",
"optional": true,
"requires": {
"boom": "0.4.x",
"cryptiles": "0.2.x",
"hoek": "0.9.x",
"sntp": "0.2.x"
}
},
"hoek": {
"version": "0.9.1",
"resolved": "https://registry.npmmirror.com/hoek/-/hoek-0.9.1.tgz",
"integrity": "sha512-ZZ6eGyzGjyMTmpSPYVECXy9uNfqBR7x5CavhUaLOeD6W0vWK1mp/b7O3f86XE0Mtfo9rZ6Bh3fnuw9Xr8MF9zA==",
"optional": true
},
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
......@@ -1689,6 +1901,15 @@
"resolved": "https://registry.npm.taobao.org/sliced/download/sliced-1.0.1.tgz",
"integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
},
"sntp": {
"version": "0.2.4",
"resolved": "https://registry.npmmirror.com/sntp/-/sntp-0.2.4.tgz",
"integrity": "sha512-bDLrKa/ywz65gCl+LmOiIhteP1bhEsAAzhfMedPoiHP3dyYnAevlaJshdqb9Yu0sRifyP/fRqSt8t+5qGIWlGQ==",
"optional": true,
"requires": {
"hoek": "0.9.x"
}
},
"sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npm.taobao.org/sparse-bitfield/download/sparse-bitfield-3.0.3.tgz",
......@@ -1765,6 +1986,12 @@
"safe-buffer": "~5.1.0"
}
},
"stringstream": {
"version": "0.0.6",
"resolved": "https://registry.npmmirror.com/stringstream/-/stringstream-0.0.6.tgz",
"integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
"optional": true
},
"svg-captcha": {
"version": "1.4.0",
"resolved": "https://registry.npm.taobao.org/svg-captcha/download/svg-captcha-1.4.0.tgz",
......
......@@ -6,6 +6,7 @@
"dependencies": {
"@alicloud/sms-sdk": "^1.1.6",
"@types/node": "^10.12.18",
"baidumap": "0.0.4",
"compression": "^1.7.4",
"express": "^4.17.1",
"express-async-handler": "^1.1.4",
......
......@@ -5,7 +5,7 @@
<port>27017</port>
<w>1</w>
<!-- <dataBase>baseDB</dataBase> -->
<dataBase>zjscTest</dataBase>
<dataBase>zjsc0227</dataBase>
<wtimeoutMS>30000</wtimeoutMS>
</mongodb>
<!-- 小程序的secret 和 appid -->
......
/**
* 企业标签
*/
import { ENTERPRISESYSTEMLABEL, LABELGOAL, LABELTYPE, LABELUPDATEROAD } from "../../../config/enum";
import { findEnterpriseByUscc, findEnterpriseCount, findEnterpriseListToPage } from "../../../data/enterprise/enterprise";
import { findLabelLogByParam } from "../../../data/enterprise/enterpriseLabelLog";
import { getEffectiveLabelMap, selectLabelList } from "../../../data/label";
import { changeEnumValue, eccEnumValue } from "../../../util/verificationEnum";
import moment = require("moment");
import { updateLabelToEnterprise } from "../../label";
/**
* 企业标签列表
* @param name
* @param page
* @param labelIdList
* @returns
*/
export async function enterpriseLabelList(name:string, page:number, labelIdList) {
let selectParam:any = {};
if (name) selectParam.operationName = {"$regex":`${name}`};
if (labelIdList.length) {
selectParam.labels = {"$elemMatch":{labelId:{"$in":labelIdList} } }
}
let dbList = await findEnterpriseListToPage(selectParam, (page-1)*10);
let count = await findEnterpriseCount(selectParam);
let labelMap = await getEffectiveLabelMap(LABELGOAL.企业);
let dataList = [];
dbList.forEach(info => {
let {name, labels, uscc} = info;
let changeList = [];
labels.forEach(labelItem => {
let {state, labelId} = labelItem;
if (labelMap[labelId]) {
let {labelName, labelType} = labelMap[labelId];
changeList.push({
state,
labelName,
labelType,
labelTypeStr:changeEnumValue(LABELTYPE, labelType)
});
}
});
dataList.push({
name,
labels:changeList,
uscc
});
});
return {count, dataList, pageCount:Math.ceil(count/10) };
}
/**
* 企业标签动态列表
* @param uscc
*/
export async function enterpriseLabelLogList(uscc:string) {
let dblist = await findLabelLogByParam({uscc});
let labelMap = await getEffectiveLabelMap(LABELGOAL.企业);
let dataList = [];
dblist.sort((a,b) => {return b.ct - a.ct});
dblist.forEach(info => {
let {ct, road, labelId, desc} = info;
let descStr = '';
switch (labelId) {
case ENTERPRISESYSTEMLABEL.在孵企业:
if (road == LABELUPDATEROAD.失效) descStr = '孵化时间到期';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.入驻非孵:
if (road == LABELUPDATEROAD.失效) descStr = '企业迁出';
else descStr = '孵化时间到期或注册地为非张江企业';
break;
case ENTERPRISESYSTEMLABEL.迁出企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.高新企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc || "张江后台更新";
break;
case ENTERPRISESYSTEMLABEL.专精特新:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.上市企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.小巨人:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.融资企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.虚拟企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.毕业企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
case ENTERPRISESYSTEMLABEL.拟毕业企业:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = '触发条件,符合毕业企业要求';
break;
default:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc || "张江后台更新";
break;
}
dataList.push({
logTime:moment(ct).format("YYYY-MM-DD"),
state:road == LABELUPDATEROAD.失效 ? "失效" : "生效",
labelName:labelMap[labelId].labelName,
desc:descStr
});
});
return {dataList};
}
/**
* 批量添加企业标签
* @param uscc
* @param labelIdList
* @returns
*/
export async function addEnterpriseLabel(uscc:string, labelIdList) {
//只能添加自定义标签
let labelMap = await getEffectiveLabelMap(LABELGOAL.企业);
let enterpriseInfo = await findEnterpriseByUscc(uscc);
let dbLabelList = enterpriseInfo.labels || [];
let newLabelList = [];
dbLabelList.forEach(info => {
let {labelId, state} = info;
if (labelMap[labelId]) {
if (state && labelMap[labelId].labelType == LABELTYPE.系统标签 ) {
newLabelList.push(labelId);
}
}
});
await updateLabelToEnterprise(uscc, newLabelList.concat(labelIdList));
return {isSuccess:true};
}
/**
* 批量删除企业标签
* @param uscc
* @param labelIdList
* @returns
*/
export async function deleteEnterpriseLabel(uscc:string, labelIdList) {
let labelMap = await getEffectiveLabelMap(LABELGOAL.企业);
let enterpriseInfo = await findEnterpriseByUscc(uscc);
let dbLabelList = enterpriseInfo.labels || [];
let newLabelList = [];
dbLabelList.forEach(info => {
let {labelId, state} = info;
if (labelMap[labelId]) {
if (state && labelMap[labelId].labelType == LABELTYPE.系统标签 ) {
newLabelList.push(labelId);
}
}
});
await updateLabelToEnterprise(uscc, newLabelList.concat(labelIdList));
return {isSuccess:true};
}
export async function getLabelListByGoal(goal:number) {
eccEnumValue("获取标签管理", "goal", LABELGOAL, goal );
let list = await selectLabelList({goal, state:false, labelType:LABELTYPE.自定义标签});
let dataList = [];
list.forEach(info => {
dataList.push({
key:info.labelName,
value:info.id
});
});
return {dataList}
}
\ No newline at end of file
/**
* 新的任务系统(自定义任务) 2024年第一个版本
*/
import moment = require("moment");
import { changeEnumValue, eccEnumValue } from "../../../util/verificationEnum";
import { FUHUAQICUSTOMTASKTYPE, TASKTYPEENUM } from "../../../config/enum";
import * as customTaskData from "../../../data/fuHuaQi/customTask";
import { BizError } from "../../../util/bizError";
import { ERRORENUM } from "../../../config/errorEnum";
import * as taskData from "../../../data/fuHuaQi/monthTask/task";
import * as monthTableData from "../../../data/fuHuaQi/monthTask/monthTable";
import { findAllNotDisabledFuHuaQi } from "../../../data/fuHuaQi/fuhuaqi";
import { generateMonthTaskId } from "../../../tools/taskTool";
/**
* 创建自定义任务
* @param fuHuaQiTaskType
* @param dataCycle 数据周期
* @param startMs
* @param endMs
*/
export async function createTask(fuHuaQiTaskType:number, dataCycle:number, startMs:number, endMs:number) {
eccEnumValue("创建自定义任务", "", FUHUAQICUSTOMTASKTYPE, fuHuaQiTaskType);
//计算周期
let dataCycleTime = moment(dataCycle);
let cycleNum = dataCycleTime.format("YYYYMM");//数据周期格式化
//限制 不能创建为了数据月的任务
let thisMonth = moment().startOf('month').format('YYYYMM');
if (parseInt(cycleNum) >= parseInt(thisMonth)) throw new BizError(ERRORENUM.不可以创建未来数据月的任务);
if (parseInt(cycleNum) >= parseInt(moment(startMs).format('YYYYMM')) ) throw new BizError(ERRORENUM.填报周期不能小于数据周期);
let customTaskId = `${fuHuaQiTaskType}_${cycleNum}`;
let taskInfo = await customTaskData.findCustomTaskByTaskId(customTaskId);
if (taskInfo && taskInfo.customTaskId) throw new BizError(ERRORENUM.该数据周期已存在此类型任务);
await customTaskData.addTask(customTaskId, fuHuaQiTaskType, dataCycle, startMs, endMs);
//创建的时候要创建对应的任务
//确保数据月数据唯一
//说明 原本任务系统的key为数据填报月与数据月就差一个月
//后来改了之后 填报月与数据月可能差很多个月 为了保证数据与以前的兼容性 以及key的唯一性
//这里的key取数据月后一个月
let taskKey = dataCycleTime.add(1, 'months').format("YYYYM");
let taskCount = await taskData.findTaskCountByParamCount({key:taskKey});
if (taskCount) {
new BizError(ERRORENUM.该数据周期已存在此类型任务, `task表重复创建了${taskKey}的任务`);
return;
}
let addList = [];//任务列表
let monthList = [];//月度填报列表
const MonthNumber = dataCycleTime.month()+1;
const YearNumber = dataCycleTime.year();
const MonthTableName = `${MonthNumber}月孵化器月度填报`;
let fuHuaQiList = await findAllNotDisabledFuHuaQi();
fuHuaQiList.forEach(info => {
let { uscc } = info;
let taskId = generateMonthTaskId(uscc);
addList.push(
{ key:taskKey, customTaskId:customTaskId, startTime:startMs, endTime:endMs, type:TASKTYPEENUM.孵化器月度填报, month:MonthNumber, taskId, fuHuaQiUscc:uscc, isSubmit:false, year:YearNumber},
{ key:taskKey, customTaskId:customTaskId, startTime:startMs, endTime:endMs, type:TASKTYPEENUM.新注册或迁入企业登记, month:MonthNumber, taskId, fuHuaQiUscc:uscc, isSubmit:false , year:YearNumber},
{ key:taskKey, customTaskId:customTaskId, startTime:startMs, endTime:endMs, type:TASKTYPEENUM.融资企业填报, taskId, month:MonthNumber, fuHuaQiUscc:uscc, isSubmit:false, year:YearNumber});
/**任务报表的初始状态为 草稿(draftLock=fals) 未被编辑(isUpdate=false) */
monthList.push({ taskId, name:MonthTableName, fuHuaQiUscc:uscc, month:MonthNumber, year:YearNumber, draftLock:false, isUpdate:false });
});
try {
//初始化 任务列表
await taskData.createTaskToList(addList);
//初始化月度报表
await monthTableData.createMonthTableToList(monthList);
} catch(err) {
new BizError(ERRORENUM.系统错误, '添加任务和月度报表的时候 出现了异常 请检查数据库 ', err);
}
return {isSuccess:true};
}
/**
* 任务列表
* @param fuHuaQiTaskType
* @param dataCycle
*/
export async function taskList(fuHuaQiTaskType:number, dataCycle:number, pageNumber:number) {
let param:any = {};
if (fuHuaQiTaskType) param.customTaskType = fuHuaQiTaskType;
if (dataCycle) param.dataCycle = dataCycle;
let dbList = await customTaskData.findCustomTaskListByPage(param, (pageNumber-1)*10);
let dataCount = await customTaskData.findCustomTaskCount(param);
let nowMs = new Date().valueOf();
let dataList = [];
dbList.forEach(info => {
let {customTaskId, customTaskType, dataCycle, startMs, endMs, isExtension} = info;
let stateStr = "";
let state = 0;
if (nowMs < startMs) {
stateStr = "即将开始";
state = 1;
}
else if (nowMs > startMs && nowMs < endMs) {
stateStr = "进行中";
state = 2;
if (isExtension) {
stateStr = "补录中";
state = 3;
}
} else if (endMs< nowMs) {
stateStr = "已完成";
state = 4;
}
dataList.push({
id:customTaskId,
stateStr,
state,
rate:100,
customTaskType:changeEnumValue(FUHUAQICUSTOMTASKTYPE, customTaskType),
dataCycle:moment(dataCycle).format("YYYY-MM-DD"),
fillingInCycle:`${moment(startMs).format("YYYY.MM.DD")}-${moment(endMs).format("YYYY.MM.DD")}`
});
});
return {dataCount, dataList};
}
/**
* 数据下载
* @param id
*/
export async function dataDw(id:string) {
}
/**
* 修改周期
*/
export async function changeCycle(id:string, startMs:number, endMs:number) {
let taskInfo = await customTaskData.findCustomTaskByTaskId(id);
if (!taskInfo || !taskInfo.customTaskId) {
throw new BizError(ERRORENUM.任务不存在);
}
if (startMs< taskInfo.startMs) throw new BizError(ERRORENUM.任务延期不可将开始时间提前);
if (endMs <= startMs) throw new BizError(ERRORENUM.任务延期结束时间要大于开始时间);
taskInfo.startMs = startMs;
taskInfo.endMs = endMs;
taskInfo.isExtension = true;
await taskInfo.save();
//修改对应任务的开始结束时间
await taskData.upodateTaskStartAdnEndTime({customTaskId:id}, {startTime:startMs, endTime:endMs});
return {isSuccess:true};
}
/**
* 提前回收
* @param id
*/
export async function recovery(id:string) {
let taskInfo = await customTaskData.findCustomTaskByTaskId(id);
if (!taskInfo || !taskInfo.customTaskId) {
throw new BizError(ERRORENUM.任务不存在);
}
let nowMs = new Date().valueOf();
if (taskInfo.endMs < nowMs) throw new BizError(ERRORENUM.不可提前回收已完成任务);
taskInfo.endMs = nowMs;
await taskInfo.save();
//修改对应任务的开始结束时间
await taskData.upodateTaskStartAdnEndTime({customTaskId:id}, { endTime:nowMs});
return {isSuccess:true};
}
\ No newline at end of file
import moment = require("moment");
import { FHQSYSTEMLABEL, LABELGOAL, LABELTYPE, LABELUPDATEROAD } from "../../../config/enum";
import { findLabelLogByParam } from "../../../data/fuHuaQi/fuHuaQiLabelLog";
import { findFuHuaQiByUSCC, findFuHuaQiCount, findFuHuaQiListByPage } from "../../../data/fuHuaQi/fuhuaqi";
import { getEffectiveLabelMap } from "../../../data/label";
import { changeEnumValue } from "../../../util/verificationEnum";
import { updateLabelToFuHuaQi } from "../../label";
/**
* 孵化器标签列表
* @param name
* @param page
* @param labelIdList
* @returns
*/
export async function fuHuaQiLabelList(name:string, page:number, labelIdList) {
let selectParam:any = {userState:false};
if (name) selectParam.operationName = {"$regex":`${name}`};
if (labelIdList.length) {
selectParam.labels = {"$elemMatch":{labelId:{"$in":labelIdList} } }
}
let dbList = await findFuHuaQiListByPage(selectParam, (page-1)*10);
let count = await findFuHuaQiCount(selectParam);
let labelMap = await getEffectiveLabelMap(LABELGOAL.孵化器);
let dataList = [];
dbList.forEach(info => {
let {name, labels, uscc} = info;
let changeList = [];
labels.forEach(labelItem => {
let {state, labelId} = labelItem;
if (labelMap[labelId]) {
let {labelName, labelType} = labelMap[labelId];
changeList.push({
state,
labelName,
labelType,
labelTypeStr:changeEnumValue(LABELTYPE, labelType)
});
}
});
dataList.push({
name,
labels:changeList,
uscc
});
});
return {count, dataList, pageCount:Math.ceil(count/10) };
}
/**
* 孵化器标签动态列表
* @param uscc
*/
export async function labelLogList(uscc:string) {
let dblist = await findLabelLogByParam({uscc});
let labelMap = await getEffectiveLabelMap(LABELGOAL.孵化器);
let dataList = [];
dblist.sort((a,b) => {return b.ct - a.ct});
dblist.forEach(info => {
let {ct, road, labelId, desc} = info;
let descStr = '';
switch (labelId) {
case FHQSYSTEMLABEL.专业技术平台:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc;
break;
default:
if (road == LABELUPDATEROAD.失效) descStr = '';
else descStr = desc || "张江后台更新";
break;
}
dataList.push({
logTime:moment(ct).format("YYYY-MM-DD"),
state:road == LABELUPDATEROAD.失效 ? "失效" : "生效",
labelName:labelMap[labelId].labelName,
desc:descStr
});
});
return {dataList};
}
/**
* 批量添加孵化器标签
* @param uscc
* @param labelIdList
* @returns
*/
export async function addFuHuaQiLabel(uscc:string, labelIdList) {
let labelMap = await getEffectiveLabelMap(LABELGOAL.孵化器);
let fuHuaQiInfo = await findFuHuaQiByUSCC(uscc);
let dbLabelList = fuHuaQiInfo.labels || [];
let newLabelList = [];
dbLabelList.forEach(info => {
let {labelId, state} = info;
if (labelMap[labelId]) {
if (state && labelMap[labelId].labelType == LABELTYPE.系统标签 ) {
newLabelList.push(labelId);
}
}
});
await updateLabelToFuHuaQi(uscc, newLabelList.concat(labelIdList));
return {isSuccess:true};
}
/**
* 批量删除孵化器标签
* @param uscc
* @param labelIdList
* @returns
*/
export async function deleteFuHUaQiLabel(uscc:string, labelIdList) {
let labelMap = await getEffectiveLabelMap(LABELGOAL.孵化器);
let fuHuaQiInfo = await findFuHuaQiByUSCC(uscc);
let dbLabelList = fuHuaQiInfo.labels || [];
let newLabelList = [];
dbLabelList.forEach(info => {
let {labelId, state} = info;
if (labelMap[labelId]) {
if (state && labelMap[labelId].labelType == LABELTYPE.系统标签 ) {
newLabelList.push(labelId);
}
}
});
await updateLabelToFuHuaQi(uscc, newLabelList.concat(labelIdList));
return {isSuccess:true};
}
\ No newline at end of file
/**
* 管理后台-标签系统-标签管理
*/
import { LABELGOAL, LABELTYPE } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum";
import { createLabel, findOnceLabel, selectLabelCount, selectLabelListToPage } from "../../data/label";
import { getLabelId } from "../../tools/system";
import { BizError } from "../../util/bizError";
import { changeEnumValue, eccEnumValue } from "../../util/verificationEnum";
/**
* 创建标签
*/
export async function addLabel(name:string, goal:number) {
eccEnumValue("创建标签", "goal", LABELGOAL, goal);
let labelId = getLabelId();
await createLabel(goal, LABELTYPE.自定义标签, name, labelId);
return {isSuccess:true};
}
/**
* 修改标签名字
* @param id
* @param name
*/
export async function updateLabelName(id:string, name:string) {
let labelInfo = await findOnceLabel(id);
labelInfo.labelName = name;
await labelInfo.save();
return {isSuccess:true};
}
/**
* 列表
* @returns
*/
export async function labelList(pageNumber:number) {
let selectParam = {state:false, labelType:LABELTYPE.自定义标签};
let dbList = await selectLabelListToPage(selectParam, (pageNumber-1)*10);
let dataCount = await selectLabelCount(selectParam);
let dataList = [];
dbList.forEach(info => {
dataList.push({
labelName:info.labelName,
goal:changeEnumValue(LABELGOAL, info.goal),
id:info.id
});
});
return {dataList, dataCount};
}
/**
* 删除标签
* @param id
* @returns
*/
export async function deleteLabel(id:string) {
let labelInfo = await findOnceLabel(id);
if (!labelInfo || !labelInfo.id) throw new BizError(ERRORENUM.目标数据不存在);
if (labelInfo.labelType != LABELTYPE.自定义标签) throw new BizError(ERRORENUM.不能删除非自定义标签)
labelInfo.state = true;
await labelInfo.save();
return {isSuccess:true};
}
\ No newline at end of file
......@@ -9,7 +9,7 @@ import * as enterpriseData from "../../data/enterprise/enterprise";
import * as scoreBiz from "../mobileFuHuaQi/fuHuaQi/score";
import * as fuhuaqiData from "../../data/fuHuaQi/fuhuaqi";
import * as financingData from "../../data/fuHuaQi/monthTask/financing";
import { CHANGEMODE, FUHUASTATE, INDUSTRY, LISTINGSITUATION, MOVEOUTCAUSE, MOVEOUTTRACE, MOVEOUTTYPE, SCOREWAYS, TASKTYPEENUM } from "../../config/enum";
import { CHANGEMODE, ENTERPRISESIZE, FUHUASTATE, INDUSTRY, LISTINGSITUATION, MOVEOUTCAUSE, MOVEOUTCAUSENOTCLIENT, MOVEOUTTRACE, MOVEOUTTYPE, NASHUIRENZIZHI, RAS, SCOREWAYS, STATEENUM, TASKTYPEENUM, VIRTUALCAUSE } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum";
import { findAllNotDisabledFuHuaQi, findFuHuaQiList } from "../../data/fuHuaQi/fuhuaqi";
import { BizError } from "../../util/bizError";
......@@ -29,6 +29,9 @@ import * as startupTeacherData from "../../data/fuHuaQi/instituQualify/startupTe
import * as zjBeyondLayoutData from "../../data/fuHuaQi/instituQualify/zjBeyondLayout";
import { replenishMyEnterpriseInPutInfo, updateMoveOutInfo } from "../mobileFuHuaQi/enterprise/myEnterprise";
import { findEnterpriseInitialTeamsByParam } from "../../data/enterprise/initialTeam";
import { count } from "console";
import { onceSheetBecomeOfblockData } from "../../util/analysisExcel";
import { changeEnumValue } from "../../util/verificationEnum";
const xlsx = require('node-xlsx');
const path = require('path');
......@@ -1084,4 +1087,358 @@ export async function enterpriseOutAndInMoverOut() {
}
return {isSuccess:true}
}
/**更新2024年的分数 */
export async function updteScortFor2024() {
let scoreList = await scoreData.findScoreDataByParam({});
for (let i = 0; i < scoreList.length; i++) {
/**上一次评分 */
// lastScore:{type:Number, default:0}//在获取列表的时候要同步数据
let {startScore, uscc, myDataScore, baseDataScore, myEnterpriseScore, taskScore} = scoreList[i];
// await scoreData.findFuHuaQiScoreInfo(uscc);
/**计算分数 */
let count = startScore+myDataScore+baseDataScore+myEnterpriseScore+taskScore;
let change = 0;
let lastYearStar = 0;
if (count <= 100) {
change = -2;
lastYearStar = 1;
} else if (count > 100 && count <= 300) {
change = -1;
lastYearStar = 2;
} else if (count > 300 && count <= 500) {
change = 0;
lastYearStar = 3;
}else if (count > 500 && count <= 600) {
change = 1;
lastYearStar = 4;
}else if (count > 600) {
change = 2;
lastYearStar = 5;
}
let taskList = await taskData.findTaskListByParam({fuHuaQiUscc:uscc, key:{"$gt":20240, "$lt":20245}});
let check = 0;
let notCheck = 0;
taskList.forEach(item => {
let {isSubmit} = item;
if (isSubmit) check += 5;
else notCheck -= 10
});
//计算任务分
let newTask = check + notCheck;
let newStartScore = startScore - change;
let newScore = newStartScore+myDataScore+baseDataScore+myEnterpriseScore+newTask;
//添加日志
await scoreLogData.addLog(uscc, SCOREWAYS.分值重置, CHANGEMODE.减少, newScore, newScore-count);
let newInfo = await scoreData.findFuHuaQiScoreInfo(uscc);
newInfo.updateTime = new Date().valueOf();
newInfo.taskScore = newTask;
newInfo.lastYearStar = newStartScore;
await newInfo.save();
}
console.log("分数更新完毕");
return {isSuccess:true}
}
/**
* 第二次修改
* @returns
*/
export async function repairResettingScore() {
let scoreList = await scoreData.findScoreDataByParam({});
// for (let i = 0; i < scoreList.length; i++) {
// let { uscc } = scoreList[i];
// let taskList = await taskData.findTaskListByParam(
// {
// fuHuaQiUscc:uscc,
// year:2024
// }
// );
// let check = 0;
// let notCheck = 0;
// taskList.forEach(item => {
// let {isSubmit, key} = item;
// if (key == 20245) {
// if (isSubmit) check += 5;
// } else {
// if (isSubmit) check += 5;
// else notCheck -= 10
// }
// });
// let task2023List = await taskData.findTaskListByParam({year:2023, fuHuaQiUscc:uscc});
// let check2023 = 0;
// let notCheck2023 = 0;
// task2023List.forEach(item => {
// let {isSubmit, task} = item;
// if (isSubmit) check2023 += 5;
// else notCheck2023 -= 10
// });
// let taskCount2023 = check2023 + notCheck2023;//2023年度任务总分
// console.log();
// }
// return
for (let i = 0; i < scoreList.length; i++) {
//延续分数 然后重置
let { uscc, lastYearStar, myDataScore, baseDataScore, myEnterpriseScore, startScore } = scoreList[i];
let task2023List = await taskData.findTaskListByParam({year:2023, fuHuaQiUscc:uscc});
let check2023 = 0;
let notCheck2023 = 0;
task2023List.forEach(item => {
let {isSubmit} = item;
if (isSubmit) check2023 += 5;
else notCheck2023 -= 10
});
let taskCount2023 = check2023 + notCheck2023;//2023年度任务总分
let count2023 = 400 + myDataScore + baseDataScore + myEnterpriseScore + taskCount2023;
let change = 0;
let newLastYearStar = 0;
if (count2023 <= 100) {
change = -2;
newLastYearStar = 1;
} else if (count2023 > 100 && count2023 <= 300) {
change = -1;
newLastYearStar = 2;
} else if (count2023 > 300 && count2023 <= 500) {
change = 0;
newLastYearStar = 3;
}else if (count2023 > 500 && count2023 <= 600) {
change = 1;
newLastYearStar = 4;
}else if (count2023 > 600) {
change = 2;
newLastYearStar = 5;
}
let newStartScore = change + 400;//新的初始分
let newLogInfo = await scoreLogData.getNewLog(uscc);
let logList = await scoreLogData.getLogByParam({uscc, timeMs:{"$gt":1713923224940} });
let socreT = newLogInfo.score;//归档前的本年度分数
for (let j = 0; j < logList.length; j++) {
let {score, timeMs, addScore} = logList[j];
socreT = socreT + addScore;
await scoreLogData.updateInfo({uscc, timeMs}, {score:socreT});
}
/**重置分 */
let taskList = await taskData.findTaskListByParam(
{
fuHuaQiUscc:uscc,
year:2024
}
);
let check = 0;
let notCheck = 0;
taskList.forEach(item => {
let {isSubmit, key} = item;
if (key == 20245) {
if (isSubmit) check += 5;
} else {
if (isSubmit) check += 5;
else notCheck -= 10
}
});
let newTask = check + notCheck;//新的任务分数
let newInfo = await scoreData.findFuHuaQiScoreInfo(uscc);
newInfo.updateTime = new Date().valueOf();
newInfo.taskScore = newTask;
newInfo.startScore = newStartScore;
newInfo.lastYearStar = newLastYearStar;
await newInfo.save();
let updateLogInfo = {
score:(newStartScore+myDataScore+baseDataScore+myEnterpriseScore+newTask),
timeMs:new Date().valueOf(),
addScore:( (newStartScore+myDataScore+baseDataScore+myEnterpriseScore+newTask) - socreT ),
};
await scoreLogData.updateInfo({uscc, ways:SCOREWAYS.分值重置 }, updateLogInfo);
}
console.log("分数更新完毕");
return {isSuccess:true}
}
export async function outPutOnceEnterprise91310115MA1K4TB91Q() {
await updateMoveOutInfo("91310115MA1K3TAP0N", "91310115MA1K4TB91Q", MOVEOUTTYPE.非毕业迁出, MOVEOUTTRACE.迁出孵化器_仍在张江, [MOVEOUTCAUSENOTCLIENT.办公空间拓展_无合适办公空间_]);
console.log("迁出成功");
}
/*第一次清洗企业数据 */
export async function ETL() {
//比对名称和uscc 有一个相同认为是同一个公司
let fhqNameMap = await fuhuaqiData.findAllFuHuaQiOperationNameMap();
let data = onceSheetBecomeOfblockData('第一批企业数据校验结果.xlsx', 'Sheet1');
let dataList = data[0].blockData;
for (let i = 1; i < dataList.length; i++) {
let itemList = dataList[i];
let 原文件导入名称 = itemList[0];
let 系统匹配企业名称 = itemList[1];
let 登记状态 = itemList[2];
let 法定代表人 = itemList[3];
let 注册资本 = itemList[4];
let 实缴资本 = itemList[5];
let 成立日期 = itemList[6];
let 统一社会信用代码 = itemList[7];
let 企业地址 = itemList[8];
let 所属省份 = itemList[9];
let 所属城市 = itemList[10];
let 所属区县 = itemList[11];
let 电话 = itemList[12];
let 更多电话 = itemList[13];
let 邮箱 = itemList[14];
let 更多邮箱 = itemList[15];
let 企业机构类型 = itemList[16];
let 纳税人识别号 = itemList[17];
let 注册号 = itemList[18];
let 组织机构代码 = itemList[19];
let 参保人数 = itemList[20];
let 参保人数所属年报 = itemList[21];
let 核准日期 = itemList[22];
let 营业期限 = itemList[23];
let 国标行业门类 = itemList[24];
let 国标行业大类 = itemList[25];
let 国标行业中类 = itemList[26];
let 国标行业小类 = itemList[27];
let 企查查行业门类 = itemList[28];
let 企查查行业大类 = itemList[29];
let 企查查行业中类 = itemList[30];
let 企查查行业小类 = itemList[31];
let 企业规模 = itemList[32];
let 曾用名 = itemList[33];
let 英文名 = itemList[34];
let 官网 = itemList[35];
let 通信地址 = itemList[36];
let 企业简介 = itemList[37];
let 经营范围 = itemList[38];
let 登记机关 = itemList[39];
let 纳税人资质 = itemList[40];
let 最新年报年份 = itemList[41];
let 企业经营状态 = itemList[42];
let enterpriseInfo = await enterpriseData.selectOneEnterpriseByParam({"$or":[{name:系统匹配企业名称}, {uscc:统一社会信用代码}]});
if (!enterpriseInfo || !enterpriseInfo.uscc) {
console.log(`跳过点1 ${i} 数据为 ${统一社会信用代码} ${系统匹配企业名称}`);
continue;
}
/**处理注销企业 */
if (统一社会信用代码 == "-") {
console.log(`跳过点2 ${i} 数据为 ${统一社会信用代码} ${系统匹配企业名称}`);
continue;
}
/**名字相同 uscc不同 */
if (enterpriseInfo.uscc != 统一社会信用代码) {
enterpriseInfo.uscc = 统一社会信用代码;
}
if (enterpriseInfo.name != 系统匹配企业名称) {
enterpriseInfo.name = 系统匹配企业名称;
}
/**核对基础信息,注册时间,注册地址,经营地址等 */
if (成立日期 != "-") {
enterpriseInfo.logonTime = new Date(成立日期).valueOf();
}
enterpriseInfo.logonAddress = [所属省份, 所属城市, 所属区县, 企业地址 ];
if (经营范围 != "-" && enterpriseInfo.mainBusiness) {
enterpriseInfo.mainBusiness = 经营范围;
}
let ras = RAS.续存;
if (登记状态.indexOf("注销") != -1) {
//企业注销 注销将企业改成迁出
let 等级状态数组 = 登记状态.split("(");
if (等级状态数组[1]) {
enterpriseInfo.logOffMS = new Date(等级状态数组[1].replace(")", "")).valueOf();
}
enterpriseInfo.state = FUHUASTATE.迁出;
enterpriseInfo.moveOutType = MOVEOUTTYPE.企业注销;
ras = RAS.注销;
}
/** 增补字段 */
enterpriseInfo.RAS = ras;//登记状态
enterpriseInfo.legalPerson = 法定代表人;//法人
enterpriseInfo.zhuceziben = 注册资本;//注册资本
enterpriseInfo.shijiaoziben = 实缴资本;//实缴资本
enterpriseInfo.dianHua = 电话;//电话
enterpriseInfo.gengDuoDianHua = 更多电话;//更多电话
enterpriseInfo.mail = 邮箱;//邮箱
enterpriseInfo.moreMail = 更多邮箱;//更多邮箱
enterpriseInfo.enterpriseType = 企业机构类型;//企业(机构)类型
enterpriseInfo.zhuCeHao = 注册号;//注册号
enterpriseInfo.zuZhiJiGouDaiMa = 组织机构代码;//组织机构代码
enterpriseInfo.canBaoRenShu = 参保人数 == "-" || !参保人数 ? 0: parseInt(参保人数); //参保人数
enterpriseInfo.canBaoRenShuNianBao = 参保人数所属年报 == "-" || !参保人数所属年报 ? 0: parseInt(参保人数所属年报); //参保人数所属年报
enterpriseInfo.yingYeQiXian = 营业期限;//营业期限
switch (企业规模) {
case 'XS(微型)': enterpriseInfo.qiYeGuiMo = ENTERPRISESIZE.微型;break;
case 'S(小型)': enterpriseInfo.qiYeGuiMo = ENTERPRISESIZE.小型;break;
case 'M(中型)': enterpriseInfo.qiYeGuiMo = ENTERPRISESIZE.中型;break;
case 'L(大型)': enterpriseInfo.qiYeGuiMo = ENTERPRISESIZE.大型;break;
default: enterpriseInfo.qiYeGuiMo = ENTERPRISESIZE.未知;break;
}
enterpriseInfo.guanWang = 官网;//官网
enterpriseInfo.tongXinDiZhi = 通信地址;//通信地址
enterpriseInfo.jianJie = 企业简介;//企业简介
enterpriseInfo.dengJiJiGuan = 登记机关;//登记机关
switch (纳税人资质) {
case 'XS(微型)': enterpriseInfo.naShuiRenZiZhi = NASHUIRENZIZHI.一般纳税人;break;
case '增值税一般纳税人': enterpriseInfo.naShuiRenZiZhi = NASHUIRENZIZHI.增值税一般纳税人;break;
case 'M(中型)': enterpriseInfo.naShuiRenZiZhi = NASHUIRENZIZHI.小规模纳税人;break;
default: enterpriseInfo.naShuiRenZiZhi = NASHUIRENZIZHI.未知;break;
}
enterpriseInfo.zuiXinNianBaoNianFen = 最新年报年份 == "-" || !最新年报年份 ? 0: parseInt(最新年报年份); //最新年报年份
await enterpriseInfo.save();
}
console.log("数据清洗结束");
}
export async function jiaoyanshuju() {
// let list = await enterpriseData.findEnterpriseList({fuHuaQiUscc:"913100006317952255", state:{"$ne":4} });
// let 缺失注册时间 = 0;
// let 缺失注册时间的企业 = '';
// let 缺失注册地址 = 0;
// let 缺失经营地址 = 0;
// let 缺失迁入前地址 = 0;
// let 非新建企业 = 0;
// let 实体孵化未填报孵化面积 = 0;
// let 名单 = [];
// let 主营业务缺失 = 0;
// list.forEach(info => {
// if (!info.logonAddress || !info.logonAddress[0]) 缺失注册地址 += 1;
// if (!info.operatingAddress || !info.operatingAddress[0]) 缺失经营地址 += 1;
// if (!info.isCreate) {
// 非新建企业 += 1;
// if (!info.oldLogonAddress || !info.oldLogonAddress[0]) 缺失迁入前地址 += 1;
// }
// if (!info.logonTime) {
// 缺失注册时间 += 1;
// 缺失注册时间的企业 = info.name;
// }
// if (info.state == FUHUASTATE.实体孵化 && !info.leasedArea) {
// 实体孵化未填报孵化面积 += 1;
// 名单.push(info.name);
// }
// if (!info.mainBusiness) 主营业务缺失 += 1;
// });
// let count = list.length;
// console.log();
}
\ No newline at end of file
......@@ -132,3 +132,18 @@ function enterpriseCombinationMessage() {
return str;
}
export async function test() {
let chartStr:any = await checkMsg("分析当前所有再孵企业的行业优势", [enterpriseCombinationMessage()]);
let str = "";
if ( chartStr) {
let rmvList = chartStr.split('\n');
let rmvStr = ``;
rmvList.forEach(itemStr => {rmvStr += itemStr});
str = rmvStr;
}
console.log(str);
console.log();
}
\ No newline at end of file
/**
* 标签系统
*/
import { ENTERPRISESYSTEMLABEL, FHQSYSTEMLABEL, FUHUASTATE, INDUSTRY, LABELGOAL, LABELTYPE, LABELUPDATEROAD, MOVEOUTTYPE, STATEENUM } from "../config/enum";
import { findEnterpriseByUscc, findUsccList } from "../data/enterprise/enterprise";
import * as fuHuaQiLabelLogData from "../data/fuHuaQi/fuHuaQiLabelLog";
import * as enterpriseLabelLogData from "../data/enterprise/enterpriseLabelLog";
import { findFuHuaQiByUSCC, findFuHuaQiOperationNameMapByParam } from "../data/fuHuaQi/fuhuaqi";
import moment = require("moment");
import { selectEnterpriseFinancingAmount } from "../data/enterprise/financingInfo";
import { selectEnterpriseBusinessAmount } from "../data/enterprise/quarterTask/businessdata";
import { addSystemLabel, findOnceLabel } from "../data/label";
import { changeAddToString, getLabelId } from "../tools/system";
import { changeAddresCode, isPointInPolygon } from "../tools/changeAdd";
/**
* 【企业标签】添加单个
* @param uscc
* @param labelId
*/
export async function inLabelToEnterprise(enterpriseInfo, labelId:string, p1?) {
let desc = p1 || '';
let labelItem = {labelId, state:true};
if (!enterpriseInfo.labels) enterpriseInfo.labels = [labelItem];
else {
let checkIndex = -1;
enterpriseInfo.labels.forEach((info, index) => {
if (info.labelId == labelId) checkIndex = index;
});
if (checkIndex != -1 ) {
enterpriseInfo.labels[checkIndex].state = true;
await enterpriseLabelLogData.addOnceLabelLog(enterpriseInfo.uscc, labelId, LABELUPDATEROAD.重新生效, desc);
} else {
enterpriseInfo.labels.push(labelItem);
await enterpriseLabelLogData.addOnceLabelLog(enterpriseInfo.uscc, labelId, LABELUPDATEROAD.失效, desc);
}
}
}
/**
* 【企业标签】修改 使用的时候
* @param uscc
* @param labelIdList
*/
export async function updateLabelToEnterprise(uscc:string, labelIdList, p1?) {
let desc = p1 || '';
let enterpriseInfo = await findEnterpriseByUscc(uscc);
if (!enterpriseInfo.labels) enterpriseInfo.labels = [];
/**遍历老的 */
let oldMap = {};
let delList = [];//删除的标签
enterpriseInfo.labels.forEach((info, index) => {
let {labelId, state} = info;
oldMap[labelId] = {labelId, state, index};
if (labelIdList.indexOf(labelId) == -1) {
delList.push({labelId, index});
}
});
let ct = new Date().valueOf();
let logList = [];
labelIdList.forEach(labelId => {
if (!oldMap[labelId]) {
enterpriseInfo.labels.push({labelId, state:true});
logList.push({uscc, labelId, desc, road:LABELUPDATEROAD.生效, ct});
} else if (!oldMap[labelId].state) {
let {index} = oldMap[labelId];
enterpriseInfo.labels[index].state = true;
logList.push({uscc, labelId, desc, road:LABELUPDATEROAD.重新生效, ct});
}
});
delList.forEach(info => {
let {index, labelId} = info;
enterpriseInfo.labels[index].state = false;
logList.push({uscc, labelId, desc, road:LABELUPDATEROAD.失效, ct});
});
await enterpriseInfo.save();
if (logList.length) await enterpriseLabelLogData.addManyLabelLog(logList);
}
/**
* 【企业标签】失效
* 失效标签不会新增
* @param uscc
* @param labelId
*/
export async function outLabelToEnterprise(enterpriseInfo, labelId:string, p1?) {
let desc = p1 || '';
let checkIndex = -1;
enterpriseInfo.labels.forEach((info, index) => {
if (info.labelId == labelId) checkIndex = index;
});
if (checkIndex != -1 ) {
enterpriseInfo.labels[checkIndex].state = false;
await enterpriseLabelLogData.addOnceLabelLog(enterpriseInfo.uscc, labelId, LABELUPDATEROAD.失效, desc);
}
}
/**
* 【孵化器标签】添加单个
* @param uscc
* @param labelId
*/
export async function inOnceLabelToFuHuaQi(fuHuaQiInfo:any, labelId:string, p1?) {
let desc = p1 || '';
let labelItem = {labelId, state:true};
if (!fuHuaQiInfo.labels) fuHuaQiInfo.labels = [labelItem];
else {
let checkIndex = -1;
fuHuaQiInfo.labels.forEach((info, index) => {
if (info.labelId == labelId) checkIndex = index;
});
if (checkIndex != -1 ) {
fuHuaQiInfo.labels[checkIndex].state = true;
await fuHuaQiLabelLogData.addOnceLabelLog(fuHuaQiInfo.uscc, labelId, LABELUPDATEROAD.重新生效, desc);
} else {
fuHuaQiInfo.labels.push(labelItem);
await fuHuaQiLabelLogData.addOnceLabelLog(fuHuaQiInfo.uscc, labelId, LABELUPDATEROAD.生效, desc);
}
}
}
/**
* 【孵化器标签】修改 使用的时候,不能被.sava()方法嵌套
* @param uscc
* @param labelIdList
*/
export async function updateLabelToFuHuaQi(uscc:string, labelIdList, p1?) {
let desc = p1 || '';
let fuHuaQiInfo = await findFuHuaQiByUSCC(uscc);
if (!fuHuaQiInfo.labels) fuHuaQiInfo.labels = [];
/**遍历老的 */
let oldMap = {};
let delList = [];//删除的标签
fuHuaQiInfo.labels.forEach((info, index) => {
let {labelId, state} = info;
oldMap[labelId] = {labelId, state, index};
if (labelIdList.indexOf(labelId) == -1) {
delList.push({labelId, index});
}
});
let ct = new Date().valueOf();
let logList = [];
labelIdList.forEach(labelId => {
if (!oldMap[labelId]) {
fuHuaQiInfo.labels.push({labelId, state:true});
logList.push({uscc, labelId, desc, road:LABELUPDATEROAD.生效, ct});
} else if (!oldMap[labelId].state) {
let {index} = oldMap[labelId];
fuHuaQiInfo.labels[index].state = true;
logList.push({uscc, labelId, desc, road:LABELUPDATEROAD.重新生效, ct});
}
});
delList.forEach(info => {
let {index, labelId} = info;
fuHuaQiInfo.labels[index].state = false;
logList.push({uscc, labelId, desc, road:LABELUPDATEROAD.失效, ct});
});
await fuHuaQiInfo.save();
if (logList.length) await fuHuaQiLabelLogData.addManyLabelLog(logList);
}
/**
* 【孵化器标签】失效
* @param uscc
* @param labelId
*/
export async function outLabelToFuHuaQi(fuHuaQiInfo:any, labelId:string, p1?) {
let desc = p1 || '';
let checkIndex = -1;
if (!fuHuaQiInfo.labels) fuHuaQiInfo.labels = [];
fuHuaQiInfo.labels.forEach((info, index) => {
if (info.labelId == labelId) checkIndex = index;
});
if (checkIndex != -1 ) {
fuHuaQiInfo.labels[checkIndex].state = false;
await fuHuaQiLabelLogData.addOnceLabelLog(fuHuaQiInfo.uscc, labelId, LABELUPDATEROAD.失效, desc);
await fuHuaQiInfo.sava();
}
}
/**
* 系统标签【被动标签】即:需要系统通过其他条件(时间条件)等判断的
*/
export async function systemLabel() {
/**在孵化企业 */
let usccList = await findUsccList();
let fuHuaQiNameMap = await findFuHuaQiOperationNameMapByParam({});
let addLogList = [];
for (let i = 0; i < usccList.length; i++) {
let {uscc} = usccList[i];
let enterpriseInfo = await findEnterpriseByUscc(uscc);
let industry = enterpriseInfo.industry || [];
let logonTime = enterpriseInfo.logonTime;
let logonAddress = enterpriseInfo.logonAddress;
let fuHuaState = enterpriseInfo.state;//孵化状态
let fuHuaQiName = fuHuaQiNameMap[enterpriseInfo.fuHuaQiUscc];
let zaiFuQiYeSuccess = false;//在孵企业时间符合规则
let logonAddressSuccess = false;//注册地址符合规则
let shiRuZhuFeiFu = false;//是入驻非孵企业
if (logonTime) {
let yearLong = moment().diff(logonTime, 'years');
if (industry.indexOf(INDUSTRY.人工智能及智能制造) != -1 || industry.indexOf(INDUSTRY.生物医药) != -1 || industry.indexOf(INDUSTRY.集成电路) != -1) {
if (yearLong < 5) zaiFuQiYeSuccess = true;
else shiRuZhuFeiFu = true;
} else {//其他领域
if (yearLong < 4) zaiFuQiYeSuccess = true;
else shiRuZhuFeiFu = true;
}
}
if (logonAddress) {
if (addIsInZJ(logonAddress)) logonAddressSuccess = true;
}
let shiZaiFuQiYe = zaiFuQiYeSuccess && logonAddressSuccess;//是在孵企业
let qiYeRongZiDaBiao = await selectEnterpriseFinancingAmount(uscc);//企业融资达标
let yingYeShouRuDaBiao = await selectEnterpriseBusinessAmount(uscc);//营业收入达标
let ct = new Date().valueOf();
if (enterpriseInfo.labels && enterpriseInfo.labels.length) {//原本存在标签,需要进行筛选
let checkMap = {};
enterpriseInfo.labels.forEach((info, index) => {
let {labelId, state} = info;
if (labelId == ENTERPRISESYSTEMLABEL.在孵企业 || labelId == ENTERPRISESYSTEMLABEL.入驻非孵 || labelId == ENTERPRISESYSTEMLABEL.拟毕业企业){
checkMap[labelId] = {labelId, state, index};
}
});
let mingZhongZaiFuQiYe = checkMap[ENTERPRISESYSTEMLABEL.在孵企业];//命中在孵企业
if (!mingZhongZaiFuQiYe) {//未命中,证明原本没有这个标签
//未命中情况下 只需要考虑生效标签
if (shiZaiFuQiYe){
enterpriseInfo.labels.push({labelId:ENTERPRISESYSTEMLABEL.在孵企业, state:true});
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.在孵企业, desc:`${fuHuaQiName}`, road:LABELUPDATEROAD.生效, ct});
}
} else {//原本列表已存在这个标签
if (shiZaiFuQiYe && !mingZhongZaiFuQiYe.state) {
//现在属于在孵企业 且 原本为失效
enterpriseInfo.labels[mingZhongZaiFuQiYe.index].state = true;
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.在孵企业, desc:`${fuHuaQiName}`, road:LABELUPDATEROAD.重新生效, ct});
}
if (!shiZaiFuQiYe && mingZhongZaiFuQiYe.state) {
//不属于在孵企业 且原本为生效
enterpriseInfo.labels[mingZhongZaiFuQiYe.index].state = false;
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.在孵企业, desc:``, road:LABELUPDATEROAD.失效, ct});
}
}
let mingZhongRuZhuFeiFu = checkMap[ENTERPRISESYSTEMLABEL.入驻非孵];//命中入驻非孵
if (!mingZhongRuZhuFeiFu) {//未命中,证明原本没有这个标签
//未命中情况下 只需要考虑生效标签
if (shiRuZhuFeiFu) {
enterpriseInfo.labels.push({labelId:ENTERPRISESYSTEMLABEL.入驻非孵, state:true});
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.入驻非孵, desc:``, road:LABELUPDATEROAD.生效, ct});
}
} else {
//原本列表已存在这个标签
if (shiRuZhuFeiFu && !mingZhongRuZhuFeiFu.state) {
//属于入驻非孵企业 且原本为失效
enterpriseInfo.labels[mingZhongRuZhuFeiFu.index].state = true;
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.入驻非孵, desc:``, road:LABELUPDATEROAD.重新生效, ct});
}
if (!shiRuZhuFeiFu && mingZhongRuZhuFeiFu.state && fuHuaState == FUHUASTATE.迁出) {//企业迁出久失效
//不属于入驻非孵企业 且原本为生效 且 企业迁出
enterpriseInfo.labels[mingZhongRuZhuFeiFu.index].state = false;
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.入驻非孵, desc:``, road:LABELUPDATEROAD.失效, ct});
}
}
/**判断已有的标签里有无生效的 拟毕业 依据条件 */
let manZuBiaoQianYiJu = false;//满足标签依据
if ( (checkMap[ENTERPRISESYSTEMLABEL.高新企业] && checkMap[ENTERPRISESYSTEMLABEL.高新企业].state) ||
(checkMap[ENTERPRISESYSTEMLABEL.小巨人] && checkMap[ENTERPRISESYSTEMLABEL.小巨人].state) ||
(checkMap[ENTERPRISESYSTEMLABEL.专精特新] && checkMap[ENTERPRISESYSTEMLABEL.专精特新].state) ||
(checkMap[ENTERPRISESYSTEMLABEL.上市企业] && checkMap[ENTERPRISESYSTEMLABEL.上市企业].state)
) {
manZuBiaoQianYiJu = true;
}
let mingZhongNiBiYeQiYe = checkMap[ENTERPRISESYSTEMLABEL.拟毕业企业];//命中拟毕业企业
if (qiYeRongZiDaBiao || yingYeShouRuDaBiao || manZuBiaoQianYiJu) {
if (!mingZhongNiBiYeQiYe) {
enterpriseInfo.labels.push({labelId:ENTERPRISESYSTEMLABEL.拟毕业企业, state:true});
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.拟毕业企业, desc:``, road:LABELUPDATEROAD.生效, ct});
} else if (!mingZhongNiBiYeQiYe.state) {
enterpriseInfo.labels[mingZhongNiBiYeQiYe.index].state = true;
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.拟毕业企业, desc:``, road:LABELUPDATEROAD.重新生效, ct});
}
} else {//失效
if(mingZhongNiBiYeQiYe && mingZhongNiBiYeQiYe.state) {
enterpriseInfo.labels[mingZhongNiBiYeQiYe.index].state = false;
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.拟毕业企业, desc:``, road:LABELUPDATEROAD.失效, ct});
}
}
} else {
enterpriseInfo.labels = [];
if (shiZaiFuQiYe) {
enterpriseInfo.labels.push({labelId:ENTERPRISESYSTEMLABEL.在孵企业, state:true});
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.在孵企业, desc:`${fuHuaQiName}`, road:LABELUPDATEROAD.生效, ct});
} else if (shiRuZhuFeiFu) {
enterpriseInfo.labels.push({labelId:ENTERPRISESYSTEMLABEL.入驻非孵, state:true});
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.入驻非孵, desc:``, road:LABELUPDATEROAD.生效, ct});
}
if (qiYeRongZiDaBiao || yingYeShouRuDaBiao) {
enterpriseInfo.labels.push({labelId:ENTERPRISESYSTEMLABEL.拟毕业企业, state:true});
addLogList.push({uscc, labelId:ENTERPRISESYSTEMLABEL.拟毕业企业, desc:``, road:LABELUPDATEROAD.生效, ct});
}
}
await enterpriseInfo.save();
}
//添加日志
if (addLogList.length) {
await enterpriseLabelLogData.addManyLabelLog(addLogList);
}
}
export async function initSystemLabelData() {
let labelInfo = await findOnceLabel(ENTERPRISESYSTEMLABEL.在孵企业);
if (labelInfo && labelInfo.id) {
return;
}
let now = new Date().valueOf();
let systemLabelList = [];
systemLabelList.push({id:'zfqy', labelName:"在孵企业", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:'byqy', labelName:"毕业企业", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:'nbyqy', labelName:"拟毕业企业", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:'rzqy', labelName:"融资企业", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:'ssqy', labelName:"上市企业", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:'gxqy', labelName:"高新企业", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:'zjtxqy', labelName:"专精特新", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:'xjrqy', labelName:"小巨人", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:'rzffqy', labelName:"入驻非孵", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:'xnqy', labelName:"虚拟企业", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:'qcqy', labelName:"迁出企业", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:'qyzx', labelName:"企业注销", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:getLabelId(), labelName:"上市企业", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.自定义标签, state:false});
systemLabelList.push({id:getLabelId(), labelName:"高新企业", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.自定义标签, state:false});
systemLabelList.push({id:getLabelId(), labelName:"专精特新", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.自定义标签, state:false});
systemLabelList.push({id:getLabelId(), labelName:"小巨人", ctMs:now, goal:LABELGOAL.企业, labelType:LABELTYPE.自定义标签, state:false});
systemLabelList.push({id:'fhqzyjspt', labelName:"专业技术平台", ctMs:now, goal:LABELGOAL.孵化器, labelType:LABELTYPE.系统标签, state:false});
systemLabelList.push({id:getLabelId(), labelName:"高质量孵化", ctMs:now, goal:LABELGOAL.孵化器, labelType:LABELTYPE.自定义标签, state:false});
systemLabelList.push({id:getLabelId(), labelName:"高质量培育", ctMs:now, goal:LABELGOAL.孵化器, labelType:LABELTYPE.自定义标签, state:false});
systemLabelList.push({id:getLabelId(), labelName:"加速器", ctMs:now, goal:LABELGOAL.孵化器, labelType:LABELTYPE.自定义标签, state:false});
addSystemLabel(systemLabelList);
}
/**
* 判断地址是否在张江
* @param addList
*/
async function addIsInZJ(addList) {
let addStr = changeAddToString(addList);
if (!addStr) return false;
let resData:any = await changeAddresCode(addStr, addList[0]);
if (!resData.error) {
let result = isPointInPolygon(resData);
return result;
}
return false;
}
/**
* 事件标签
* 事件标签都是系统标签
* 传入的企业对象必须是修改后为保存的
* @param enterpriseInfo
* @param labelId
*/
export function eventLabel(enterpriseInfo, labelId, p1?, p2?, p3?) {
switch (labelId) {
case ENTERPRISESYSTEMLABEL.上市企业:
if (enterpriseInfo.qualification && enterpriseInfo.qualification.isBeOnTheMarket) {
inLabelToEnterprise(enterpriseInfo, labelId, p1);
} else {
outLabelToEnterprise(enterpriseInfo, labelId);
}
break;
case ENTERPRISESYSTEMLABEL.专精特新:
if (enterpriseInfo.qualification && enterpriseInfo.qualification.isZjtx) {
inLabelToEnterprise(enterpriseInfo, labelId, p1);
} else {
outLabelToEnterprise(enterpriseInfo, labelId);
}
break;
case ENTERPRISESYSTEMLABEL.小巨人:
if (enterpriseInfo.qualification && enterpriseInfo.qualification.xjrMs) {
inLabelToEnterprise(enterpriseInfo, labelId, p1);
} else {
outLabelToEnterprise(enterpriseInfo, labelId);
}
break;
case ENTERPRISESYSTEMLABEL.高新企业:
if (enterpriseInfo.qualification && enterpriseInfo.qualification.isHighTech) {
inLabelToEnterprise(enterpriseInfo, labelId, p1);
} else {
outLabelToEnterprise(enterpriseInfo, labelId);
}
break;
case ENTERPRISESYSTEMLABEL.虚拟企业:
if (enterpriseInfo.state == FUHUASTATE.虚拟孵化) {
inLabelToEnterprise(enterpriseInfo, labelId, p1);
} else {
outLabelToEnterprise(enterpriseInfo, labelId);
}
break;
case ENTERPRISESYSTEMLABEL.企业注销:
case ENTERPRISESYSTEMLABEL.毕业企业:
case ENTERPRISESYSTEMLABEL.迁出企业:
if (enterpriseInfo.state == FUHUASTATE.迁出) {
if (enterpriseInfo.moveOutType == MOVEOUTTYPE.企业注销) {
inLabelToEnterprise(enterpriseInfo, ENTERPRISESYSTEMLABEL.企业注销);
} else {
let outStr = "非毕业迁出";
if (enterpriseInfo.moveOutType == MOVEOUTTYPE.毕业迁出) {
inLabelToEnterprise(enterpriseInfo, ENTERPRISESYSTEMLABEL.毕业企业, p1);
outStr = "毕业迁出";
}
inLabelToEnterprise(enterpriseInfo, ENTERPRISESYSTEMLABEL.迁出企业, outStr);
}
} else {
//迁出企业被重新迁入 需要将迁出企业相关标签全部去掉
//outLabelToEnterprise 方法不会主动添加失效标签,所以可以直接使用
outLabelToEnterprise(enterpriseInfo, ENTERPRISESYSTEMLABEL.企业注销);
outLabelToEnterprise(enterpriseInfo, ENTERPRISESYSTEMLABEL.迁出企业);
outLabelToEnterprise(enterpriseInfo, ENTERPRISESYSTEMLABEL.毕业企业);
}
break;
case ENTERPRISESYSTEMLABEL.融资企业:
inLabelToEnterprise(enterpriseInfo, ENTERPRISESYSTEMLABEL.融资企业, p1);
break;
}
}
/**
* 孵化器事件标签
* @param fuHuaQiInfo
* @param labelId
* @param p1
*/
export function fuHuaQiEventLabel(fuHuaQiInfo, labelId, p1?) {
switch (labelId) {
case FHQSYSTEMLABEL.专业技术平台:
if (fuHuaQiInfo.isProfessionalTechnology == STATEENUM.) {
inOnceLabelToFuHuaQi(fuHuaQiInfo, labelId, p1);
} else {
outLabelToFuHuaQi(fuHuaQiInfo, labelId, p1);
}
break;
}
}
\ No newline at end of file
......@@ -4,14 +4,15 @@
*/
import { EnterpriseQualificationUpdateConfig } from "../../../config//eccParam/enterprise";
import { LISTINGSITUATION } from "../../../config/enum";
import { ENTERPRISESYSTEMLABEL, LISTINGSITUATION } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { BizError } from "../../../util/bizError";
import { eccEnumValue } from "../../../util/verificationEnum";
import { eccFormParam } from "../../../util/verificationParam";
import * as enterpriseData from "../../../data/enterprise/enterprise";
import { addEnterprisePoint } from "../../point";
import { ENTERPRISENODEENUM, POINTTYPEENUM } from "../../../config/pointConfig";
import { ENTERPRISENODEENUM } from "../../../config/pointConfig";
import { eventLabel } from "../../label";
......@@ -86,6 +87,20 @@ export async function updateQualification(uscc:string, param) {
enterpriseInfo.qualification = JSON.parse(JSON.stringify(param) );
/**标签 */
if (oldMarketData.isBeOnTheMarket != newMarketData.isBeOnTheMarket) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.上市企业, '企业登记' );
}
if (oldIsZjtxData.isZjtx != newIsZjtxData.isZjtx) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.专精特新, '企业登记');
}
if (oldIsXjrData.isXjr != newIsXjrData.isXjr) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.小巨人, '企业登记');
}
if (oldHighTechData.isHighTech != newHighTechData.isHighTech) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.高新企业, '企业登记');
}
/**修改了之后去掉 红框提示 */
if (!enterpriseInfo.tipsQualification ) {
enterpriseInfo.tipsQualification = true;
......
......@@ -4,7 +4,7 @@
*/
import * as eccFormParamConfig from "../../config/eccParam/enterprise";
import { FINANCINGROUNDS, FUHUAQILNVESTMENTSTYLE } from "../../config/enum";
import { ENTERPRISESYSTEMLABEL, FINANCINGROUNDS, FUHUAQILNVESTMENTSTYLE } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum";
import { EnterpriseFinancingListDataConfig } from "../../config/splitResultConfig";
import { findEnterpriseByUscc } from "../../data/enterprise/enterprise";
......@@ -12,8 +12,9 @@ import * as enterpriseFinancingData from "../../data/enterprise/financingInfo";
import { getFinancingId } from "../../tools/system";
import { BizError } from "../../util/bizError";
import { checkChange, extractData } from "../../util/piecemeal";
import { eccEnumValue } from "../../util/verificationEnum";
import { changeEnumValue, eccEnumValue } from "../../util/verificationEnum";
import { eccFormParam } from "../../util/verificationParam";
import { eventLabel } from "../label";
/**
......@@ -74,6 +75,11 @@ export async function addEnterpriseFinancing(uscc:string, form) {
await enterpriseFinancingData.addFinancingInfo(Object.assign(addInfo, form));
//添加标签
let financingRoundsStr = changeEnumValue(FINANCINGROUNDS, form.financingRounds);
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.融资企业, `获得${financingRoundsStr}融资,${form.financingAmount}万元`);
await enterpriseInfo.save();
return {isSuccess:true};
}
......
......@@ -16,6 +16,8 @@ import * as configEnum from "../../../config/enum";
import { eccFormParam } from "../../../util/verificationParam";
import * as verificationEnumTools from "../../../util/verificationEnum";
import { checkChange, extractData } from "../../../util/piecemeal";
import { eventLabel } from "../../label";
import { findFuHuaQiByUSCC } from "../../../data/fuHuaQi/fuhuaqi";
/**
......@@ -118,6 +120,11 @@ export async function moveInEnterprise(uscc:string, param) {
for (let key in eccFormParamConfig.MoveInEnterpriseParamConfig) {
dataBaseInfo[key] = param[key];
}
/**标签 迁入的是别人迁出的企业*/
let fuHuaQiInfo = await findFuHuaQiByUSCC(uscc);
eventLabel(dataBaseInfo, configEnum.ENTERPRISESYSTEMLABEL.迁出企业, fuHuaQiInfo.operationName);
await dataBaseInfo.save();
} else {
/**添加新注册企业标识 */
......
......@@ -21,6 +21,9 @@ import { findEnterpriseNewTeamData } from "../../../data/enterprise/quarterTask/
import { EnterpriseTeamConfig } from "../../../config/splitResultConfig";
import { findBusinessDataByUsccAndYear } from "../../../data/enterprise/quarterTask/businessdata";
import { selectRepleishData } from "../../../data/enterprise/replenish";
import { eventLabel } from "../../label";
import { ENTERPRISESYSTEMLABEL } from "../../../config/enum";
import { findFuHuaQiByUSCC } from "../../../data/fuHuaQi/fuhuaqi";
......@@ -104,6 +107,7 @@ export async function myEnterprise(uscc:string, state:number, name:string, page:
*/
export async function updatePhysicalInfo(fuHuaQiUscc:string, uscc:string, leasedArea:number) {
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo) throw new BizError(ERRORENUM.该企业不存在, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
if (enterpriseInfo.fuHuaQiUscc != fuHuaQiUscc) throw new BizError(ERRORENUM.无法操作其他孵化器的企业, "修改企业孵化状态 修改为实体",`孵化器 ${fuHuaQiUscc} -> 企业${uscc}`);
......@@ -143,6 +147,13 @@ export async function updatePhysicalInfo(fuHuaQiUscc:string, uscc:string, leased
enterpriseInfo.moveOutType = null;//迁出类型
enterpriseInfo.moveOutCause = [];//迁出原因
enterpriseInfo.moveOutTime = 0;
/**标签*/
let fuHuaQiInfo = await findFuHuaQiByUSCC(fuHuaQiUscc);
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.虚拟企业, fuHuaQiInfo.operationName);
if (oldData.state == configEnum.FUHUASTATE.迁出) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.迁出企业, fuHuaQiInfo.operationName);
}
}
......@@ -206,6 +217,13 @@ export async function updateVirtualInfo(fuHuaQiUscc:string, uscc:string, virtual
};
addFuHuaQiPoint(fuHuaQiUscc, FUHUAQINODEENUM.我的企业_孵化状态, oldData, newData );
/**标签*/
let fuHuaQiInfo = await findFuHuaQiByUSCC(fuHuaQiUscc);
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.虚拟企业, fuHuaQiInfo.operationName);
if (oldData.state == configEnum.FUHUASTATE.迁出) {
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.迁出企业, fuHuaQiInfo.operationName);
}
await enterpriseInfo.save();
......@@ -278,6 +296,7 @@ export async function updateMoveOutInfo(fuHuaQiUscc:string, uscc:string, moveOu
enterpriseInfo.virtualCauseDes = "";//虚拟孵化原因
enterpriseInfo.leasedArea = 0;//租赁面积
/**埋点 -新值*/
let newData = {
leasedArea : 0,
......@@ -291,6 +310,10 @@ export async function updateMoveOutInfo(fuHuaQiUscc:string, uscc:string, moveOu
addFuHuaQiPoint( fuHuaQiUscc, FUHUAQINODEENUM.我的企业_孵化状态, oldData, newData );
/**标签 */
let fuHuaQiInfo = await findFuHuaQiByUSCC(fuHuaQiUscc);
eventLabel(enterpriseInfo, ENTERPRISESYSTEMLABEL.迁出企业, fuHuaQiInfo.operationName);
await enterpriseInfo.save();
/**企业状态改变埋点 */
......@@ -372,7 +395,6 @@ export async function updateMyEnterpriseBaseInfo(fuHuaQiUscc:string, param) {
* @param param 表单
*/
export async function replenishMyEnterpriseInPutInfo(fuHuaQiUscc:string, param) {
eccFormParam("补录新迁入企业信息", eccFormParamConfig.ReplenishMyEnterpriseInPutDataConfig, param );
verificationEnumTools.eccEnumValue('补录新迁入企业信息', 'industry', configEnum.INDUSTRY, param.industry);
if ( !sysTools.eccUscc(param.uscc) ) throw new BizError(ERRORENUM.统一社会信用代码不合法);
......@@ -395,6 +417,10 @@ export async function replenishMyEnterpriseInPutInfo(fuHuaQiUscc:string, param)
for (let key in eccFormParamConfig.MoveInEnterpriseParamConfig) {
dataBaseInfo[key] = param[key];
}
/**标签 迁入的是别人迁出的企业*/
let fuHuaQiInfo = await findFuHuaQiByUSCC(fuHuaQiUscc);
eventLabel(dataBaseInfo, ENTERPRISESYSTEMLABEL.迁出企业, fuHuaQiInfo.operationName);
await dataBaseInfo.save();
} else {
/**添加新注册企业标识 */
......@@ -431,7 +457,7 @@ export async function replenishMyEnterpriseCreateInfo(fuHuaQiUscc:string, param)
/**不能出现重复的统一社会信用代码 草稿的也不行 */
let dataBaseInfo = await enterpriseData.findEnterpriseByUscc(param.uscc);
if ( dataBaseInfo&& dataBaseInfo.uscc) throw new BizError(ERRORENUM.该企业已存在, `${param.uscc}已经在库中存在`);
if ( dataBaseInfo && dataBaseInfo.uscc) throw new BizError(ERRORENUM.该企业已存在, `${param.uscc}已经在库中存在`);
/**添加新注册企业标识 */
param.isCreate = true;//标识此次操作是否是迁入企业并不是新注册企业
......
......@@ -33,6 +33,23 @@ export async function unauditedList(uscc:string, state:number, type:number ) {
query.isSubmit = false;
}
let dataNumberLists = [
{
"key":1,//枚举值
"value":`全部(0)`//按钮文本
},
{
"key":2,//枚举值
"value":`已填报(0)`//按钮文本
},
{
"key":3,//枚举值
"value":`未填报(0)`//按钮文本
},
];
return {dataNumberList:dataNumberLists, dataList:[]};
let businessDataList = [];
let teamDataList = [];
if (type == 2) {
......
......@@ -105,7 +105,7 @@ export async function updateFuHuaQiBaseData(uscc:string, param) {
});
}
if (param.isProfessionalTechnology) {
if ( !param.professionalTechnologyName ) throw new BizError(ERRORENUM.参数错误, "修改孵化器=>我的数据信息", "缺少professionalTechnologyName" );
if (!param.professionalTechnologyName ) throw new BizError(ERRORENUM.参数错误, "修改孵化器=>我的数据信息", "缺少professionalTechnologyName" );
if (!param.professionalTechnologyCreateTime ) throw new BizError(ERRORENUM.参数错误, "修改孵化器=>我的数据信息", "professionalTechnologyCreateTime" );
if (!param.professionalTechnologyAmount) throw new BizError(ERRORENUM.参数错误, "修改孵化器=>我的数据信息", "professionalTechnologyAmount" );
}
......
......@@ -7,10 +7,11 @@ import * as i18nRegisterData from "../../../../data/fuHuaQi/instituQualify/i18nR
import * as icrData from "../../../../data/fuHuaQi/instituQualify/icr";
import * as startupTeacherData from "../../../../data/fuHuaQi/instituQualify/startupTeacher";
import * as zjBeyondLayoutData from "../../../../data/fuHuaQi/instituQualify/zjBeyondLayout";
import { STATEENUM } from "../../../../config/enum";
import { FHQSYSTEMLABEL, FUHUAINDUSTRY, STATEENUM } from "../../../../config/enum";
import * as fuhuaqiData from "../../../../data/fuHuaQi/fuhuaqi";
import { addFuHuaQiPoint } from "../../../point";
import * as pointConfig from "../../../../config/pointConfig";
import { fuHuaQiEventLabel, inOnceLabelToFuHuaQi, outLabelToFuHuaQi } from "../../../label";
/**
......@@ -110,6 +111,10 @@ export async function updateProfessionalTechnology(uscc:string, isProfessionalTe
fuHuaQiInfo.isCooperation= isCooperation;//是否与第三方合作
fuHuaQiInfo.cooperationInstitutions= cooperationInstitutions;//合作机构名称
//标签
await fuHuaQiEventLabel(fuHuaQiInfo, FHQSYSTEMLABEL.专业技术平台, professionalTechnologyName);
await fuHuaQiInfo.save();
return {isSuccess:true};
......
......@@ -191,7 +191,6 @@ async function myEnterpriseScoreCount(uscc:string) {
* @param year 年度时间戳
*/
export async function fuHuaQiScoreLog(uscc:string, year:number) {
let startTime = year;
let endTimeStr = `${new Date(startTime).getFullYear()}-12-31 23:59:59`;
let endTime = new Date(endTimeStr).valueOf();
......@@ -253,6 +252,9 @@ function waysStr(ways:number, type:number, changeMode) {
if (ways == SCOREWAYS.我的数据) {
str += "我的数据更新"
}
if (ways == SCOREWAYS.分值重置) {
str += "上年度分归档,本年度基础分调整"
}
if (CHANGEMODE.增加 == changeMode) str += " 上涨";
else str += " 下降";
return str;
......@@ -284,3 +286,4 @@ export async function rankList(uscc:string) {
return {rankList, thisFuHuaQiIndex};
}
......@@ -13,7 +13,7 @@
*/
import moment = require("moment");
import { SCOREWAYS, TASKTYPEENUM } from "../../../../config/enum";
import { ENTERPRISESYSTEMLABEL, FINANCINGROUNDS, SCOREWAYS, TASKTYPEENUM } from "../../../../config/enum";
import { ERRORENUM } from "../../../../config/errorEnum";
import * as enterpriseData from "../../../../data/enterprise/enterprise";
import * as financingData from "../../../../data/fuHuaQi/monthTask/financing";
......@@ -26,6 +26,8 @@ import { getPwdMd5, getThisMonthMs, md5PwdStr } from "../../../../tools/system";
import * as taskTool from "../../../../tools/taskTool";
import * as scoreBiz from "../score";
import { eventLabel } from "../../../label";
import { changeEnumValue } from "../../../../util/verificationEnum";
/**
......@@ -232,6 +234,7 @@ export async function checkTask(uscc:string, taskType:number) {
submitCount = await enterpriseData.findEnterpriseCount({taskId:TaskId});
/**更新分数 */
await scoreBiz.updateScore(uscc, SCOREWAYS.任务得分, true, TASKTYPEENUM.新注册或迁入企业登记);
break;
case TASKTYPEENUM.融资企业填报:
/**将录入的融资数据 draftLock 改为 true 表示不再是草稿状态 */
......@@ -239,6 +242,15 @@ export async function checkTask(uscc:string, taskType:number) {
submitCount = await financingData.findFinancingCount({taskId:TaskId});
/**更新分数 */
await scoreBiz.updateScore(uscc, SCOREWAYS.任务得分, true, TASKTYPEENUM.融资企业填报);
/**更新标签 */
let finacingDataList = await financingData.findFinancingListByTaskId(TaskId, true);
for (let i= 0; i < finacingDataList.length; i++) {
let itemEnterpriseInfo = await enterpriseData.findEnterpriseByUscc(finacingDataList[i].uscc);
let financingRoundsStr = changeEnumValue(FINANCINGROUNDS, finacingDataList[i].financingRounds);
eventLabel(itemEnterpriseInfo, ENTERPRISESYSTEMLABEL.融资企业, `获得${financingRoundsStr}融资,${finacingDataList[i].financingAmount}万元`);
await itemEnterpriseInfo.save();
}
break;
}
......@@ -255,7 +267,7 @@ export async function checkTask(uscc:string, taskType:number) {
/**
* 发放任务
* 系统自发
* 系统自发 6.0改成管理后台手动触发 此方法弃用
* 下发任务的同时初始化月度报表数据
*/
export async function provideMonthTask() {
......
import moment = require("moment");
import { ENTERPRISESYSTEMLABEL, FUHUASTATE, GUANWEIHUIMANANGENTERPRISELABEL, INDUSTRY, LABELGOAL, MOVEOUTTYPE } from "../../../config/enum";
import { findEnterpriseByUscc, findEnterpriseCount, findEnterpriseListToPage } from "../../../data/enterprise/enterprise";
import { findLabelLogByParam } from "../../../data/enterprise/enterpriseLabelLog";
import { getLabelNamMap } from "../../../data/label";
import { changeAddToString } from "../../../tools/system";
import { extractData } from "../../../util/piecemeal";
import { changeEnumManyValue, changeEnumValue, eccEnumValue } from "../../../util/verificationEnum";
import { BizError } from "../../../util/bizError";
import { ERRORENUM } from "../../../config/errorEnum";
import { findFuHuaQiByUSCC, findFuHuaQiOperationNameMapByParam } from "../../../data/fuHuaQi/fuhuaqi";
export async function enterpriseInfomation(uscc:string) {
let dbData = await findEnterpriseByUscc(uscc);
if (!dbData || !dbData.uscc) throw new BizError(ERRORENUM.该企业不存在, uscc);
let config = {
name:{key:"名称"},
uscc:{key:"统一信用代码"},
mainBusiness:{key:"主营业务"},
industry:{key:"领域"},
leasedArea:{key:"租赁面积(平方米)"},
isNaturalPersonHolding:{key:"是否自然人控股企业"},
firstIncubationTime:{key:"首次入孵时间"},
timeOfImmigration:{key:"迁入时间"},
logonTime:{key:"注册时间"},
logonAddress:{key:"注册地址"},
operatingAddress:{key:"经营地址"},
oldLogonAddress:{key:"迁入前地址"},
};
let enterpriseInfo:any = await extractData(config, dbData, false);
/**枚举转换 */
//孵化领域
enterpriseInfo.industry = changeEnumManyValue(INDUSTRY, enterpriseInfo.industry);
if (enterpriseInfo.industry.length > 1) enterpriseInfo.industryStr = "多领域";
else enterpriseInfo.industryStr = enterpriseInfo.industry[0];
//注册地址
enterpriseInfo.logonAddressStr = changeAddToString(enterpriseInfo.logonAddress);
//经营地址
enterpriseInfo.operatingAddressStr = changeAddToString(enterpriseInfo.operatingAddress);
//迁入地址
enterpriseInfo.oldLogonAddressStr = changeAddToString(enterpriseInfo.oldLogonAddress);
enterpriseInfo.firstIncubationTime = moment(enterpriseInfo.firstIncubationTime).format("YYYY-MM-DD");
enterpriseInfo.timeOfImmigration = moment(enterpriseInfo.timeOfImmigration).format("YYYY-MM-DD");
enterpriseInfo.logonTime = moment(enterpriseInfo.logonTime).format("YYYY-MM-DD");
//知识产权
enterpriseInfo.alienPatent = 0;//海外专利
enterpriseInfo.classIPatent = 0;//一类专利
enterpriseInfo.secondClassPatent = 0;//二类专利
if (dbData.intellectualProperty) {
enterpriseInfo.alienPatent = dbData.intellectualProperty.alienPatent;//海外专利
enterpriseInfo.classIPatent = dbData.intellectualProperty.classIPatent;//一类专利
enterpriseInfo.secondClassPatent = dbData.intellectualProperty.secondClassPatent;//二类专利
}
let fuHuaQiInfo = await findFuHuaQiByUSCC(dbData.fuHuaQiUscc);
enterpriseInfo.fuHuaQiName = fuHuaQiInfo.operationName;//孵化器名称
//标签动态
let dbLogList = await findLabelLogByParam({uscc:uscc});
let labelLogList = [];
let labelNameMap = await getLabelNamMap(LABELGOAL.企业);
dbLogList.forEach(info => {
let { labelName } = labelNameMap[info.labelId];
labelLogList.push({
time:moment(info.ct).format("YYYY-MM-DD"),
name:labelName,
desc:info.desc,
road:info.road > 2 ? "失效" : "生效"
});
});
//标签
enterpriseInfo.labels = [];
if (dbData.labels && dbData.labels.length) {
dbData.labels.forEach(info => {
if (labelNameMap[info.labelId] && labelNameMap[info.labelId].state) {
enterpriseInfo.labels.push({
key:labelNameMap[info.labelId].labelName,
state:!info.state
});
}
});
}
return {enterpriseInfo, labelLogList};
}
/**
* 企业库列表
* @param name
* @param pageNumber
* @param labelId
* @param year
* @param month
* @returns
*/
export async function enterpriseList(name:string, pageNumber:number, labelId:string, year:number, month:number) {
if ( labelId ) eccEnumValue("企业库列表", "标签id", GUANWEIHUIMANANGENTERPRISELABEL, labelId);
let startMs = 0;
let endMs = 0;
if (year && month) {
endMs = moment(new Date(`${year}-${month}-1 00:00:00`).valueOf()).add(1, 'months').valueOf();
startMs = moment(new Date(`${year}-${month}-1 00:00:00`).valueOf()).valueOf();
} else if (year && !month) {
throw new BizError(ERRORENUM.缺少月份参数);
}
let param:any = {};
if (name) param.name = name;
if (labelId == GUANWEIHUIMANANGENTERPRISELABEL.新注册企业 || labelId == GUANWEIHUIMANANGENTERPRISELABEL.新迁入企业) {
param.taskId = {"$ne":null};
param.draftLock = true;
if (!year || !month) throw new BizError(ERRORENUM.参数错误);
param.createTime = {"$gt":startMs, "$lt":endMs};
param.isCreate = labelId == GUANWEIHUIMANANGENTERPRISELABEL.新注册企业;
} else if (labelId == ENTERPRISESYSTEMLABEL.融资企业 || labelId == ENTERPRISESYSTEMLABEL.迁出企业 || labelId == ENTERPRISESYSTEMLABEL.毕业企业 || labelId == ENTERPRISESYSTEMLABEL.企业注销) {
if (labelId != ENTERPRISESYSTEMLABEL.融资企业) {
param.state = FUHUASTATE.迁出;
if (labelId == ENTERPRISESYSTEMLABEL.毕业企业) param.moveOutType = MOVEOUTTYPE.毕业迁出;
if (labelId == ENTERPRISESYSTEMLABEL.企业注销) param.moveOutType = MOVEOUTTYPE.企业注销;
}
//todo 融资企业
} else if (labelId) {
if (year || month) throw new BizError(ERRORENUM.多余年份与月份参数);
param.labels = {"$elemMatch": { "labelId":labelId, "state":true }};
}
let fuHuaQiNameMap = await findFuHuaQiOperationNameMapByParam({});
let dbList = await findEnterpriseListToPage(param, (pageNumber-1)*10);
let dataCount = await findEnterpriseCount(param);
let labelNameMap = await getLabelNamMap(LABELGOAL.企业);
const config = {
uscc:{key:"统一信用代码"},
name:{key:"企业名称"},
industry:{key:"领域"},
logonTime:{key:"注册时间"},
leasedArea:{key:"租赁面积(平方米)"},
logonAddress:{key:"注册地址"},
operatingAddress:{key:"经营地址"}
};
let dataList = [];
dbList.forEach(info => {
let itemData:any = extractData(config, info, false);
//注册地址
itemData.logonAddressStr = changeAddToString(info.logonAddress);
//经营地址
itemData.operatingAddressStr = changeAddToString(info.operatingAddress);
itemData.labels = [];
if (info.labels && info.labels.length) {
info.labels.forEach(info => {
if (labelNameMap[info.labelId] && !labelNameMap[info.labelId].state) {
itemData.labels.push({
key:labelNameMap[info.labelId].labelName,
state:info.state
});
}
});
}
itemData.industry = changeEnumValue(INDUSTRY, info.industry);
itemData.logonTime = moment(info.logonTime).format("YYYY/MM/DD");
itemData.fuHuaQiName = fuHuaQiNameMap[info.fuHuaQiUscc] || "-";
dataList.push(itemData);
});
return {dataList, dataCount};
}
import moment = require("moment");
import * as configEnum from "../../../config/enum";
import { findLabelLogByParam } from "../../../data/fuHuaQi/fuHuaQiLabelLog";
import { findFuHuaQiByUSCC, findFuHuaQiCount, findFuHuaQiListByPage } from "../../../data/fuHuaQi/fuhuaqi";
import { getLabelNamMap } from "../../../data/label";
import { changeAddToString } from "../../../tools/system";
import { extractData } from "../../../util/piecemeal";
import { changeEnumManyValue, changeEnumValue, eccEnumValue } from "../../../util/verificationEnum";
import { findEnterpriseCount } from "../../../data/enterprise/enterprise";
/**
* 孵化器库-孵化器详情
* @param uscc
*/
export async function fuHuaQiInfomation(uscc:string) {
let dbData = await findFuHuaQiByUSCC(uscc);
let config = {
name:{key:"名称"},
operationName:{key:"运营机构名称"},
uscc:{key:"统一信用代码"},
incubatedAcreage:{key:"在孵面积㎡)"},
acreageTotal:{key:"孵化器总面积㎡)"},
acreagePersonalUse:{key:"孵化器自用面积㎡)"},
institutionalNature:{key:"机构性质"},
operationModel:{key:"运营模式 "},
industry:{key:"孵化领域"},
logonTime:{key:"注册时间"},
identificationTime:{key:"认定时间"},
lv:{key:"孵化器级别"},
caiLiHuGuanDi:{key:"财力户管地"},
fuHuazhuCeDiZhi:{key:"孵化注册地址"},
fuHuaLianXiDiZhi:{key:"孵化联系地址"},
liaison:{key:"联系人"},
liaisonPhone:{key:"联系电话"},
personInCharge:{key:"负责人"},
personInChargePhone:{key:"负责人联系电话"},
foundingTeamType:{key:"创业团队类型"},
};
let fuHuaQiInfo:any = await extractData(config, dbData, false);
/**枚举转换 */
//孵化领域
fuHuaQiInfo.industry = changeEnumManyValue(configEnum.FUHUAINDUSTRY, fuHuaQiInfo.industry);
if (fuHuaQiInfo.industry.length > 1) fuHuaQiInfo.industryStr = "多领域";
else fuHuaQiInfo.industryStr = fuHuaQiInfo.industry[0];
//孵化器性质
fuHuaQiInfo.institutionalNature = changeEnumValue(configEnum.INSTITUTIONALNATURE, fuHuaQiInfo.institutionalNature);
//f孵化器级别
fuHuaQiInfo.lv = changeEnumValue(configEnum.FUHUAQILV, fuHuaQiInfo.lv);
//孵化器运营模式
fuHuaQiInfo.operationModel = changeEnumManyValue(configEnum.OPERATIONMODEL, fuHuaQiInfo.operationModel);
//注册地址
fuHuaQiInfo.fuHuazhuCeDiZhiStr = changeAddToString(fuHuaQiInfo.fuHuazhuCeDiZhi);
//联系地址
fuHuaQiInfo.fuHuaLianXiDiZhiStr = changeAddToString(fuHuaQiInfo.fuHuaLianXiDiZhi);
//创业团队类型
fuHuaQiInfo.foundingTeamType = changeEnumValue(configEnum.TEAM, fuHuaQiInfo.foundingTeamType);
/**孵化信息 */
//在孵企业
fuHuaQiInfo.zaiFuQiYe = await findEnterpriseCount({fuHuaQiUscc:uscc, });
//虚拟企业
fuHuaQiInfo.xuNiQiYe = await findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.虚拟孵化 });
//实体企业
fuHuaQiInfo.shiTiQiYe = await findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.实体孵化});
//迁出企业
fuHuaQiInfo.qianChuQiYe = await findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.迁出});
//入驻非孵
fuHuaQiInfo.ruZhuFeiFu = await findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.实体孵化, labels: {"$elemMatch": { "labelId":configEnum.ENTERPRISESYSTEMLABEL.入驻非孵, "state":true }} });
//累计孵化
fuHuaQiInfo.leiJiFuHua = await findEnterpriseCount({fuHuaQiUscc:uscc, state:configEnum.FUHUASTATE.迁出, moveOutType:configEnum.MOVEOUTTYPE.毕业迁出});
//创始团队
fuHuaQiInfo.foundingTeam = [];
if (dbData.foundingTeam) {
dbData.foundingTeam.forEach(info => {
fuHuaQiInfo.foundingTeam.push(
{
memberName:info.memberName,
memberSex:changeEnumValue(configEnum.SEX, info.memberSex),
memberAge:info.memberAge,
memberDEGREE:changeEnumValue(configEnum.DEGREE, info.memberDEGREE),
memberSchool:info.memberSchool,
des:info.des
}
);
});
}
fuHuaQiInfo.logonTime = moment(fuHuaQiInfo.logonTime).format("YYYY/MM/DD");
fuHuaQiInfo.identificationTime = moment(fuHuaQiInfo.identificationTime).format("YYYY/MM/DD");
//标签动态
let dbLogList = await findLabelLogByParam({uscc:fuHuaQiInfo.uscc});
let labelLogList = [];
let labelNameMap = await getLabelNamMap(configEnum.LABELGOAL.孵化器);
dbLogList.forEach(info => {
let { labelName } = labelNameMap[info.labelId];
labelLogList.push({
time:moment(info.ct).format("YYYY-MM-DD"),
name:labelName,
desc:info.desc,
road:info.road > 2 ? "失效" : "生效"
});
});
//标签
fuHuaQiInfo.labels = [];
if (dbData.labels && dbData.labels.length) {
dbData.labels.forEach(info => {
if (labelNameMap[info.labelId] && labelNameMap[info.labelId].state) {
fuHuaQiInfo.labels.push({
key:labelNameMap[info.labelId].labelName,
state:info.state
});
}
});
}
return {fuHuaQiInfo, labelLogList};
}
/**
* 孵化器管理列表
* @param name
* @param pageNumber
* @param labelId
* @returns
*/
export async function fuHuaQiList(name:string, pageNumber:number, labelId:string) {
let param:any = {uscc:{"$ne":"123456789123456789"}};
if ( labelId ) {
param.labels = {"$elemMatch": { "labelId":labelId, "state":true }};
}
if (name) {
param.name = {"$regex":`${name}`};
}
let dbList = await findFuHuaQiListByPage(param, (pageNumber-1)*10);
let dataCount = await findFuHuaQiCount(param);
let labelNameMap = await getLabelNamMap(configEnum.LABELGOAL.孵化器);
const config = {
uscc:{key:"统一信用代码"},
operationName:{key:"企业名称"},
logonTime:{key:"注册时间"},
lv:{key:"孵化器级别"},
fuHuazhuCeDiZhi:{key:"孵化注册地址"},
fuHuaLianXiDiZhi:{key:"孵化联系地址"}
};
let dataList = [];
dbList.forEach(info => {
let itemData:any = extractData(config, info, false);
//孵化注册地址
itemData.fuHuazhuCeDiZhiStr = changeAddToString(info.fuHuazhuCeDiZhi);
//孵化联系地址
itemData.fuHuaLianXiDiZhiStr = changeAddToString(info.fuHuaLianXiDiZhi);
if (!itemData.fuHuazhuCeDiZhiStr && info.hatchingGround && info.hatchingGround[0]) {
itemData.fuHuazhuCeDiZhiStr = changeAddToString(info.hatchingGround[0].personInChargeAddress);
}
itemData.labels = [];
if (info.labels && info.labels.length) {
info.labels.forEach(info => {
if (labelNameMap[info.labelId] && !labelNameMap[info.labelId].state) {
itemData.labels.push({
key:labelNameMap[info.labelId].labelName,
state:info.state
});
}
});
}
itemData.lv = changeEnumValue(configEnum.FUHUAQILV, info.lv);
itemData.logonTime = moment(info.logonTime).format("YYYY/MM/DD");
dataList.push(itemData);
});
return {dataList, dataCount}
}
import moment = require("moment");
import { TASKTYPEENUM } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { fuHuaQiEnterpairseCount } from "../../../data/enterprise/enterprise";
import { findFuHuaQiOperationNameMapByOperationName } from "../../../data/fuHuaQi/fuhuaqi";
import { statsFinancingEnterpriseAndCount } from "../../../data/fuHuaQi/monthTask/financing";
import { findMonthTableList } from "../../../data/fuHuaQi/monthTask/monthTable";
import { distinctCycle, findTaskListByParam } from "../../../data/fuHuaQi/monthTask/task";
import { BizError } from "../../../util/bizError";
export async function taskMonthsList() {
let cycleList = await distinctCycle();
let dataList = [];
cycleList.forEach(taskId => {
let str = `${taskId}`;
let dateKey = `${str.slice(0, 4)}-${str.slice(4, 10)}`
dataList.push({
key:dateKey,
value:parseInt(str)
});
});
return {dataList}
}
export async function taskList(submitType:number, taskYear:number, taskMonth:number, name:string, page:number) {
if (submitType<1 || submitType>3) throw new BizError(ERRORENUM.参数错误);
let fuHuaQiMap = {};
//获取数据年月
let dataTime = moment(new Date(`${taskYear}-${taskMonth}-1 00:00:01`).valueOf()).subtract(1,'month');
let year = dataTime.year();
let month = dataTime.month()+1;
let taskKey = `${taskYear}${taskMonth}`;
//获取任务状态
let takList = await findTaskListByParam({year, month});
takList.forEach(info => {
let {type, fuHuaQiUscc, isSubmit} = info;
if (!fuHuaQiMap[fuHuaQiUscc]) {
fuHuaQiMap[fuHuaQiUscc] = {
month:{isSubmit:false, rate:"-"},
enterprise:{isSubmit:false, importCount:"-", registerCount:"-"},
financing:{isSubmit:false, count:"-", amount:"-"},
};
}
switch(type) {
case TASKTYPEENUM.孵化器月度填报:
fuHuaQiMap[fuHuaQiUscc].month.isSubmit = isSubmit;
break;
case TASKTYPEENUM.新注册或迁入企业登记:
fuHuaQiMap[fuHuaQiUscc].enterprise.isSubmit = isSubmit;
break;
case TASKTYPEENUM.融资企业填报:
fuHuaQiMap[fuHuaQiUscc].financing.isSubmit = isSubmit;
break;
}
});
/**出租率 */
let monthTaskList = await findMonthTableList({year, month});
monthTaskList.forEach(info => {
let {occupancyRate, fuHuaQiUscc} = info;
if (fuHuaQiMap[fuHuaQiUscc]) {
fuHuaQiMap[fuHuaQiUscc].month.rate = `${occupancyRate}%`;
}
});
/**新注册新迁入 */
let inputEnterpriseList = await fuHuaQiEnterpairseCount(taskKey);
inputEnterpriseList.forEach(info => {
let {_id, isCreateSum, isNotCreateSum} = info;
if (fuHuaQiMap[_id]) {
fuHuaQiMap[_id].enterprise.importCount = `${isNotCreateSum}`;
fuHuaQiMap[_id].enterprise.registerCount = `${isCreateSum}`;
}
});
let financingList = await statsFinancingEnterpriseAndCount(taskKey);
financingList.forEach(info => {
let {_id, enterpriseCount, financingAmount} = info;
if (fuHuaQiMap[_id]) {
fuHuaQiMap[_id].financing.count = `${enterpriseCount}`;
fuHuaQiMap[_id].financing.amount = `${financingAmount}`;
}
});
let nameMapParam = {};
if (name) nameMapParam = {operationName: {"$regex":`${name}`} };
let fhqNameMap = await findFuHuaQiOperationNameMapByOperationName(nameMapParam);
let allDataList = [];
for (let uscc in fuHuaQiMap) {
if (fhqNameMap[uscc]) {
fuHuaQiMap[uscc]["name"] = fhqNameMap[uscc];
let itemState = 0;
if (fuHuaQiMap[uscc].month.isSubmit == false || fuHuaQiMap[uscc].enterprise.isSubmit == false || fuHuaQiMap[uscc].financing.isSubmit == false) {
itemState = 3;
} else {
itemState = 2;
}
if (itemState == submitType || submitType == 1) allDataList.push(fuHuaQiMap[uscc]);
}
}
let dataCount = Object.keys(fuHuaQiMap).length;
/**在全量结果数据里做分页 */
let dataList = allDataList.splice((page-1)*10, page*10);
return {dataCount:dataCount, dataList, pageCount:Math.ceil(dataCount/10)};
}
\ No newline at end of file
/**
* 管委会小程序端主页面
*/
import moment = require("moment");
import { findEnterpriseCount, newEnterpriseIndustry, statsEnterpriseLabels } from "../../data/enterprise/enterprise";
import { findTaskListByParam } from "../../data/fuHuaQi/monthTask/task";
import { statsAvgOccupancyRate } from "../../data/fuHuaQi/monthTask/monthTable";
import { statsFinancingCount, statsFinancingEnterpriseCount } from "../../data/fuHuaQi/monthTask/financing";
import { changeEnumValue } from "../../util/verificationEnum";
import { INDUSTRY, LABELGOAL } from "../../config/enum";
import { getEffectiveLabelMap } from "../../data/label";
import { statsFuHuaQiLabels } from "../../data/fuHuaQi/fuhuaqi";
/**
* 主页
* @param year 数据年
* @param month
*/
export async function stagingHomePageTop(year:number, month:number) {
let lastMonthDate = moment(new Date(`${year}-${month}-1 00:00:00`).valueOf()).subtract(1, 'month');
let lastYear = lastMonthDate.year();
let lastMonth = lastMonthDate.month() + 1;
let taskList = await findTaskListByParam({year, month});
let taskStatsMap = {};
taskList.forEach(info => {
let { fuHuaQiUscc, isSubmit} = info;
if (!taskStatsMap[fuHuaQiUscc]) taskStatsMap[fuHuaQiUscc] = true;
if (!isSubmit) taskStatsMap[fuHuaQiUscc] = false;
});
let taskCount = Object.keys(taskStatsMap).length;
let submitCount = 0;
for (let key in taskStatsMap) {
if (taskStatsMap[key]) submitCount += 1;
}
let statsList = [];
//新注册企业
let registerCount = await findEnterpriseCount({taskId:{"$regex":`${year}${month}$`}, isCreate:true, draftLock:true});
let lastMonthRegisterCount = await findEnterpriseCount({taskId:{"$regex":`${lastYear}${lastMonth}$`}, isCreate:true});
statsList.push({key:"新注册企业", value:registerCount, mom:Math.round(((registerCount-lastMonthRegisterCount)/lastMonthRegisterCount)*10000)/100 });
//新迁入企业
let moveInCount = await findEnterpriseCount({taskId:{"$regex":`${year}${month}$`}, isCreate:false});
let lastMonthMoveInCount = await findEnterpriseCount({taskId:{"$regex":`${lastYear}${lastMonth}$`}, isCreate:false});
statsList.push({key:"新迁入企业", value:moveInCount, mom:Math.round(((moveInCount-lastMonthMoveInCount)/lastMonthMoveInCount)*10000)/100 });
//平均出租率
let occupancyRateAVG = await statsAvgOccupancyRate(year, month);
let lastMonthOccupancyRateAVG = await statsAvgOccupancyRate(lastYear, lastMonth);
statsList.push({key:"平均出租率", value:occupancyRateAVG, mom:Math.round(((occupancyRateAVG-lastMonthOccupancyRateAVG)/lastMonthOccupancyRateAVG)*10000)/100 });
//融资企业数
let financingEnterpriseCount = await statsFinancingEnterpriseCount({taskId:{"$regex":`${year}${month}$`}, draftLock:true});
let lastMonthFinancingEnterpriseCount = await statsFinancingEnterpriseCount({taskId:{"$regex":`${lastYear}${lastMonth}$`}, draftLock:true});
statsList.push({key:"融资企业", value:financingEnterpriseCount, mom:Math.round(((financingEnterpriseCount-lastMonthFinancingEnterpriseCount)/lastMonthFinancingEnterpriseCount)*10000)/100 });
//融资额
let financingCount = await statsFinancingCount({taskId:{"$regex":`${year}${month}$`}, draftLock:true});
let lastMonthFinancingCount = await statsFinancingCount({taskId:{"$regex":`${lastYear}${lastMonth}$`}, draftLock:true});
statsList.push({key:"融资额", value:financingCount, mom:Math.round(((financingCount-lastMonthFinancingCount)/lastMonthFinancingCount)*10000)/100 });
/**新增企业行业分布 */
let industryDBList = await newEnterpriseIndustry(year, month);
let industryList = [];
let industryCount = 0;
industryDBList.forEach(info => {
let {_id, count} = info;
if ( _id ) {
industryList.push({key:changeEnumValue(INDUSTRY, _id), count});
industryCount += count;
}
});
industryList.sort((a, b) => {return b.count - a.count});
for (let i= 0; i < industryList.length; i++) {
let itemValue = industryList[i].count;
industryList[i]["rate"] = Math.round( (itemValue/industryCount)*10000 )/100;
}
return {
taskInfo:{
taskCount,//发送填报表总数
submitCount,//已填报
notSubmitCount:taskCount-submitCount,//未填报
submitRate:Math.round((submitCount/taskCount)*10000)/100,//填报率
notSubmitRate:Math.round( ((taskCount-submitCount)/taskCount)*10000 )/100//未填报率
},
statsList,//卡片列表
industryList//新增企业行业分布
};
}
/**
* 企业标签
*/
export async function enterpriseLabel() {
let labelList = await statsEnterpriseLabels();
let labelNameMap = await getEffectiveLabelMap(LABELGOAL.企业);
let countMap = {};
labelList.forEach(info => {
let id = info._id;
countMap[id] = info.count;
});
let dataList = [];
for (let key in labelNameMap) {
let name = labelNameMap[key].labelName;
dataList.push({
label:name,
count:countMap[key] || 0
});
}
dataList.sort((a,b) => {return b.count-a.count});
return {dataList};
}
/**
* 孵化器标签
*/
export async function fuHuaQiLabel() {
let labelList = await statsFuHuaQiLabels();
let labelNameMap = await getEffectiveLabelMap(LABELGOAL.孵化器);
let countMap = {};
labelList.forEach(info => {
let id = info._id;
countMap[id] = info.count;
});
let dataList = [];
for (let key in labelNameMap) {
let name = labelNameMap[key].labelName;
dataList.push({
label:name,
count:countMap[key] || 0
});
}
dataList.sort((a,b) => {return b.count-a.count});
return {dataList};
}
/**
* 小程序端 管委会 用户基础功能
* 作者: lxm
* 主要包括有 孵化器账号的登录
* 预留好 重置密码 退出登录 接口
*/
import { ERRORENUM } from "../../config/errorEnum";
import { findGuanWeiHuiUserInfoByLoginId } from "../../data/guanWeiHui/guanweihui";
import { BizError } from "../../util/bizError";
import { getPwdMd5, getToken } from "../../tools/system";
import { findFuHuaQiByUSCC } from "../../data/fuHuaQi/fuhuaqi";
const md5 = require("md5");
/**
* 登录
* 4.0版本更新:加入孵化器角色登录
* @param loginId 信用代码
* @param pwd 密码
* @returns resultUserInfo:{uscc, name} 登录后的信息
*/
export async function login(loginId:string, pwd:string) {
let userInfo = await findGuanWeiHuiUserInfoByLoginId(loginId);
if (!userInfo || !userInfo.loginId) throw new BizError(ERRORENUM.账号不存在, loginId);
let checkPwd = getPwdMd5(loginId, pwd);
if (userInfo.pwd != checkPwd) throw new BizError(ERRORENUM.密码错误);
let mobileToken = getToken(loginId);
userInfo.mobileToken = mobileToken;
userInfo.mobileTokenMs = new Date().valueOf();
await userInfo.save();
return {
uscc: userInfo.loginId,
name: userInfo.name,
token: mobileToken,
};
}
/**
* 退出登录
* 小程序端
* @param uscc 信用代码
* @returns {isSuccess:true/false}
*/
export async function logout(userId:string){
if (typeof userId != "string") throw new BizError(ERRORENUM.参数错误, userId);
let userInfo = await findGuanWeiHuiUserInfoByLoginId(userId);
userInfo.mobileToken = "";
userInfo.mobileTokenMs = 0;
await userInfo.save();
return {isSuccess:true};
}
......@@ -120,6 +120,7 @@ export async function sendChangePwdCode(phone:string, code:string) {
* @returns
*/
export async function sendTaskPointOut(phoneList, month:number) {
return;
let sendRes:any = await sendMsmToPhoneNumber(phoneList, SMSTYPE.信息填报提醒, [month]);
if (sendRes.isError) throw new BizError(ERRORENUM.短信发送失败, sendRes.msg);
......
......@@ -19,17 +19,19 @@ import { SMSTYPE } from "../config/enum";
import { dataDeclarationTask } from "./mobileEnterprise/quarterTask/dataDeclaration";
import { findQuarterTaskCountByParam } from "../data/fuHuaQi/quarterTask/quarterTask";
import { provideFuHuaQiQuarterTask } from "./mobileFuHuaQi/fuHuaQi/task/quarterTask";
import { initSystemLabelData, systemLabel } from "./label";
/**
* 初始化任务
* 初始化任务 6.0改成了 管理后台手动发放
*/
export function initSystemTask() {
/**孵化器月度任务 */
fuHuaQiMonthTask();
setInterval(async function () {
await fuHuaQiMonthTask();
}, 3600 * 1000);
export async function initSystemTask() {
// return;//发布的时候要放开
// /**孵化器月度任务 */
// fuHuaQiMonthTask();
// setInterval(async function () {
// await fuHuaQiMonthTask();
// }, 3600 * 1000);
/**孵化器季度任务 */
// fuHuaQiQuarterTask();
......@@ -37,21 +39,33 @@ export function initSystemTask() {
// await fuHuaQiQuarterTask();
// }, 3600 * 1000 * 2);
/**企业季度任务 */
// enterpriseQuarterTask();
// setInterval(async function () {
// await enterpriseQuarterTask();
// }, 3600 * 1000 * 2);
// /**企业季度任务 */
// // enterpriseQuarterTask();
// // setInterval(async function () {
// // await enterpriseQuarterTask();
// // }, 3600 * 1000 * 2);
/**初始化短信任务 */
smsTask();
setInterval(async function () {
await smsTask();
}, 3600 * 1000);
console.log(`systemTask init success`);
// /**初始化短信任务 */
// smsTask();
// setInterval(async function () {
// await smsTask();
// }, 3600 * 1000);
// console.log(`systemTask init success`);
// console.log(`systemTask init success`);
console.log(`systemTask init success`);
/**这个是校验数据 */
await initSystemLabelData();
await systemLabel();
let lastUpdateDay = moment().format("YYYY-MM-DD");
setInterval(async function () {
let hours = moment().hours();
if ( moment().format("YYYY-MM-DD") == lastUpdateDay && hours>2 && hours <= 4) {
await systemLabel();
lastUpdateDay = moment().format("YYYY-MM-DD");
}
}, 3600 * 1000 * 1);
}
......@@ -100,6 +114,7 @@ async function enterpriseQuarterTask() {
* 短信任务 每月倒数第七天发送
*/
async function smsTask() {
return;
let nowMs = new Date().valueOf();
let lastDate = moment(nowMs).endOf("month").format("YYYY-MM-DD");
let checkMs = moment(lastDate+' 00:00:00').subtract(7,'days').valueOf();
......
export let areaList = [
[
{
lat: 31.07338210104304,
lng: 121.67576526185614,
},
{
lat: 31.08537924130526,
lng: 121.67359313559942,
},
{
lat: 31.09217520425179,
lng: 121.67244285999605,
},
{
lat: 31.096571694003483,
lng: 121.67161466156168,
},
{
lat: 31.105303228088072,
lng: 121.67007923364015,
},
{
lat: 31.109676977851986,
lng: 121.66920075576529,
},
{
lat: 31.113732385826548,
lng: 121.66751009788723,
},
{
lat: 31.13020236498407,
lng: 121.66177175714093,
},
{
lat: 31.148039709160084,
lng: 121.65543697865908,
},
{
lat: 31.15127755324293,
lng: 121.65480321221554,
},
{
lat: 31.154587007939345,
lng: 121.65443703570858,
},
{
lat: 31.161207038874075,
lng: 121.65432395223644,
},
{
lat: 31.188874078837916,
lng: 121.65328584482675,
},
{
lat: 31.189226372847404,
lng: 121.65399235005906,
},
{
lat: 31.18942110636626,
lng: 121.65480296065599,
},
{
lat: 31.189919495233866,
lng: 121.65606857179633,
},
{
lat: 31.191203170320538,
lng: 121.65880460299844,
},
{
lat: 31.191855758175713,
lng: 121.65913826534016,
},
{
lat: 31.192463977803033,
lng: 121.6603396941378,
},
{
lat: 31.193259980241088,
lng: 121.66181614999992,
},
{
lat: 31.19291293857945,
lng: 121.66332260219889,
},
{
lat: 31.1931654726731,
lng: 121.66737748330081,
},
{
lat: 31.19412737860011,
lng: 121.67226502215996,
},
{
lat: 31.20369846949176,
lng: 121.66941240939313,
},
{
lat: 31.199986685574675,
lng: 121.65206923334296,
},
{
lat: 31.2081766981107,
lng: 121.65115553096547,
},
{
lat: 31.21613612047167,
lng: 121.65052056968443,
},
{
lat: 31.231872972174656,
lng: 121.65058752851228,
},
{
lat: 31.231006577786616,
lng: 121.6462121472575,
},
{
lat: 31.229958519485542,
lng: 121.64074441276799,
},
{
lat: 31.22909918654649,
lng: 121.63612690067214,
},
{
lat: 31.227107545523864,
lng: 121.63070121612547,
},
{
lat: 31.2268358303094,
lng: 121.6286331520729,
},
{
lat: 31.226803627803562,
lng: 121.62642631264049,
},
{
lat: 31.22669508418347,
lng: 121.62204011772727,
},
{
lat: 31.22533532221686,
lng: 121.61430677192558,
},
{
lat: 31.22371933935652,
lng: 121.60560701512081,
},
{
lat: 31.221592473856607,
lng: 121.5983467103596,
},
{
lat: 31.22060589935452,
lng: 121.59664717290012,
},
{
lat: 31.21949604419986,
lng: 121.59497984630086,
},
{
lat: 31.218266000087866,
lng: 121.59243054011162,
},
{
lat: 31.217420335385032,
lng: 121.58828605402618,
},
{
lat: 31.216433716909677,
lng: 121.58467826398058,
},
{
lat: 31.214832041399667,
lng: 121.58114501505159,
},
{
lat: 31.19383840814175,
lng: 121.58630991744968,
},
{
lat: 31.184525621340427,
lng: 121.58898189624429,
},
{
lat: 31.1798996044262,
lng: 121.59021001836305,
},
{
lat: 31.17538027625309,
lng: 121.59224035282544,
},
{
lat: 31.16056857991668,
lng: 121.59858142106066,
},
{
lat: 31.156824814425512,
lng: 121.59991465056721,
},
{
lat: 31.153032455649097,
lng: 121.6011614171847,
},
{
lat: 31.149052655709283,
lng: 121.60233537791993,
},
{
lat: 31.145440164839847,
lng: 121.60378108467744,
},
{
lat: 31.141144084212183,
lng: 121.60566304330858,
},
{
lat: 31.13695886331416,
lng: 121.60765086404243,
},
{
lat: 31.128289320934275,
lng: 121.61054725364883,
},
{
lat: 31.12049111011174,
lng: 121.61240404999023,
},
{
lat: 31.111674009134077,
lng: 121.61370460964137,
},
{
lat: 31.10660855091936,
lng: 121.6142331963826,
},
{
lat: 31.10151153625393,
lng: 121.61464569124377,
},
{
lat: 31.096501323631035,
lng: 121.61521325213026,
},
{
lat: 31.093942446167006,
lng: 121.6155201795132,
},
{
lat: 31.09158461068816,
lng: 121.61590658893832,
},
{
lat: 31.082893556011808,
lng: 121.61758889098336,
},
{
lat: 31.074317484188857,
lng: 121.61973324327528,
},
{
lat: 31.074662988279506,
lng: 121.62334571230883,
},
{
lat: 31.07458210242074,
lng: 121.62679941185797,
},
{
lat: 31.07406424098115,
lng: 121.6340064928341,
},
{
lat: 31.073809575358883,
lng: 121.63725061684669,
},
{
lat: 31.073654019755548,
lng: 121.64063023007341,
},
{
lat: 31.073237826049034,
lng: 121.64833820784926,
},
{
lat: 31.073241870397744,
lng: 121.65231762583063,
},
{
lat: 31.073395748863067,
lng: 121.65589313623668,
},
{
lat: 31.073462964125156,
lng: 121.662562644495,
},
{
lat: 31.073562790056805,
lng: 121.66916977087698,
},
{
lat: 31.07338210104304,
lng: 121.67576526185614,
},
],
[
{
lat: 31.23214919752198,
lng: 121.65039566276718,
},
{
lat: 31.2291550086703,
lng: 121.63611453687354,
},
{
lat: 31.22750929468288,
lng: 121.6318727656327,
},
{
lat: 31.22687443736822,
lng: 121.62905326398442,
},
{
lat: 31.226839077993183,
lng: 121.6235708291275,
},
{
lat: 31.226226839575055,
lng: 121.61901341454484,
},
{
lat: 31.225375587261095,
lng: 121.61453821994421,
},
{
lat: 31.22375207018901,
lng: 121.60574695960602,
},
{
lat: 31.221461926306933,
lng: 121.59780634082054,
},
{
lat: 31.218412157972708,
lng: 121.59278961641202,
},
{
lat: 31.2167993733551,
lng: 121.58569418005844,
},
{
lat: 31.214787609751735,
lng: 121.58116520843402,
},
{
lat: 31.178106636841843,
lng: 121.59100239906648,
},
{
lat: 31.161362202221195,
lng: 121.59822849154187,
},
{
lat: 31.14471972336722,
lng: 121.60408411696375,
},
{
lat: 31.135249879535063,
lng: 121.60831606626977,
},
{
lat: 31.128865650312786,
lng: 121.61043193837496,
},
{
lat: 31.12127681494321,
lng: 121.61232908599631,
},
{
lat: 31.113587466047015,
lng: 121.6134914723679,
},
{
lat: 31.105681224676125,
lng: 121.61430641883187,
},
{
lat: 31.098009776304664,
lng: 121.61494009888933,
},
{
lat: 31.090295488745507,
lng: 121.61613226172707,
},
{
lat: 31.08229160921351,
lng: 121.6178492443927,
},
{
lat: 31.07434424261978,
lng: 121.61975951386917,
},
{
lat: 31.074532245767315,
lng: 121.6223382700768,
},
{
lat: 31.07464409462196,
lng: 121.62468820319366,
},
{
lat: 31.07425456941438,
lng: 121.6309179303248,
},
{
lat: 31.07369010885278,
lng: 121.64027077995325,
},
{
lat: 31.07326581023964,
lng: 121.64727557655618,
},
{
lat: 31.073297739748988,
lng: 121.6533454328954,
},
{
lat: 31.073522778189826,
lng: 121.6598885856379,
},
{
lat: 31.07356771840224,
lng: 121.66646640655857,
},
{
lat: 31.07336190462566,
lng: 121.67580265235229,
},
{
lat: 31.08088155678679,
lng: 121.67448995791943,
},
{
lat: 31.10870715508697,
lng: 121.66939441841461,
},
{
lat: 31.149934598913276,
lng: 121.6550128951361,
},
{
lat: 31.153542078955763,
lng: 121.65442240947186,
},
{
lat: 31.157188975618833,
lng: 121.65434278253723,
},
{
lat: 31.16535509225139,
lng: 121.65389522024198,
},
{
lat: 31.188146374938565,
lng: 121.65326621860363,
},
{
lat: 31.21305066621016,
lng: 121.65065530044858,
},
{
lat: 31.23214919752198,
lng: 121.65039566276718,
},
],
[
{
lat: 31.188862584242376,
lng: 121.65329070131577,
},
{
lat: 31.189162690704308,
lng: 121.65387248560545,
},
{
lat: 31.189369788668273,
lng: 121.65459110482374,
},
{
lat: 31.189884486643326,
lng: 121.65601807964376,
},
{
lat: 31.191175799026162,
lng: 121.65877546687109,
},
{
lat: 31.1918755312345,
lng: 121.65920244098592,
},
{
lat: 31.19325708679165,
lng: 121.6618115302052,
},
{
lat: 31.19287854936756,
lng: 121.66328888227673,
},
{
lat: 31.19300472867884,
lng: 121.66475660579637,
},
{
lat: 31.193199732734787,
lng: 121.66757196636586,
},
{
lat: 31.193612681160754,
lng: 121.66992032399725,
},
{
lat: 31.194131203403657,
lng: 121.67227136744934,
},
{
lat: 31.19652783925783,
lng: 121.67165344981882,
},
{
lat: 31.198929032780082,
lng: 121.67095550663807,
},
{
lat: 31.20371344292958,
lng: 121.66941964065902,
},
{
lat: 31.199939619783727,
lng: 121.6520411656469,
},
{
lat: 31.188862584242376,
lng: 121.65329070131577,
},
],
[
{
lat: 31.103928642340524,
lng: 121.57309575780724,
},
{
lat: 31.10907489139624,
lng: 121.57181436238157,
},
{
lat: 31.109365814083105,
lng: 121.57375957238602,
},
{
lat: 31.109464150627186,
lng: 121.57525359940344,
},
{
lat: 31.109652658990726,
lng: 121.57683438372862,
},
{
lat: 31.10580171264126,
lng: 121.57785439413573,
},
{
lat: 31.10575738690268,
lng: 121.58492755523102,
},
{
lat: 31.104669334386063,
lng: 121.5851749559134,
},
{
lat: 31.10433666477077,
lng: 121.58527717779957,
},
{
lat: 31.09972233590896,
lng: 121.58623801207278,
},
{
lat: 31.099875615607523,
lng: 121.58694914444797,
},
{
lat: 31.100189783431993,
lng: 121.58846902581249,
},
{
lat: 31.100251840110754,
lng: 121.5888678568173,
},
{
lat: 31.098022827340085,
lng: 121.58889824736681,
},
{
lat: 31.09543701414111,
lng: 121.58885282771382,
},
{
lat: 31.094154055259594,
lng: 121.58968142247107,
},
{
lat: 31.09295068498738,
lng: 121.5901876256816,
},
{
lat: 31.092737815743565,
lng: 121.58871070176878,
},
{
lat: 31.092873161934005,
lng: 121.58828995320135,
},
{
lat: 31.093184649712896,
lng: 121.58785934567719,
},
{
lat: 31.093203716472935,
lng: 121.58726678055753,
},
{
lat: 31.093045673413283,
lng: 121.5851226467555,
},
{
lat: 31.0934700090614,
lng: 121.58440116358804,
},
{
lat: 31.092830296293247,
lng: 121.58093386390809,
},
{
lat: 31.093376976146814,
lng: 121.57986790374223,
},
{
lat: 31.092830745029513,
lng: 121.5786948164165,
},
{
lat: 31.092718515930205,
lng: 121.57713439579574,
},
{
lat: 31.091425446579688,
lng: 121.5758540008703,
},
{
lat: 31.091319875729614,
lng: 121.5753477535115,
},
{
lat: 31.096418475537828,
lng: 121.57444960367577,
},
{
lat: 31.098369917904048,
lng: 121.5740534793496,
},
{
lat: 31.09869230336662,
lng: 121.57401065934722,
},
],
[
{
lat: 31.235646672714033,
lng: 121.6702803204907,
},
{
lat: 31.237703657999965,
lng: 121.6800278452368,
},
{
lat: 31.249864507998858,
lng: 121.67539918342587,
},
{
lat: 31.253806088292084,
lng: 121.6898876359866,
},
{
lat: 31.25822948599084,
lng: 121.68870291975298,
},
{
lat: 31.262132973385594,
lng: 121.68793678865894,
},
{
lat: 31.261569739366497,
lng: 121.68537818444145,
},
{
lat: 31.260835146678094,
lng: 121.68285938081738,
},
{
lat: 31.25988862825541,
lng: 121.67974732476401,
},
{
lat: 31.2578116114131,
lng: 121.6730117806914,
},
{
lat: 31.256357825489697,
lng: 121.66509957269018,
},
{
lat: 31.254578101022148,
lng: 121.6576204568834,
},
{
lat: 31.248878371477844,
lng: 121.6585750202627,
},
{
lat: 31.249812746240295,
lng: 121.66168142184364,
},
{
lat: 31.250871370133062,
lng: 121.66472465768783,
},
{
lat: 31.251660435285775,
lng: 121.66686081654541,
},
{
lat: 31.245772618481432,
lng: 121.6680605203501,
},
{
lat: 31.239373482184362,
lng: 121.66945217412056,
},
{
lat: 31.235605141993346,
lng: 121.67024345534296,
},
{
lat: 31.23560482621043,
lng: 121.67022153638942,
},
],
[
{
lat: 31.25430131924346,
lng: 121.69238922031953,
},
{
lat: 31.255782341172587,
lng: 121.69909823923629,
},
{
lat: 31.259652708962815,
lng: 121.71676457861582,
},
{
lat: 31.26063103144596,
lng: 121.72333994411113,
},
{
lat: 31.25003843554582,
lng: 121.72953305069628,
},
{
lat: 31.249822462690588,
lng: 121.72860761802386,
},
{
lat: 31.24870053213178,
lng: 121.72594737763772,
},
{
lat: 31.246126763131645,
lng: 121.71743820337466,
},
{
lat: 31.244837980285098,
lng: 121.71796237378028,
},
{
lat: 31.242469139291117,
lng: 121.71902445930559,
},
{
lat: 31.23914766548017,
lng: 121.72028737853093,
},
{
lat: 31.237574741876454,
lng: 121.71600479625958,
},
{
lat: 31.236086357315983,
lng: 121.71100984288337,
},
{
lat: 31.233338156381652,
lng: 121.70122210931854,
},
{
lat: 31.24116057258415,
lng: 121.69767078289114,
},
{
lat: 31.25187408749583,
lng: 121.69329958232639,
},
{
lat: 31.254246295542746,
lng: 121.69239527453459,
},
{
lat: 31.254209049659913,
lng: 121.6924383700249,
},
],
[
{
lat: 31.135300030556348,
lng: 121.60818650854578,
},
{
lat: 31.135262187338853,
lng: 121.60595632145855,
},
{
lat: 31.135935736303118,
lng: 121.59865814311043,
},
{
lat: 31.135885076448943,
lng: 121.59600634933825,
},
{
lat: 31.1326753348828,
lng: 121.57287761536885,
},
{
lat: 31.130682433915183,
lng: 121.57292214457317,
},
{
lat: 31.119717275814114,
lng: 121.57414223391761,
},
{
lat: 31.117297763586688,
lng: 121.57473369145256,
},
{
lat: 31.11704760269779,
lng: 121.57229339354436,
},
{
lat: 31.116729631691083,
lng: 121.56653904208365,
},
{
lat: 31.117164991686565,
lng: 121.56756319109772,
},
{
lat: 31.1175741129486,
lng: 121.56744513559809,
},
{
lat: 31.118249458070284,
lng: 121.56698898603321,
},
{
lat: 31.119154495227775,
lng: 121.56600185388459,
},
{
lat: 31.119093975095183,
lng: 121.56532099599353,
},
{
lat: 31.119369295807296,
lng: 121.56482712409894,
},
{
lat: 31.119131061294855,
lng: 121.56310124537636,
},
{
lat: 31.118441695302394,
lng: 121.55948003762741,
},
{
lat: 31.117673459806422,
lng: 121.55560461565683,
},
{
lat: 31.116868099580955,
lng: 121.55192475596647,
},
{
lat: 31.116640157641896,
lng: 121.55005440123108,
},
{
lat: 31.117887413722514,
lng: 121.54939381972,
},
{
lat: 31.11908372459472,
lng: 121.54836767850861,
},
{
lat: 31.12186918246257,
lng: 121.54789693662106,
},
{
lat: 31.121434123506624,
lng: 121.54599601100048,
},
{
lat: 31.119922145843443,
lng: 121.54569666764135,
},
{
lat: 31.119609392739854,
lng: 121.54460752800063,
},
{
lat: 31.121391774350204,
lng: 121.5435598521573,
},
{
lat: 31.122099676054294,
lng: 121.5431117004052,
},
{
lat: 31.122365202412972,
lng: 121.54253528768383,
},
{
lat: 31.123807068469205,
lng: 121.54204306499854,
},
{
lat: 31.124197656176342,
lng: 121.54284416671776,
},
{
lat: 31.125593548443245,
lng: 121.54334522439571,
},
{
lat: 31.127648584837814,
lng: 121.54319482023854,
},
{
lat: 31.12749545994386,
lng: 121.54187007638028,
},
{
lat: 31.1279722147152,
lng: 121.54180609930751,
},
{
lat: 31.128613386626736,
lng: 121.5437497028309,
},
{
lat: 31.12880154527201,
lng: 121.54298011324299,
},
{
lat: 31.12973449357025,
lng: 121.54075895515402,
},
{
lat: 31.13063282761258,
lng: 121.54067772648133,
},
{
lat: 31.130726563152432,
lng: 121.54130765977267,
},
{
lat: 31.131165392163606,
lng: 121.54119488094355,
},
{
lat: 31.13136143095472,
lng: 121.54184665592727,
},
{
lat: 31.132355433918924,
lng: 121.54147765223878,
},
{
lat: 31.132262795254718,
lng: 121.54117316695731,
},
{
lat: 31.13373482817036,
lng: 121.54060073378525,
},
{
lat: 31.133401196872388,
lng: 121.53971426530592,
},
{
lat: 31.134698998512075,
lng: 121.53913698866862,
},
{
lat: 31.13403087979023,
lng: 121.5368745862739,
},
{
lat: 31.132901939845286,
lng: 121.53738798450391,
},
{
lat: 31.13274610185198,
lng: 121.53593522118109,
},
{
lat: 31.135311553150096,
lng: 121.53373383628652,
},
{
lat: 31.135601712615802,
lng: 121.53448095496265,
},
{
lat: 31.136010104443738,
lng: 121.53471545371852,
},
{
lat: 31.136783381127074,
lng: 121.53484313983775,
},
{
lat: 31.137154967627538,
lng: 121.53503486677258,
},
{
lat: 31.13742724909935,
lng: 121.53583570267561,
},
{
lat: 31.137472859245953,
lng: 121.53633720581351,
},
{
lat: 31.137540318418793,
lng: 121.53693521575896,
},
{
lat: 31.137733710239914,
lng: 121.53747937466576,
},
{
lat: 31.137762117103957,
lng: 121.53776196707182,
},
{
lat: 31.138027099758677,
lng: 121.53839164849501,
},
{
lat: 31.138207690550196,
lng: 121.53847706385055,
},
{
lat: 31.13861732037898,
lng: 121.53856723988996,
},
{
lat: 31.13884971225749,
lng: 121.5386953964543,
},
{
lat: 31.139204097063477,
lng: 121.53924538908515,
},
{
lat: 31.139330746562255,
lng: 121.53959756405078,
},
{
lat: 31.13938480170534,
lng: 121.54002445389506,
},
{
lat: 31.13944162603575,
lng: 121.54038765492628,
},
{
lat: 31.13966845450496,
lng: 121.54096866094308,
},
{
lat: 31.139951351161578,
lng: 121.5413426117082,
},
{
lat: 31.139995220313693,
lng: 121.54149783464365,
},
{
lat: 31.13999594260151,
lng: 121.5418073739487,
},
{
lat: 31.139886879460423,
lng: 121.54207422629405,
},
{
lat: 31.13976152455673,
lng: 121.54227142465564,
},
{
lat: 31.139528274053063,
lng: 121.54230947147326,
},
{
lat: 31.139293347433636,
lng: 121.54225594658843,
},
{
lat: 31.139018598428283,
lng: 121.54232090518167,
},
{
lat: 31.138827184479716,
lng: 121.54262467253942,
},
{
lat: 31.13880991522365,
lng: 121.54294022771768,
},
{
lat: 31.138840997187973,
lng: 121.54338913446911,
},
{
lat: 31.139264173935512,
lng: 121.54396511120176,
},
{
lat: 31.13927181458599,
lng: 121.54411442974816,
},
{
lat: 31.139133674308713,
lng: 121.5451937577875,
},
{
lat: 31.13962067689965,
lng: 121.54572696682706,
},
{
lat: 31.140211060564617,
lng: 121.54587575364278,
},
{
lat: 31.140576337831614,
lng: 121.54685822374407,
},
{
lat: 31.140874196498647,
lng: 121.548290083141,
},
{
lat: 31.14013835630155,
lng: 121.54940246710898,
},
{
lat: 31.139645645313333,
lng: 121.54961613254797,
},
{
lat: 31.14034818416736,
lng: 121.54993625410833,
},
{
lat: 31.140672033473763,
lng: 121.55076989642689,
},
{
lat: 31.140125632363084,
lng: 121.55109128755731,
},
{
lat: 31.140098628071115,
lng: 121.55175402063371,
},
{
lat: 31.14054219571298,
lng: 121.55203165319328,
},
{
lat: 31.140497096899907,
lng: 121.55280217430307,
},
{
lat: 31.14124362179707,
lng: 121.55376345820798,
},
{
lat: 31.142821583579313,
lng: 121.55329133143373,
},
{
lat: 31.143377119155453,
lng: 121.55491201045523,
},
{
lat: 31.14403665667948,
lng: 121.55470193050967,
},
{
lat: 31.144364555850345,
lng: 121.55452011319755,
},
{
lat: 31.144510432594632,
lng: 121.55442324238095,
},
{
lat: 31.145437612640684,
lng: 121.55402146969377,
},
{
lat: 31.14560225766111,
lng: 121.55399438200403,
},
{
lat: 31.145830955246186,
lng: 121.55388746654107,
},
{
lat: 31.145976536123268,
lng: 121.553769670817,
},
{
lat: 31.146672322213412,
lng: 121.55359748176271,
},
{
lat: 31.146977582985084,
lng: 121.55345859482077,
},
{
lat: 31.14753525646592,
lng: 121.55319584000036,
},
{
lat: 31.14821857570676,
lng: 121.55283129638649,
},
{
lat: 31.150105218448285,
lng: 121.5524446434489,
},
{
lat: 31.150894595497206,
lng: 121.55210198877693,
},
{
lat: 31.151684445099093,
lng: 121.55180122166493,
},
{
lat: 31.153155733892582,
lng: 121.55125467828337,
},
{
lat: 31.154774788405295,
lng: 121.55021588085904,
},
{
lat: 31.155875147194966,
lng: 121.54950453813989,
},
{
lat: 31.156388354229804,
lng: 121.54919127908752,
},
{
lat: 31.156836607508573,
lng: 121.54888407567891,
},
{
lat: 31.157672764591585,
lng: 121.54845006459885,
},
{
lat: 31.158226406927927,
lng: 121.54824143221089,
},
{
lat: 31.15869487441307,
lng: 121.54808567252755,
},
{
lat: 31.15919271721838,
lng: 121.54795479987307,
},
{
lat: 31.159507067151527,
lng: 121.54779121388212,
},
{
lat: 31.159648730516647,
lng: 121.54660003652508,
},
{
lat: 31.160907385313607,
lng: 121.54641188303872,
},
{
lat: 31.16101031414552,
lng: 121.54593086582119,
},
{
lat: 31.161177669429623,
lng: 121.54583515745136,
},
{
lat: 31.161375717353323,
lng: 121.54583999439136,
},
{
lat: 31.161525661769595,
lng: 121.54601612876624,
},
{
lat: 31.161633065589605,
lng: 121.54616043393233,
},
{
lat: 31.16291417242456,
lng: 121.54588176177482,
},
{
lat: 31.16370578523102,
lng: 121.54858507649432,
},
{
lat: 31.164262096286357,
lng: 121.5515128979635,
},
{
lat: 31.164315667857473,
lng: 121.5524706496781,
},
{
lat: 31.16360930294476,
lng: 121.55282892501535,
},
{
lat: 31.162452766799962,
lng: 121.5534218190349,
},
{
lat: 31.161462193695794,
lng: 121.55403665345902,
},
{
lat: 31.1604765637978,
lng: 121.55458279427373,
},
{
lat: 31.159625914730334,
lng: 121.55572833281653,
},
{
lat: 31.158397280097265,
lng: 121.556879478565,
},
{
lat: 31.158692940807924,
lng: 121.55837798860142,
},
{
lat: 31.157667907564672,
lng: 121.55915036958456,
},
{
lat: 31.15809161907016,
lng: 121.56165623608389,
},
{
lat: 31.158199349736442,
lng: 121.56341442316163,
},
{
lat: 31.15912017210749,
lng: 121.56809090719813,
},
{
lat: 31.15760505445008,
lng: 121.56833326657032,
},
{
lat: 31.158593288176583,
lng: 121.57179065399221,
},
{
lat: 31.15833103365144,
lng: 121.57271422568364,
},
{
lat: 31.159077718284195,
lng: 121.57587479227351,
},
{
lat: 31.159485459450035,
lng: 121.57733709112641,
},
{
lat: 31.159773590871897,
lng: 121.57946694985786,
},
{
lat: 31.160806233700228,
lng: 121.57914318751001,
},
{
lat: 31.16128397523694,
lng: 121.58196308230877,
},
{
lat: 31.16244569170026,
lng: 121.58532307291892,
},
{
lat: 31.163205198827686,
lng: 121.58770863752176,
},
{
lat: 31.16371324382682,
lng: 121.58919793291781,
},
{
lat: 31.162431372808392,
lng: 121.58993409889834,
},
{
lat: 31.161787318170102,
lng: 121.59055439038694,
},
{
lat: 31.161389114177172,
lng: 121.59122880553622,
},
{
lat: 31.158439371775827,
lng: 121.59388264235453,
},
{
lat: 31.16024208722948,
lng: 121.59756809971095,
},
{
lat: 31.158233414435152,
lng: 121.59926585437037,
},
{
lat: 31.146666444360907,
lng: 121.60328655370738,
},
],
[
{
lat: 31.06922936406815,
lng: 121.57333037863603,
},
{
lat: 31.07069165630058,
lng: 121.57836423900496,
},
{
lat: 31.07204278620674,
lng: 121.5855820223674,
},
{
lat: 31.073151443780358,
lng: 121.59193613408833,
},
{
lat: 31.073488063491645,
lng: 121.59514577118551,
},
{
lat: 31.073597673357945,
lng: 121.59821794116624,
},
{
lat: 31.07363307313898,
lng: 121.60143188625922,
},
{
lat: 31.073476049867935,
lng: 121.6046467847594,
},
{
lat: 31.073384832147326,
lng: 121.60784354489773,
},
{
lat: 31.073628079205886,
lng: 121.61107562835252,
},
{
lat: 31.074655517522046,
lng: 121.62335914247849,
},
{
lat: 31.074577119704824,
lng: 121.62689094059027,
},
{
lat: 31.07380370560745,
lng: 121.63733110669926,
},
{
lat: 31.07323635677525,
lng: 121.64830265812698,
},
{
lat: 31.07323833338362,
lng: 121.65229514787781,
},
{
lat: 31.073392515604827,
lng: 121.65586094246888,
},
{
lat: 31.07346202399315,
lng: 121.6625151981389,
},
{
lat: 31.073560689373778,
lng: 121.66917739248358,
},
{
lat: 31.07337804099507,
lng: 121.67576559834698,
},
{
lat: 31.108681238853297,
lng: 121.66940744862487,
},
{
lat: 31.109687741192225,
lng: 121.66920251779882,
},
{
lat: 31.111233678832313,
lng: 121.66855505423946,
},
{
lat: 31.113716577171775,
lng: 121.66753807946488,
},
{
lat: 31.118527930381898,
lng: 121.66584097779054,
},
{
lat: 31.128380316869453,
lng: 121.66240475940923,
},
{
lat: 31.148040214157074,
lng: 121.65543873633894,
},
{
lat: 31.15127503274508,
lng: 121.65480693409312,
},
{
lat: 31.15453802555767,
lng: 121.65442524009481,
},
{
lat: 31.16104798958373,
lng: 121.65433387493572,
},
{
lat: 31.162249880075294,
lng: 121.66628914827324,
},
{
lat: 31.164255390783527,
lng: 121.67391935566552,
},
{
lat: 31.16643126941159,
lng: 121.68151693889159,
},
{
lat: 31.172016638792666,
lng: 121.6970969125204,
},
{
lat: 31.17247115058229,
lng: 121.69681980754024,
},
{
lat: 31.172905348196117,
lng: 121.69642546443006,
},
{
lat: 31.173716740733486,
lng: 121.69560610320147,
},
{
lat: 31.175911374248837,
lng: 121.6944769462698,
},
{
lat: 31.18027097147601,
lng: 121.69254923518852,
},
{
lat: 31.18427355297663,
lng: 121.69097353302426,
},
{
lat: 31.188782370654334,
lng: 121.68984154461707,
},
{
lat: 31.20697107198824,
lng: 121.68668732550489,
},
{
lat: 31.218328522306496,
lng: 121.75040047316176,
},
{
lat: 31.228456778342196,
lng: 121.7428887617161,
},
{
lat: 31.23386075334329,
lng: 121.73929820765949,
},
{
lat: 31.23935176585905,
lng: 121.73597454672462,
},
{
lat: 31.260589931080773,
lng: 121.72325439999985,
},
{
lat: 31.259427500216464,
lng: 121.71565363558106,
},
{
lat: 31.257687505672642,
lng: 121.70716992998129,
},
{
lat: 31.253752274020624,
lng: 121.6899879944955,
},
{
lat: 31.2578509982262,
lng: 121.6888669910753,
},
{
lat: 31.262094754937074,
lng: 121.6879270747848,
},
{
lat: 31.26152303906822,
lng: 121.68515928836952,
},
{
lat: 31.260894021983585,
lng: 121.6828553533107,
},
{
lat: 31.26016757465771,
lng: 121.68051018920218,
},
{
lat: 31.25793160191595,
lng: 121.67306460955517,
},
{
lat: 31.253392420093608,
lng: 121.65070786494333,
},
{
lat: 31.23189394004825,
lng: 121.65054698490589,
},
{
lat: 31.229106766870547,
lng: 121.63612098277659,
},
{
lat: 31.227487122634408,
lng: 121.63182080733947,
},
{
lat: 31.227132850307072,
lng: 121.63063083964984,
},
{
lat: 31.22694007241106,
lng: 121.6283461889554,
},
{
lat: 31.226963719140755,
lng: 121.62471416006571,
},
{
lat: 31.226742539559616,
lng: 121.62203140468291,
},
{
lat: 31.22368494391601,
lng: 121.60566404006693,
},
{
lat: 31.22161212326856,
lng: 121.59836986111206,
},
{
lat: 31.218249076544893,
lng: 121.59236596131123,
},
{
lat: 31.21642521101066,
lng: 121.5846300784443,
},
{
lat: 31.214820596359854,
lng: 121.5810804761148,
},
{
lat: 31.212038715421762,
lng: 121.57520250474198,
},
{
lat: 31.210993766362392,
lng: 121.57259902527257,
},
{
lat: 31.21029800660903,
lng: 121.56987423499827,
},
{
lat: 31.210202128196467,
lng: 121.5637503147563,
},
{
lat: 31.210009688968498,
lng: 121.56206463519587,
},
{
lat: 31.209617681607607,
lng: 121.56031575414923,
},
{
lat: 31.20790246086112,
lng: 121.55693346972618,
},
{
lat: 31.206018916776223,
lng: 121.5535783227643,
},
{
lat: 31.204889283033665,
lng: 121.55409157136832,
},
{
lat: 31.203603409482252,
lng: 121.55465141608792,
},
{
lat: 31.20127726821499,
lng: 121.5557031644606,
},
{
lat: 31.200043167028,
lng: 121.55627075181835,
},
{
lat: 31.19886411450557,
lng: 121.5568063923733,
},
{
lat: 31.196683003697977,
lng: 121.55795370724633,
},
{
lat: 31.194448483994357,
lng: 121.55938204150283,
},
{
lat: 31.19220665672083,
lng: 121.5602209632906,
},
{
lat: 31.189882664906786,
lng: 121.56098062217433,
},
{
lat: 31.18762402703391,
lng: 121.56192959192896,
},
{
lat: 31.185176188507896,
lng: 121.5629366058531,
},
{
lat: 31.182742123344863,
lng: 121.56369628914133,
},
{
lat: 31.18038948954652,
lng: 121.56436645012877,
},
{
lat: 31.178137246913323,
lng: 121.56555778666286,
},
{
lat: 31.175755352691052,
lng: 121.56680361394123,
},
{
lat: 31.17341340841661,
lng: 121.56808931731106,
},
{
lat: 31.17121734794183,
lng: 121.56909196583892,
},
{
lat: 31.169240943161967,
lng: 121.56968977051052,
},
{
lat: 31.16872085690889,
lng: 121.56491097427808,
},
{
lat: 31.16786614957676,
lng: 121.5599723441989,
},
{
lat: 31.16671762433499,
lng: 121.55543750148468,
},
{
lat: 31.165314915520362,
lng: 121.55107184182124,
},
{
lat: 31.159446956152657,
lng: 121.53428978710988,
},
{
lat: 31.15453124563763,
lng: 121.5377097813285,
},
{
lat: 31.149444346969094,
lng: 121.5404775582786,
},
{
lat: 31.13950006817013,
lng: 121.5455980844161,
},
{
lat: 31.139132685291607,
lng: 121.54519251800548,
},
{
lat: 31.139272561285168,
lng: 121.54411548625673,
},
{
lat: 31.139262188527276,
lng: 121.54396422763094,
},
{
lat: 31.138840718924918,
lng: 121.54338894408691,
},
{
lat: 31.138808844495607,
lng: 121.54293866845003,
},
{
lat: 31.138828162332846,
lng: 121.54261976999399,
},
{
lat: 31.13902159402988,
lng: 121.54232124536973,
},
{
lat: 31.139295203774257,
lng: 121.54225586949434,
},
{
lat: 31.1395270163582,
lng: 121.54230976782493,
},
{
lat: 31.139762174172027,
lng: 121.54227109319085,
},
{
lat: 31.13988622784368,
lng: 121.5420786071457,
},
{
lat: 31.139996338199342,
lng: 121.5418102383746,
},
{
lat: 31.139996338199342,
lng: 121.54149920009176,
},
{
lat: 31.1399528736007,
lng: 121.54134536527319,
},
{
lat: 31.139668904394377,
lng: 121.5409669540771,
},
{
lat: 31.13944221676035,
lng: 121.5403831839186,
},
{
lat: 31.13933076202815,
lng: 121.53960027591604,
},
{
lat: 31.139204113721867,
lng: 121.53924461974002,
},
{
lat: 31.138850049575186,
lng: 121.53869621968549,
},
{
lat: 31.138617321326755,
lng: 121.53856769972474,
},
{
lat: 31.138210624321246,
lng: 121.53847744270854,
},
{
lat: 31.138027704947316,
lng: 121.53838880232813,
},
{
lat: 31.13776320220982,
lng: 121.53776334770124,
},
{
lat: 31.13773425695467,
lng: 121.53748266001688,
},
{
lat: 31.13754080715881,
lng: 121.53693997328732,
},
{
lat: 31.137478989218188,
lng: 121.53638751539869,
},
{
lat: 31.137426828597572,
lng: 121.53583382168614,
},
{
lat: 31.13715336833601,
lng: 121.53503422781141,
},
{
lat: 31.13678393711651,
lng: 121.53484381990427,
},
{
lat: 31.136008093163223,
lng: 121.53471495445089,
},
{
lat: 31.135603221657323,
lng: 121.53448179716791,
},
{
lat: 31.135310774457157,
lng: 121.53373614818337,
},
{
lat: 31.1344269595722,
lng: 121.53449190066335,
},
{
lat: 31.133889475701622,
lng: 121.53495203734352,
},
{
lat: 31.13332337285687,
lng: 121.53544050697202,
},
{
lat: 31.132744362872828,
lng: 121.5359370946607,
},
{
lat: 31.132903262063223,
lng: 121.53738487425458,
},
{
lat: 31.134029449088196,
lng: 121.53687717211298,
},
{
lat: 31.1346963799794,
lng: 121.53913578881222,
},
{
lat: 31.133401335387873,
lng: 121.53971646891601,
},
{
lat: 31.133735349857382,
lng: 121.5405981820906,
},
{
lat: 31.13226328000999,
lng: 121.54117572093955,
},
{
lat: 31.1323559330721,
lng: 121.54147902073797,
},
{
lat: 31.131361838167365,
lng: 121.54185003457663,
},
{
lat: 31.13116478037565,
lng: 121.54119651731811,
},
{
lat: 31.130728081673816,
lng: 121.54130880550686,
},
{
lat: 31.13063222373487,
lng: 121.5406786582671,
},
{
lat: 31.1297348026933,
lng: 121.54075915038749,
},
{
lat: 31.129263873129325,
lng: 121.54187600276953,
},
{
lat: 31.128799715641033,
lng: 121.5429785579503,
},
{
lat: 31.128612589066474,
lng: 121.54374927338493,
},
{
lat: 31.127971170239537,
lng: 121.54180789334876,
},
{
lat: 31.127494926925337,
lng: 121.54186998236369,
},
{
lat: 31.12764774872091,
lng: 121.54319496639441,
},
{
lat: 31.12559517609294,
lng: 121.54334537110206,
},
{
lat: 31.124443886663215,
lng: 121.54293457603309,
},
{
lat: 31.12419669617974,
lng: 121.5428416955179,
},
{
lat: 31.124176376592025,
lng: 121.54279922498404,
},
{
lat: 31.12415309314045,
lng: 121.5427538226083,
},
{
lat: 31.124126350652997,
lng: 121.54269609259863,
},
{
lat: 31.12407937914916,
lng: 121.54260249336934,
},
{
lat: 31.124027212789002,
lng: 121.54249245094437,
},
{
lat: 31.1239806858758,
lng: 121.54239925174771,
},
{
lat: 31.123924463618224,
lng: 121.54228684221842,
},
{
lat: 31.123806688615385,
lng: 121.54204091952903,
},
{
lat: 31.123297376721638,
lng: 121.54221889685859,
},
{
lat: 31.12271481560276,
lng: 121.54241304896776,
},
{
lat: 31.12263076856544,
lng: 121.54244673542438,
},
{
lat: 31.122524431474563,
lng: 121.54247929899913,
},
{
lat: 31.122366955251383,
lng: 121.54253444943016,
},
{
lat: 31.12231865218674,
lng: 121.54263663168192,
},
{
lat: 31.122263586662754,
lng: 121.54275341139822,
},
{
lat: 31.122155094406462,
lng: 121.54299517657981,
},
{
lat: 31.122101174558352,
lng: 121.54311193471764,
},
{
lat: 31.122039346456265,
lng: 121.54314898981993,
},
{
lat: 31.121953366684174,
lng: 121.54320401103242,
},
{
lat: 31.1217250893561,
lng: 121.54335046820856,
},
{
lat: 31.121246969733416,
lng: 121.54364363396371,
},
{
lat: 31.119610450339067,
lng: 121.54460742634328,
},
{
lat: 31.119921991293708,
lng: 121.54569401436454,
},
{
lat: 31.12052952067258,
lng: 121.54581977713593,
},
{
lat: 31.120779853095364,
lng: 121.54586569994939,
},
{
lat: 31.121433125287634,
lng: 121.54599396970275,
},
{
lat: 31.121743940394357,
lng: 121.5473403536917,
},
{
lat: 31.12186818745075,
lng: 121.54789569263043,
},
{
lat: 31.12163467439627,
lng: 121.54793468230083,
},
{
lat: 31.121059521071658,
lng: 121.54803139216494,
},
{
lat: 31.12055014106544,
lng: 121.54811986312572,
},
{
lat: 31.12017119471253,
lng: 121.54818398243988,
},
{
lat: 31.119924843066723,
lng: 121.54822665195161,
},
{
lat: 31.119081778740032,
lng: 121.548366522484,
},
{
lat: 31.11789141598666,
lng: 121.54939412684642,
},
{
lat: 31.116642090604305,
lng: 121.55005240848334,
},
{
lat: 31.11676434270798,
lng: 121.55108479228784,
},
{
lat: 31.116873091317817,
lng: 121.55195712803585,
},
{
lat: 31.11547913301956,
lng: 121.55242982721994,
},
{
lat: 31.115411881479936,
lng: 121.55394477446474,
},
{
lat: 31.11564682960805,
lng: 121.55403733968585,
},
{
lat: 31.11577425885561,
lng: 121.55451405057462,
},
{
lat: 31.116136634834167,
lng: 121.55510646798972,
},
{
lat: 31.116749883307378,
lng: 121.55592104193556,
},
{
lat: 31.117024649182426,
lng: 121.55627741803687,
},
{
lat: 31.117407177227314,
lng: 121.55664305066028,
},
{
lat: 31.117566460776448,
lng: 121.55664305066028,
},
{
lat: 31.117817331818948,
lng: 121.55635609847481,
},
{
lat: 31.118450479567496,
lng: 121.55598120932929,
},
{
lat: 31.118988054496285,
lng: 121.55528697017093,
},
{
lat: 31.119234637930916,
lng: 121.55522069999986,
},
{
lat: 31.11969994801531,
lng: 121.55817499999985,
},
{
lat: 31.118440288425088,
lng: 121.5596288750214,
},
{
lat: 31.119106817907774,
lng: 121.56090909999985,
},
{
lat: 31.11973622219992,
lng: 121.56012549480683,
},
{
lat: 31.120424385393118,
lng: 121.56118701015016,
},
{
lat: 31.120401361427252,
lng: 121.56182035123726,
},
{
lat: 31.119255093478248,
lng: 121.56250482591302,
},
{
lat: 31.119087009634217,
lng: 121.56286026269969,
},
{
lat: 31.119131449982902,
lng: 121.56310055942362,
},
{
lat: 31.119275023930534,
lng: 121.56412807151588,
},
{
lat: 31.119368725575885,
lng: 121.56482667564296,
},
{
lat: 31.11909242289517,
lng: 121.56532748096477,
},
{
lat: 31.119156185124364,
lng: 121.56600121009726,
},
{
lat: 31.118250132526903,
lng: 121.5669877144211,
},
{
lat: 31.11757488265637,
lng: 121.56744383906985,
},
{
lat: 31.117166551154273,
lng: 121.56756209635202,
},
{
lat: 31.116729249257098,
lng: 121.56654092503462,
},
{
lat: 31.11656226139885,
lng: 121.56519787137368,
},
{
lat: 31.116455877430766,
lng: 121.56440969999986,
},
{
lat: 31.116362193275286,
lng: 121.56367412769076,
},
{
lat: 31.11615613947343,
lng: 121.56358432008018,
},
{
lat: 31.115221532629537,
lng: 121.56431133407038,
},
{
lat: 31.114889473116893,
lng: 121.5641156507968,
},
{
lat: 31.11462822216229,
lng: 121.5641156507968,
},
{
lat: 31.114609824180377,
lng: 121.56427388325345,
},
{
lat: 31.11477230341288,
lng: 121.56491176037727,
},
{
lat: 31.1134334777317,
lng: 121.56604079516606,
},
{
lat: 31.11308391101639,
lng: 121.56639147250252,
},
{
lat: 31.11236132607162,
lng: 121.56718984852343,
},
{
lat: 31.112055513878424,
lng: 121.56721570661621,
},
{
lat: 31.111274925013923,
lng: 121.5663025786561,
},
{
lat: 31.111082619936873,
lng: 121.5662773345889,
},
{
lat: 31.110977782030837,
lng: 121.56643978999107,
},
{
lat: 31.111053498308046,
lng: 121.56723176007657,
},
{
lat: 31.10880486032256,
lng: 121.5688051243135,
},
{
lat: 31.107608605865483,
lng: 121.56940458685827,
},
{
lat: 31.10741871688105,
lng: 121.56823167887178,
},
{
lat: 31.107150708312826,
lng: 121.56804473390528,
},
{
lat: 31.106522000466008,
lng: 121.56827764296082,
},
{
lat: 31.105055047929937,
lng: 121.56913861243153,
},
{
lat: 31.104810420123208,
lng: 121.56925638752787,
},
{
lat: 31.104725262424484,
lng: 121.5691810889683,
},
{
lat: 31.104582845045822,
lng: 121.56868183676927,
},
{
lat: 31.104104116899002,
lng: 121.56892976797258,
},
{
lat: 31.104031266749967,
lng: 121.56919281693217,
},
{
lat: 31.104416808933006,
lng: 121.57124415121882,
},
{
lat: 31.102957745094976,
lng: 121.57155939999986,
},
{
lat: 31.102572908521392,
lng: 121.57163770520962,
},
{
lat: 31.102500057186134,
lng: 121.57170422333736,
},
{
lat: 31.10254949202693,
lng: 121.5719491309894,
},
{
lat: 31.102973589856596,
lng: 121.5719188954768,
},
{
lat: 31.103007343627446,
lng: 121.57241702242573,
},
{
lat: 31.103047926543322,
lng: 121.57328950165227,
},
{
lat: 31.09919511770064,
lng: 121.57392059423867,
},
{
lat: 31.09858736051398,
lng: 121.57275191721214,
},
{
lat: 31.09847070452848,
lng: 121.57180917029234,
},
{
lat: 31.09831717432846,
lng: 121.57096289999984,
},
{
lat: 31.098124879097654,
lng: 121.57023091092448,
},
{
lat: 31.097955196782014,
lng: 121.56949766332016,
},
{
lat: 31.098029432832757,
lng: 121.56810202817415,
},
{
lat: 31.098579638310348,
lng: 121.5674714744896,
},
{
lat: 31.098724274394943,
lng: 121.56693569999985,
},
{
lat: 31.09855689436759,
lng: 121.56623669999985,
},
{
lat: 31.09818459810605,
lng: 121.5659495235798,
},
{
lat: 31.0980779026416,
lng: 121.56522203343566,
},
{
lat: 31.097869504255517,
lng: 121.56465799999985,
},
{
lat: 31.09802741271513,
lng: 121.56361062624488,
},
{
lat: 31.097680061912055,
lng: 121.56245215204909,
},
{
lat: 31.097130663609768,
lng: 121.56206095476763,
},
{
lat: 31.096953532296453,
lng: 121.56154495963311,
},
{
lat: 31.09701165268146,
lng: 121.56107586948234,
},
{
lat: 31.09662238646196,
lng: 121.5606572927874,
},
{
lat: 31.089980862551045,
lng: 121.56384964277001,
},
{
lat: 31.089026705646386,
lng: 121.56430297523099,
},
{
lat: 31.089004484617515,
lng: 121.56502590751704,
},
{
lat: 31.089841473081204,
lng: 121.56576605247659,
},
{
lat: 31.089856286969265,
lng: 121.56694512060987,
},
{
lat: 31.090088554043337,
lng: 121.56791153768746,
},
{
lat: 31.089236753794374,
lng: 121.56858283195308,
},
{
lat: 31.088866403454745,
lng: 121.5699426331579,
},
{
lat: 31.088858996433082,
lng: 121.57068277811744,
},
{
lat: 31.088866403454745,
lng: 121.57144013575049,
},
{
lat: 31.088858996433082,
lng: 121.57194790961812,
},
{
lat: 31.088644192551254,
lng: 121.57244707714896,
},
{
lat: 31.08828516213694,
lng: 121.57275658370713,
},
{
lat: 31.08822350235824,
lng: 121.57320691125004,
},
{
lat: 31.088346821875238,
lng: 121.57375958596177,
},
{
lat: 31.08825433225263,
lng: 121.57437366897484,
},
{
lat: 31.088042927059615,
lng: 121.57479211624906,
},
{
lat: 31.08734571915024,
lng: 121.57479684846959,
},
{
lat: 31.08756520325245,
lng: 121.57575969557509,
},
{
lat: 31.08665968497805,
lng: 121.57599373466448,
},
{
lat: 31.086570882448562,
lng: 121.57605240485591,
},
{
lat: 31.0864960096625,
lng: 121.57610702882728,
},
{
lat: 31.08632169054237,
lng: 121.57624246699714,
},
{
lat: 31.08637859656108,
lng: 121.57738771710369,
},
{
lat: 31.086439657908524,
lng: 121.57859830021309,
},
{
lat: 31.086946980623516,
lng: 121.57857049583698,
},
{
lat: 31.087181195345774,
lng: 121.58004412776963,
},
{
lat: 31.08673931170428,
lng: 121.58034079406175,
},
{
lat: 31.08716632157066,
lng: 121.5818807280918,
},
{
lat: 31.08687437272101,
lng: 121.58208648047484,
},
{
lat: 31.086485650128864,
lng: 121.58223705251083,
},
{
lat: 31.08635163996392,
lng: 121.58141960385389,
},
{
lat: 31.086705809271237,
lng: 121.58098585558696,
},
{
lat: 31.08651722332606,
lng: 121.58066303385274,
},
{
lat: 31.08589078669334,
lng: 121.5808761733585,
},
{
lat: 31.08553965082997,
lng: 121.58058292691122,
},
{
lat: 31.08456848539523,
lng: 121.57785228866094,
},
{
lat: 31.085366471714003,
lng: 121.57744197340499,
},
{
lat: 31.0852408317637,
lng: 121.57623864501019,
},
{
lat: 31.084683939153642,
lng: 121.57646747467214,
},
{
lat: 31.08407530830133,
lng: 121.57680148978709,
},
{
lat: 31.083586323544598,
lng: 121.57682516182108,
},
{
lat: 31.083273332510228,
lng: 121.57662276461261,
},
{
lat: 31.082410808669245,
lng: 121.57442521078995,
},
{
lat: 31.08219924786715,
lng: 121.57344255285643,
},
{
lat: 31.082973483969717,
lng: 121.5730164562445,
},
{
lat: 31.082966452306593,
lng: 121.57256626908038,
},
{
lat: 31.082730946597945,
lng: 121.57214487861482,
},
{
lat: 31.08200908376467,
lng: 121.57242238503989,
},
{
lat: 31.081929466201405,
lng: 121.57239771780209,
},
{
lat: 31.081881695631118,
lng: 121.5723422165171,
},
{
lat: 31.081089122048212,
lng: 121.56887836086223,
},
{
lat: 31.08072287711967,
lng: 121.56880435914888,
},
{
lat: 31.080408356483286,
lng: 121.56839764252848,
},
{
lat: 31.06922936406815,
lng: 121.57333037863603,
},
],
[
{
lat: 31.175419329528765,
lng: 121.59222877358702,
},
{
lat: 31.176673266125565,
lng: 121.59569090119717,
},
{
lat: 31.17758445779646,
lng: 121.59933683962707,
},
{
lat: 31.178432808757062,
lng: 121.6038703359744,
},
{
lat: 31.17934504963414,
lng: 121.6083704653611,
},
{
lat: 31.181965090859098,
lng: 121.615992401862,
},
{
lat: 31.183340036045813,
lng: 121.61977385787932,
},
{
lat: 31.184988424410562,
lng: 121.62316656608178,
},
{
lat: 31.19179069001666,
lng: 121.63629606509983,
},
{
lat: 31.193528910539133,
lng: 121.64445074111427,
},
{
lat: 31.194346831957777,
lng: 121.6485816677267,
},
{
lat: 31.194796678801648,
lng: 121.65063563679081,
},
{
lat: 31.19536201549053,
lng: 121.65259447324937,
},
{
lat: 31.205795739734643,
lng: 121.65142406529877,
},
{
lat: 31.216120616616404,
lng: 121.65051602028268,
},
{
lat: 31.23188225479436,
lng: 121.65058828300356,
},
{
lat: 31.229401972585173,
lng: 121.63689546231565,
},
{
lat: 31.227453869370066,
lng: 121.63170645721938,
},
{
lat: 31.227148463207026,
lng: 121.63067859778968,
},
{
lat: 31.227030587191607,
lng: 121.62976969623817,
},
{
lat: 31.22691149550657,
lng: 121.6278356360779,
},
{
lat: 31.226891379908647,
lng: 121.62382522894964,
},
{
lat: 31.226709301775152,
lng: 121.6220176843179,
},
{
lat: 31.22554719946104,
lng: 121.61555786233275,
},
{
lat: 31.223792255365407,
lng: 121.60543998102004,
},
{
lat: 31.220965376384644,
lng: 121.59729529425506,
},
{
lat: 31.21952200333672,
lng: 121.59492496254562,
},
{
lat: 31.21826441838847,
lng: 121.59242543546294,
},
{
lat: 31.217648689821598,
lng: 121.58939430150654,
},
{
lat: 31.21645171834703,
lng: 121.58468614021598,
},
{
lat: 31.21483254314311,
lng: 121.58113056195879,
},
{
lat: 31.194974252458465,
lng: 121.58609298873746,
},
{
lat: 31.185101382226794,
lng: 121.58883255204701,
},
{
lat: 31.17991503569652,
lng: 121.59021755339106,
},
{
lat: 31.175419329528765,
lng: 121.59222877358702,
},
],
[
{
lat: 31.179638749902402,
lng: 121.60900163102157,
},
{
lat: 31.183210053813404,
lng: 121.61926715128541,
},
{
lat: 31.187650946301254,
lng: 121.62877588256418,
},
{
lat: 31.195448242214205,
lng: 121.62988763626915,
},
{
lat: 31.191501741595168,
lng: 121.60806743630916,
},
{
lat: 31.179638749902402,
lng: 121.60900163102157,
},
],
[
{
lat: 31.178997645466655,
lng: 121.60634231781712,
},
{
lat: 31.180985896444216,
lng: 121.61268535733073,
},
{
lat: 31.21507442620341,
lng: 121.61030102465352,
},
{
lat: 31.224430792928327,
lng: 121.60987244301018,
},
{
lat: 31.22277086831629,
lng: 121.60271270440704,
},
{
lat: 31.214365255322605,
lng: 121.60349895313875,
},
{
lat: 31.178997645466655,
lng: 121.60634231781712,
},
],
[
{
lat: 31.206194584795693,
lng: 121.6316756785605,
},
{
lat: 31.208991051293925,
lng: 121.641245083277,
},
{
lat: 31.210643734561078,
lng: 121.6462721449175,
},
{
lat: 31.21274457669327,
lng: 121.65072649323145,
},
{
lat: 31.231893757524396,
lng: 121.65056137099259,
},
{
lat: 31.230144302241392,
lng: 121.64100428226558,
},
{
lat: 31.228894878691005,
lng: 121.635445159038,
},
{
lat: 31.227298830894988,
lng: 121.63186723819746,
},
{
lat: 31.206194584795693,
lng: 121.6316756785605,
},
],
[
{
lat: 31.188161053180952,
lng: 121.61122739008712,
},
{
lat: 31.18813579978242,
lng: 121.61297293155427,
},
{
lat: 31.189252897605652,
lng: 121.61440811785607,
},
{
lat: 31.1898320616476,
lng: 121.61521602010114,
},
{
lat: 31.18993782406332,
lng: 121.61642798828872,
},
{
lat: 31.19028370482671,
lng: 121.61758833480975,
},
{
lat: 31.19114820765473,
lng: 121.61850564803885,
},
{
lat: 31.19260261392324,
lng: 121.61863083145721,
},
{
lat: 31.19114881775297,
lng: 121.61054926870645,
},
{
lat: 31.188161053180952,
lng: 121.61122739008712,
},
],
[
{
lat: 31.08377377358772,
lng: 121.62133325948666,
},
{
lat: 31.085600041661465,
lng: 121.62842250021774,
},
{
lat: 31.086783734538166,
lng: 121.6366522755184,
},
{
lat: 31.078326981526313,
lng: 121.6389822482592,
},
{
lat: 31.07899691429535,
lng: 121.65310075256262,
},
{
lat: 31.08346593021695,
lng: 121.65344530398023,
},
{
lat: 31.087995709778205,
lng: 121.65352013044227,
},
{
lat: 31.093775299994725,
lng: 121.65253181905369,
},
{
lat: 31.09166008161191,
lng: 121.6368911072006,
},
{
lat: 31.091545094033574,
lng: 121.63047549571444,
},
{
lat: 31.089120979482583,
lng: 121.63056799811909,
},
{
lat: 31.087546464805026,
lng: 121.62005252294186,
},
{
lat: 31.08377377358772,
lng: 121.62133325948666,
},
],
[
{
lat: 31.12129377420385,
lng: 121.61222561738978,
},
{
lat: 31.124860397751423,
lng: 121.6309225090284,
},
{
lat: 31.1257659230538,
lng: 121.64355340810204,
},
{
lat: 31.12855415751529,
lng: 121.64270653463247,
},
{
lat: 31.131703282432248,
lng: 121.64133388557619,
},
{
lat: 31.137366828248627,
lng: 121.63882626668608,
},
{
lat: 31.136568460811617,
lng: 121.63244817479726,
},
{
lat: 31.135980549414054,
lng: 121.62260523012594,
},
{
lat: 31.135672429986812,
lng: 121.615314666713,
},
{
lat: 31.137629027179482,
lng: 121.61497040606761,
},
{
lat: 31.13948648754178,
lng: 121.61454077939925,
},
{
lat: 31.14002941681672,
lng: 121.61432861808156,
},
{
lat: 31.141128953042603,
lng: 121.61361257363433,
},
{
lat: 31.140102639553493,
lng: 121.60677123576735,
},
{
lat: 31.12704077806227,
lng: 121.61092480327976,
},
{
lat: 31.12129377420385,
lng: 121.61222561738978,
},
],
[
{
lat: 31.17064796110336,
lng: 121.61262913980096,
},
{
lat: 31.172975781376554,
lng: 121.6156824750174,
},
{
lat: 31.17353712662038,
lng: 121.6177724497551,
},
{
lat: 31.174068655740196,
lng: 121.61872345122306,
},
{
lat: 31.174706657546334,
lng: 121.61954988098715,
},
{
lat: 31.176194742090846,
lng: 121.62175080589614,
},
{
lat: 31.177789275218007,
lng: 121.62384300912568,
},
{
lat: 31.179118240043938,
lng: 121.62762827953054,
},
{
lat: 31.18361283519119,
lng: 121.62817864477576,
},
{
lat: 31.187711526531245,
lng: 121.62887895701456,
},
{
lat: 31.183148310101316,
lng: 121.61926234764232,
},
{
lat: 31.179581645973595,
lng: 121.60903052771789,
},
{
lat: 31.176186170860344,
lng: 121.60979132889229,
},
{
lat: 31.17064796110336,
lng: 121.61262913980096,
},
],
[
{
lat: 31.238998540310693,
lng: 121.70236738679881,
},
{
lat: 31.240736100739106,
lng: 121.70987239496093,
},
{
lat: 31.24223399470925,
lng: 121.71734567928725,
},
{
lat: 31.245317483816837,
lng: 121.73234762796747,
},
{
lat: 31.26233771306253,
lng: 121.72215936713383,
},
{
lat: 31.260514723321673,
lng: 121.71505419279707,
},
{
lat: 31.259421821326324,
lng: 121.71566976357923,
},
{
lat: 31.258437310921963,
lng: 121.71121387515542,
},
{
lat: 31.257732198650483,
lng: 121.70702799383663,
},
{
lat: 31.257059699159857,
lng: 121.70721592483736,
},
{
lat: 31.256636626199644,
lng: 121.70573855496013,
},
{
lat: 31.256319320222772,
lng: 121.70450741339577,
},
{
lat: 31.256918675052564,
lng: 121.7043432611872,
},
{
lat: 31.255790474534315,
lng: 121.70175786390206,
},
{
lat: 31.25421656091109,
lng: 121.69642756399456,
},
{
lat: 31.246608299430612,
lng: 121.69939224619621,
},
{
lat: 31.242658896158996,
lng: 121.70078684765349,
},
{
lat: 31.241655882229832,
lng: 121.70114324305526,
},
{
lat: 31.238998540310693,
lng: 121.70236738679881,
},
],
[
{
lat: 31.214783913913053,
lng: 121.59469780686031,
},
{
lat: 31.217074521416755,
lng: 121.60599169580162,
},
{
lat: 31.22347412211384,
lng: 121.60552413929553,
},
{
lat: 31.22260074719475,
lng: 121.60216262361712,
},
{
lat: 31.221623370108343,
lng: 121.59873735778476,
},
{
lat: 31.221341665932684,
lng: 121.59805791866533,
},
{
lat: 31.22101083980835,
lng: 121.59742411616837,
},
{
lat: 31.220040991968776,
lng: 121.59599868808223,
},
{
lat: 31.21846135556615,
lng: 121.59365425451165,
},
{
lat: 31.21674847142949,
lng: 121.59433397253423,
},
{
lat: 31.214783913913053,
lng: 121.59469780686031,
},
],
[
{
lat: 31.191735630737554,
lng: 121.60819615038461,
},
{
lat: 31.193737794125127,
lng: 121.61933983386228,
},
{
lat: 31.194835261684865,
lng: 121.6192377584209,
},
{
lat: 31.19526625923202,
lng: 121.62149383189978,
},
{
lat: 31.195581664074453,
lng: 121.62315979517655,
},
{
lat: 31.19582491597589,
lng: 121.62338050405248,
},
{
lat: 31.196165467576908,
lng: 121.62351066569727,
},
{
lat: 31.197998899009843,
lng: 121.62278496991972,
},
{
lat: 31.199888423385925,
lng: 121.62250129032776,
},
{
lat: 31.201826138397507,
lng: 121.62233581056596,
},
{
lat: 31.203860125226576,
lng: 121.62233723591349,
},
{
lat: 31.203712488327696,
lng: 121.61881913860087,
},
{
lat: 31.20376718425412,
lng: 121.61307850546577,
},
{
lat: 31.20378073144572,
lng: 121.60943007071407,
},
{
lat: 31.203733316266558,
lng: 121.60731035376334,
},
{
lat: 31.191735630737554,
lng: 121.60819615038461,
},
],
[
{
lat: 31.09490352925638,
lng: 121.62539172865635,
},
{
lat: 31.095293274680948,
lng: 121.62701034180903,
},
{
lat: 31.095894284624887,
lng: 121.62880615827615,
},
{
lat: 31.097133200081732,
lng: 121.6316560409305,
},
{
lat: 31.10008874379884,
lng: 121.62952867817707,
},
{
lat: 31.099044332361824,
lng: 121.62698614337553,
},
{
lat: 31.098637557611145,
lng: 121.62569293966948,
},
{
lat: 31.098294774203186,
lng: 121.62438910570462,
},
{
lat: 31.09490352925638,
lng: 121.62539172865635,
},
],
[
{
lat: 31.093947850303877,
lng: 121.62533230634324,
},
{
lat: 31.09396109529312,
lng: 121.62551186099378,
},
{
lat: 31.094014075231478,
lng: 121.62570680604294,
},
{
lat: 31.094053810165658,
lng: 121.62650710677111,
},
{
lat: 31.094053810165665,
lng: 121.62704064058993,
},
{
lat: 31.094014075231478,
lng: 121.62757930454156,
},
{
lat: 31.094504138246688,
lng: 121.628733584438,
},
{
lat: 31.094605682516107,
lng: 121.62889261855706,
},
{
lat: 31.094866165140743,
lng: 121.6295851864949,
},
{
lat: 31.09491914456935,
lng: 121.62986221367004,
},
{
lat: 31.09495234412421,
lng: 121.63020352345814,
},
{
lat: 31.094965955378715,
lng: 121.63045974525114,
},
{
lat: 31.094948260747465,
lng: 121.63174876229628,
},
{
lat: 31.094951699046927,
lng: 121.63303776591837,
},
{
lat: 31.094874995047597,
lng: 121.63480522723299,
},
{
lat: 31.09596512339803,
lng: 121.63493554243306,
},
{
lat: 31.097139933758413,
lng: 121.63531315674759,
},
{
lat: 31.09831477664504,
lng: 121.63567006998477,
},
{
lat: 31.0980323964143,
lng: 121.63448902087259,
},
{
lat: 31.097647502296766,
lng: 121.63331740111433,
},
{
lat: 31.097010851379753,
lng: 121.63165348868549,
},
{
lat: 31.096010949271598,
lng: 121.62935400260389,
},
{
lat: 31.09527461288983,
lng: 121.62731217563936,
},
{
lat: 31.09470562173773,
lng: 121.62524604121087,
},
{
lat: 31.09465866209142,
lng: 121.6249013751819,
},
{
lat: 31.09402732021141,
lng: 121.62510145036396,
},
{
lat: 31.093956680296916,
lng: 121.62520918315428,
},
{
lat: 31.093947850303877,
lng: 121.62533230634324,
},
],
[
{
lat: 31.0949118275889,
lng: 121.63502325478095,
},
{
lat: 31.095074166859472,
lng: 121.63634061547171,
},
{
lat: 31.09500032923165,
lng: 121.6368390653897,
},
{
lat: 31.09498274883554,
lng: 121.63737428620328,
},
{
lat: 31.094996813152694,
lng: 121.63792176398206,
},
{
lat: 31.095190197300354,
lng: 121.63870620975467,
},
{
lat: 31.09524293836252,
lng: 121.6394007711158,
},
{
lat: 31.095819572046537,
lng: 121.64035681440113,
},
{
lat: 31.095922712656538,
lng: 121.64145724960484,
},
{
lat: 31.09606335432803,
lng: 121.64211912572546,
},
{
lat: 31.09607741848362,
lng: 121.64274014529542,
},
{
lat: 31.096235841843892,
lng: 121.64333688537552,
},
{
lat: 31.096418675367175,
lng: 121.64388027749925,
},
{
lat: 31.096559316297093,
lng: 121.64440732700271,
},
{
lat: 31.0965766946444,
lng: 121.64468900276168,
},
{
lat: 31.096904562114997,
lng: 121.64530291938185,
},
{
lat: 31.096964334227135,
lng: 121.64607510818922,
},
{
lat: 31.09692565815891,
lng: 121.64645098845526,
},
{
lat: 31.096883466066355,
lng: 121.647619485804,
},
{
lat: 31.09680962985882,
lng: 121.64815062096253,
},
{
lat: 31.096906223383357,
lng: 121.64865890549746,
},
{
lat: 31.096846451234295,
lng: 121.64935755251365,
},
{
lat: 31.09684293522434,
lng: 121.64968031926384,
},
{
lat: 31.09677261499771,
lng: 121.64995814380829,
},
{
lat: 31.096748002905972,
lng: 121.6502645679382,
},
{
lat: 31.09681346776922,
lng: 121.65058415211625,
},
{
lat: 31.0984163937885,
lng: 121.65039500909197,
},
{
lat: 31.09846399668793,
lng: 121.635887728152,
},
{
lat: 31.096272391226744,
lng: 121.63525689623259,
},
{
lat: 31.0949118275889,
lng: 121.63502325478095,
},
],
[
{
lat: 31.194970907104672,
lng: 121.6584194942127,
},
{
lat: 31.19304474931348,
lng: 121.65906381833776,
},
{
lat: 31.19383955462903,
lng: 121.6613490801989,
},
{
lat: 31.193270770182313,
lng: 121.66155180446557,
},
{
lat: 31.19335376639134,
lng: 121.66173108094608,
},
{
lat: 31.193359121327113,
lng: 121.66210689209561,
},
{
lat: 31.193054330012625,
lng: 121.6629318486556,
},
{
lat: 31.192974166859937,
lng: 121.66335145668637,
},
{
lat: 31.193270770182313,
lng: 121.6680137681392,
},
{
lat: 31.193928103929135,
lng: 121.67108156907517,
},
{
lat: 31.203216682131508,
lng: 121.66846241023232,
},
{
lat: 31.20081169606004,
lng: 121.65742396724724,
},
{
lat: 31.197375718773444,
lng: 121.65837109967688,
},
{
lat: 31.197100562334978,
lng: 121.65765092430635,
},
{
lat: 31.194970907104672,
lng: 121.6584194942127,
},
],
[
{
lat: 31.155820352732913,
lng: 121.60055409139811,
},
{
lat: 31.153450665057605,
lng: 121.60133431104639,
},
{
lat: 31.154071707691028,
lng: 121.60463357234292,
},
{
lat: 31.157085421439522,
lng: 121.61581493118462,
},
{
lat: 31.157656645975777,
lng: 121.61844836733891,
},
{
lat: 31.161128879554663,
lng: 121.64597731118138,
},
{
lat: 31.163347350383134,
lng: 121.64559601598282,
},
{
lat: 31.168637757867284,
lng: 121.64380034701996,
},
{
lat: 31.17109633390509,
lng: 121.64247538739684,
},
{
lat: 31.17365978052803,
lng: 121.64149910135878,
},
{
lat: 31.171562890741317,
lng: 121.63778654469407,
},
{
lat: 31.168656805389567,
lng: 121.6289536815088,
},
{
lat: 31.166500509575624,
lng: 121.62172647689582,
},
{
lat: 31.16510572551037,
lng: 121.6172236149837,
},
{
lat: 31.163767560086033,
lng: 121.61531146937809,
},
{
lat: 31.161979043893343,
lng: 121.60118585424827,
},
{
lat: 31.16133157365214,
lng: 121.6015391330112,
},
{
lat: 31.160764821763998,
lng: 121.5999682852161,
},
{
lat: 31.160382154282892,
lng: 121.59881565990197,
},
{
lat: 31.158869910894023,
lng: 121.59937856993909,
},
{
lat: 31.158251808680998,
lng: 121.59965646514003,
},
{
lat: 31.155820352732913,
lng: 121.60055409139811,
},
],
[
{
lat: 31.091364103796604,
lng: 121.5754470101779,
},
{
lat: 31.09146732163872,
lng: 121.57592724315205,
},
{
lat: 31.092744423203982,
lng: 121.57723276761865,
},
{
lat: 31.09283391532464,
lng: 121.57876215621566,
},
{
lat: 31.093082869860627,
lng: 121.57936385204957,
},
{
lat: 31.09331190745187,
lng: 121.57996554788346,
},
{
lat: 31.092833915324636,
lng: 121.5811920816987,
},
{
lat: 31.092950010835594,
lng: 121.58212468147518,
},
{
lat: 31.09343140510419,
lng: 121.58370300469787,
},
{
lat: 31.093517625515812,
lng: 121.58440418299973,
},
{
lat: 31.093051484576964,
lng: 121.58532754998174,
},
{
lat: 31.093169090591683,
lng: 121.58782922082351,
},
{
lat: 31.09277076338294,
lng: 121.58853505632095,
},
{
lat: 31.09300930736885,
lng: 121.59016301176223,
},
{
lat: 31.095589521180344,
lng: 121.58871143781226,
},
{
lat: 31.09615882884367,
lng: 121.58881520831672,
},
{
lat: 31.097670018815947,
lng: 121.58851435627211,
},
{
lat: 31.100969899138708,
lng: 121.58836121235976,
},
{
lat: 31.104304153736773,
lng: 121.5881764914123,
},
{
lat: 31.10566883032185,
lng: 121.58835977094915,
},
{
lat: 31.10573444514857,
lng: 121.57797417077516,
},
{
lat: 31.117380223477127,
lng: 121.57471846669296,
},
{
lat: 31.118471602772903,
lng: 121.57440489958154,
},
{
lat: 31.119294977815894,
lng: 121.5741688721979,
},
{
lat: 31.119665801685006,
lng: 121.5741141412104,
},
{
lat: 31.11950809968778,
lng: 121.57292268501384,
},
{
lat: 31.119262225893024,
lng: 121.5644154307948,
},
{
lat: 31.117841288314178,
lng: 121.56604706422759,
},
{
lat: 31.11675958383821,
lng: 121.56539397562746,
},
{
lat: 31.11246799613029,
lng: 121.5678115441431,
},
{
lat: 31.111450501801055,
lng: 121.56621331893189,
},
{
lat: 31.111050298252724,
lng: 121.566656999169,
},
{
lat: 31.111300245952787,
lng: 121.56711015909409,
},
{
lat: 31.110086878342734,
lng: 121.56807266301266,
},
{
lat: 31.107732163385265,
lng: 121.5696647632989,
},
{
lat: 31.10811282453436,
lng: 121.5706486782953,
},
{
lat: 31.105816276858757,
lng: 121.57222459824719,
},
{
lat: 31.10568625520089,
lng: 121.57108689382574,
},
{
lat: 31.105036144214612,
lng: 121.57177573829968,
},
{
lat: 31.10439440707906,
lng: 121.57129421717559,
},
{
lat: 31.102885002318263,
lng: 121.57155026978079,
},
{
lat: 31.102952722547933,
lng: 121.5733088225121,
},
{
lat: 31.1002238408149,
lng: 121.57376877346168,
},
{
lat: 31.099499701655905,
lng: 121.57291170312928,
},
{
lat: 31.099352191143677,
lng: 121.57250654260847,
},
{
lat: 31.098587814783883,
lng: 121.57271691441736,
},
{
lat: 31.097950829738707,
lng: 121.56880555708204,
},
{
lat: 31.09801788099924,
lng: 121.5680809430737,
},
{
lat: 31.09871521127523,
lng: 121.56741866145319,
},
{
lat: 31.098721685557997,
lng: 121.56697327424722,
},
{
lat: 31.098582376543185,
lng: 121.56635812183593,
},
{
lat: 31.098201597516617,
lng: 121.56600198096623,
},
{
lat: 31.098034425749706,
lng: 121.56513860916094,
},
{
lat: 31.09784867899356,
lng: 121.56454504104481,
},
{
lat: 31.098015851090597,
lng: 121.56360612420653,
},
{
lat: 31.097653644504796,
lng: 121.56251611730234,
},
{
lat: 31.097625782401963,
lng: 121.56236502723641,
},
{
lat: 31.09740288528216,
lng: 121.56228948220343,
},
{
lat: 31.097096400879963,
lng: 121.56215997643262,
},
{
lat: 31.096984951758834,
lng: 121.56168512193973,
},
{
lat: 31.096947802022452,
lng: 121.56119947529922,
},
{
lat: 31.096938514586054,
lng: 121.56103759308573,
},
{
lat: 31.09654792700758,
lng: 121.56059949273256,
},
{
lat: 31.09649872511909,
lng: 121.56021153230758,
},
{
lat: 31.09637197923222,
lng: 121.5598720411486,
},
{
lat: 31.09626981675609,
lng: 121.55962382175456,
},
{
lat: 31.09648342907963,
lng: 121.5593216416227,
},
{
lat: 31.096264314434233,
lng: 121.55801379643711,
},
{
lat: 31.09530425363609,
lng: 121.55825666234583,
},
{
lat: 31.094957421216552,
lng: 121.55703149073628,
},
{
lat: 31.094319246223428,
lng: 121.55733778363867,
},
{
lat: 31.093570078750666,
lng: 121.55664459443854,
},
{
lat: 31.092862526214905,
lng: 121.55472943802037,
},
{
lat: 31.08996289258761,
lng: 121.55643823000207,
},
{
lat: 31.087200639377166,
lng: 121.55720002568212,
},
{
lat: 31.08802140263372,
lng: 121.55855824770094,
},
{
lat: 31.087940570206595,
lng: 121.55920846036952,
},
{
lat: 31.086714366446703,
lng: 121.56006818600908,
},
{
lat: 31.087211802148683,
lng: 121.56022712688363,
},
{
lat: 31.087504044397303,
lng: 121.56090623789302,
},
{
lat: 31.087497826486583,
lng: 121.56186710772549,
},
{
lat: 31.087310464132013,
lng: 121.56242996253185,
},
{
lat: 31.087298028284554,
lng: 121.56279119179214,
},
{
lat: 31.087577834454898,
lng: 121.56297903100752,
},
{
lat: 31.088411030123332,
lng: 121.56256000506555,
},
{
lat: 31.08916159515248,
lng: 121.56383012690814,
},
{
lat: 31.08898749656361,
lng: 121.5651088784897,
},
{
lat: 31.089702542283884,
lng: 121.56550623067604,
},
{
lat: 31.089848891247126,
lng: 121.56612823003452,
},
{
lat: 31.089886197773186,
lng: 121.5668940360664,
},
{
lat: 31.09014400258064,
lng: 121.56787589462377,
},
{
lat: 31.089241852025307,
lng: 121.56858184175977,
},
{
lat: 31.08877721063459,
lng: 121.57047870019623,
},
{
lat: 31.088896510670054,
lng: 121.57074863774297,
},
{
lat: 31.089549518710506,
lng: 121.57093102797727,
},
{
lat: 31.089599749910494,
lng: 121.57160951964877,
},
{
lat: 31.089850905508282,
lng: 121.57190134402357,
},
{
lat: 31.09013345475441,
lng: 121.5721348035235,
},
{
lat: 31.090346935844302,
lng: 121.5729883898199,
},
{
lat: 31.090943424557295,
lng: 121.5736304034445,
},
{
lat: 31.091364103796604,
lng: 121.5754470101779,
},
],
[
{
lat: 31.135985064443382,
lng: 121.59981687629373,
},
{
lat: 31.135335641111386,
lng: 121.6054969849558,
},
{
lat: 31.135416522487166,
lng: 121.60805820496032,
},
{
lat: 31.14800438231277,
lng: 121.60243188486132,
},
{
lat: 31.147227643976464,
lng: 121.59615628373625,
},
{
lat: 31.142012826274073,
lng: 121.5961174722221,
},
{
lat: 31.139826955096297,
lng: 121.59702300368863,
},
{
lat: 31.135985064443382,
lng: 121.59981687629373,
},
],
[
{
lat: 31.204005816736185,
lng: 121.60727610196861,
},
{
lat: 31.204010437515336,
lng: 121.6096682203964,
},
{
lat: 31.20394988428604,
lng: 121.61208911538509,
},
{
lat: 31.208281112004368,
lng: 121.61687140468639,
},
{
lat: 31.209808928335946,
lng: 121.61897204950205,
},
{
lat: 31.210215680430444,
lng: 121.61952606571717,
},
{
lat: 31.211009337966722,
lng: 121.62016087596366,
},
{
lat: 31.21168269192449,
lng: 121.6208225031355,
},
{
lat: 31.213663899596273,
lng: 121.61953200763774,
},
{
lat: 31.214457734873672,
lng: 121.6205316700706,
},
{
lat: 31.21955679864161,
lng: 121.61849974751681,
},
{
lat: 31.216504483528915,
lng: 121.60335387138284,
},
{
lat: 31.20962537946184,
lng: 121.60396508068521,
},
{
lat: 31.21008112425129,
lng: 121.60679133532807,
},
{
lat: 31.20700563334325,
lng: 121.60701063341322,
},
{
lat: 31.204005816736185,
lng: 121.60727610196861,
},
],
[
{
lat: 31.235709551979557,
lng: 121.67030508794001,
},
{
lat: 31.237711902780653,
lng: 121.67984580547324,
},
{
lat: 31.249851260448896,
lng: 121.67527522293126,
},
{
lat: 31.253852469781638,
lng: 121.68987957416162,
},
{
lat: 31.262120938311888,
lng: 121.68785314676441,
},
{
lat: 31.261580519679363,
lng: 121.68547918411262,
},
{
lat: 31.260846811781743,
lng: 121.68278846880358,
},
{
lat: 31.257866470039932,
lng: 121.67316689411703,
},
{
lat: 31.256865921164504,
lng: 121.66598461704392,
},
{
lat: 31.25495803193539,
lng: 121.66617868129279,
},
{
lat: 31.235709551979557,
lng: 121.67030508794001,
},
],
]
\ No newline at end of file
......@@ -322,7 +322,8 @@ export enum SCOREWAYS {
我的信息 = 1,
我的数据,
我的企业数据,
任务得分
任务得分,
分值重置
}
......@@ -481,4 +482,88 @@ export enum CYCSRBJ {
大企业高管创业,
连续创业,
大学生创业
}
/**
* 标签类型
*/
export enum LABELTYPE {
系统标签 = 1,
自定义标签 = 2
}
export enum LABELGOAL {
孵化器 = 1,
企业
}
export enum LABELUPDATEROAD {
生效 = 1,
重新生效,
失效,
}
/**
* 孵化器系统标签
*/
export enum FHQSYSTEMLABEL {
专业技术平台 = "fhqzyjspt"
}
/**
* 企业系统标签
*/
export enum ENTERPRISESYSTEMLABEL {
在孵企业 = 'zfqy',
毕业企业 = "byqy",
拟毕业企业 = 'nbyqy',
融资企业 = 'rzqy',
上市企业 = 'ssqy',
高新企业 = 'gxqy',
专精特新 = 'zjtxqy',
小巨人 = 'xjrqy',
入驻非孵 = 'rzffqy',
虚拟企业 = 'xnqy',
迁出企业 = 'qcqy',
企业注销 = 'qyzx'
}
/**
* 孵化器自定义任务类型
*/
export enum FUHUAQICUSTOMTASKTYPE {
月度任务 = 1
}
export enum GUANWEIHUIMANANGENTERPRISELABEL {
新注册企业 = 'xzcqy',
新迁入企业 = 'xqrqy',
}
export enum RAS {
续存 = 1,
注销 = 2
}
export enum ENTERPRISESIZE {
未知 = 0,
大型,
中型,
小型,
微型
}
export enum NASHUIRENZIZHI {
未知 = 0,
小规模纳税人,
一般纳税人,
增值税一般纳税人
}
\ No newline at end of file
......@@ -72,7 +72,17 @@ export enum ERRORENUM {
缺少关键参数导致修改失败,
不合规操作,
未填安全手机号无法修改密码,
请输入聊天内容
请输入聊天内容,
目标数据不存在,
不能删除非自定义标签,
该数据周期已存在此类型任务,
任务延期不可将开始时间提前,
任务延期结束时间要大于开始时间,
不可提前回收已完成任务,
缺少月份参数,
多余年份与月份参数,
不可以创建未来数据月的任务,
填报周期不能小于数据周期
}
export enum ERRORCODEENUM {
......
......@@ -42,11 +42,17 @@ const intellectualPropertySchema = new Schema({
secondClassPatent:Number,//二类专利
}, {_id:false});
/**标签 */
const enterpriseLabelSchema = new Schema({
labelId:String,
state:{type:Boolean, default:true},//状态 false表示标签失效
},{_id:false});
const enterpriseSchema = new Schema({
name: {type:String, index: true},//企业名称
taskId:{type:String, index:true},//绑定的任务id
uscc:{type:String, index: true},//统一信用代码
fuHuaQiUscc:{type:String, index:true},//孵化器统一信用代码[-p---------------------------------------------]
fuHuaQiUscc:{type:String, index:true},//孵化器统一信用代码[-p]
industry:[Number],//领域
logonTime:Number,//注册时间
firstIncubationTime:Number,//首次入孵时间
......@@ -95,7 +101,31 @@ const enterpriseSchema = new Schema({
cycxfx:{type:[Number], default:[]},//创业创新方向
cycsrbj:{type:[Number], default:[]},//创业创始人背景
securePhon:String,//安全手机号,用于做修改密码用
/**标签系统 */
labels:{type:[enterpriseLabelSchema], default:[]},
/**导入的补充数据 */
RAS:{type:Number},//登记状态
logOffMS:{type:Number},//注销时间
legalPerson:String,//法人
zhuceziben:{type:String, default:'-'},//注册资本
shijiaoziben:{type:String, default:'-'},//实缴资本
dianHua:String,//电话
gengDuoDianHua:{type:String},//更多电话
mail:{type:String, default:'-'},//邮箱
moreMail:{type:String, default:'-'},//更多邮箱
enterpriseType:{type:String, index:true},//企业(机构)类型
zhuCeHao:String,//注册号
zuZhiJiGouDaiMa:String,//组织机构代码
canBaoRenShu:Number,//参保人数
canBaoRenShuNianBao:Number,//参保人数所属年报
yingYeQiXian:String,//营业期限
qiYeGuiMo:{type:Number, index:true},//企业规模
guanWang:String,//官网
tongXinDiZhi:String,//通信地址
jianJie:String,//企业简介
dengJiJiGuan:String,//登记机关
naShuiRenZiZhi:Number,//纳税人资质
zuiXinNianBaoNianFen:Number//最新年报年份
});
var enterpriseModel;
......@@ -495,4 +525,82 @@ export async function statsEnterpriseIntellectualPropertyInfo() {
"一类专利":reuslt.classIPatent,
"二类专利":reuslt.secondClassPatent
};
}
export async function newEnterpriseIndustry(year:number, month:number) {
let subList = await enterpriseModel.aggregate([
{
"$match":{
taskId:{"$regex":`${year}${month}$`}, draftLock:true
}
},
{
"$project":{
_id:"$uscc",
firstIndustry:{"$arrayElemAt":["$industry", 0]}
}
},
{
"$group":{
_id:"$firstIndustry",
count:{"$sum":1}
}
}
]);
return subList;
}
export async function findUsccList() {
return await enterpriseModel.find({}, {uscc:1});
}
export async function fuHuaQiEnterpairseCount(taskKey:string) {
let subList = await enterpriseModel.aggregate([
{
"$match":{
taskId:{"$regex":`${taskKey}$`}, draftLock:true
}
},
{
"$group":{
_id:"$fuHuaQiUscc",
"isCreateSum": {
"$sum":{"$cond": [ { "$eq":["$isCreate", true] },1, 0 ]}
},
"isNotCreateSum": {
"$sum":{"$cond": [ { "$eq":["$isCreate", false ]},1, 0 ]}
}
}
}
]);
return subList;
}
export async function statsEnterpriseLabels() {
let subList = await enterpriseModel.aggregate([
{
$unwind: "$labels"
},
{
$group: {
_id: "$labels.labelId",
"count": {
"$sum": {
"$cond": [
{ "$eq": ["$labels.state", true] }, // 假设 specificValue 是您想要检查的值
1,
0
]
}
}
}
}
]);
return subList;
}
\ No newline at end of file
/**
* 企业标签
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const enterpriseLabelLogSchema = new Schema({
uscc:{type:String, index:true},
labelId:String,
road:Number,
ct:Number,
desc:String
});
var enterpriseLabelLogModel;
export function initModel(){
enterpriseLabelLogModel = baseDB.model('enterpriseLabelLog', enterpriseLabelLogSchema);
enterpriseLabelLogModel.selectOnceData = async function (paramater:object) {
let selectInfo = await enterpriseLabelLogModel.findOne(paramater).exec();
if (selectInfo) {
if (!selectInfo.runSave) {
selectInfo.runSave = selectInfo.save;
selectInfo.save = save.bind(selectInfo)
}
}
return selectInfo;
}
}
export async function save(throwError=false) {
if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{
console.log(err);
});
}
export async function addManyLabelLog(addList:object) {
await enterpriseLabelLogModel.insertMany(addList);
}
export async function addOnceLabelLog(uscc:string, labelId:string, road:number, desc:string) {
await enterpriseLabelLogModel.create({uscc, labelId, road, desc, ct:new Date().valueOf() });
}
export async function findLabelLogByParam(param) {
return await enterpriseLabelLogModel.find(param);
}
\ No newline at end of file
......@@ -227,4 +227,26 @@ export async function statsFinancingEnterprise() {
list.push({uscc:_id, count});
});
return list;
}
export async function selectEnterpriseFinancingAmount(uscc:string) {
//financingAmount timeToObtainInvestment
let financingList = await financingInfoModel.find({uscc});
financingList.sort( (a, b) => {return a.timeToObtainInvestment - b.timeToObtainInvestment})
let state = false;
for (let i= 0; i < financingList.length; i++) {
let {financingAmount, timeToObtainInvestment} = financingList[i];
let count = financingAmount;
for (let j = (i+1); j < financingList.length; j++) {
count += financingList[j].financingAmount;
if ((financingList[j].timeToObtainInvestment - timeToObtainInvestment) > (365 * 24 * 3600 * 1000)) {
break;
}
}
if (count >= 500) {
state = true;
break;
}
}
return state;
}
\ No newline at end of file
......@@ -197,4 +197,32 @@ export async function statsEnterpriseQuerterBusinessInfo(year:number) {
});
return { biMap, rdMap, txpMap };
}
export async function selectEnterpriseBusinessAmount(uscc:string) {
//year BI
let financingList = await businessDataModel.aggregate([
{"$match":{uscc, "$or":[{isSubmit:true}, {fhqIsSubmit:true}] }},
{"$group":{_id:"$year",
BI:{"$sum":"$BI"},
}}
]);
financingList.sort( (a, b) => {return a._id - b._id});
let state = false;
for (let i= 0; i < financingList.length; i++) {
let {_id, BI} = financingList[i];
let count = BI;
for (let j = (i+1); j < financingList.length; j++) {
count += financingList[j].financingAmount;
if ((financingList[j]._id - _id) > 1) {
break;
}
}
if (count >= 10000000) {
state = true;
break;
}
}
return state;
}
\ No newline at end of file
/**
* 自定义任务
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const customTaskSchema = new Schema({
customTaskId:{type:String, index:true},//格式 fuHuaQiTaskType_数据周期的YYYYMM
customTaskType:{type:Number},//类型 遵循 FUHUAQICUSTOMTASKTYPE
dataCycle:{type:Number},//数据周期 202401 格式
startMs:{type:Number},
endMs:{type:Number},
isExtension:{type:Boolean, default:false}//是否延期
});
var customTaskModel;
export function initModel(){
customTaskModel = baseDB.model('customtask', customTaskSchema);
customTaskModel.selectOnceData = async function (paramater:object) {
let selectInfo = await customTaskModel.findOne(paramater).exec();
if (selectInfo) {
if (!selectInfo.runSave) {
selectInfo.runSave = selectInfo.save;
selectInfo.save = save.bind(selectInfo)
}
}
return selectInfo;
}
}
export async function save(throwError=false) {
if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{
console.log(err);
});
}
/**
* 通过taskId 获取此次自定义任务
* 支持.save方法保存对象修改
* @param taskId 任务id 格式遵循tool中getTaskId
* @returns {}
*/
export async function findCustomTaskByTaskId(customTaskId:string) {
let taskInfo = await customTaskModel.selectOnceData({customTaskId});
return taskInfo;
}
/**
* 列表 分页
* @param param
* @param skipCount
* @returns
*/
export async function findCustomTaskListByPage(param, skipCount) {
return await customTaskModel.find(param).skip(skipCount).limit(10);
}
export async function findCustomTaskCount(param) {
return await customTaskModel.find(param).countDocuments();
}
/**
* 添加自定义任务
* @param customTaskId
* @param customTaskType
* @param dataCycle
* @param startMs
* @param endMs
*/
export async function addTask(customTaskId:string, customTaskType:number, dataCycle:number, startMs:number, endMs:number ) {
await customTaskModel.create({customTaskId, customTaskType, dataCycle, startMs, endMs});
}
/**
* 孵化器标签
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const fuHuaQiLabelLogSchema = new Schema({
uscc:{type:String, index:true},
labelId:String,
road:Number,
ct:Number,
desc:String//描述
});
var fuHuaQiLabelLogModel;
export function initModel(){
fuHuaQiLabelLogModel = baseDB.model('fuHuaQiLabelLog', fuHuaQiLabelLogSchema);
fuHuaQiLabelLogModel.selectOnceData = async function (paramater:object) {
let selectInfo = await fuHuaQiLabelLogModel.findOne(paramater).exec();
if (selectInfo) {
if (!selectInfo.runSave) {
selectInfo.runSave = selectInfo.save;
selectInfo.save = save.bind(selectInfo)
}
}
return selectInfo;
}
}
export async function save(throwError=false) {
if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{
console.log(err);
});
}
export async function addManyLabelLog(addList:object) {
await fuHuaQiLabelLogModel.insertMany(addList);
}
export async function addOnceLabelLog(uscc:string, labelId:string, road:number, desc:string) {
await fuHuaQiLabelLogModel.create({uscc, labelId, road, desc, ct:new Date().valueOf() });
}
export async function findLabelLogByParam(param) {
return await fuHuaQiLabelLogModel.find(param);
}
\ No newline at end of file
......@@ -29,6 +29,12 @@ const hatchingGroundSchema = new Schema({
personInChargeAddress:{type:[String], default:[]}
},{_id:false});
/**标签 */
const labelSchema = new Schema({
labelId:String,
state:{type:Boolean, default:true},//状态 false表示标签失效
},{_id:false});
const fuHuaQiSchema = new Schema({
name: {type:String,index: true},//名称
operationName:String,//运营机构名称 不可修改
......@@ -81,7 +87,10 @@ const fuHuaQiSchema = new Schema({
/**2024年04月23日字段 */
fuHuazhuCeDiZhi:{type:[String], default:[]},//孵化注册地址
fuHuaLianXiDiZhi:{type:[String], default:[]},//孵化联系地址
/**标签系统 */
labels:{type:[labelSchema], default:[]},
/**2024年6月 */
caiLiHuGuanDi:{type:String, default:""}//财力户管地
});
var fuHuaQiModel;
......@@ -175,6 +184,20 @@ export async function findAllFuHuaQiOperationNameMap() {
* 获取所有运营机构名称的map
* @returns map key:统一信用代码 value:运营机构名称
*/
export async function findFuHuaQiOperationNameMapByOperationName(param) {
let dataList = await fuHuaQiModel.find(param);
let map = {};
dataList.forEach(info => {
map[info.uscc] = info.operationName;
});
return map;
}
/**
* 获取所有运营机构名称的map
* @returns map key:统一信用代码 value:运营机构名称
*/
export async function findFuHuaQiOperationNameMapByParam(param) {
let dataList = await fuHuaQiModel.find(param);
let map = {};
......@@ -262,4 +285,29 @@ export async function findFuHuaQiByBindId(bindId:string) {
*/
export async function findFuHuaQiFilesDataByParam(param, files) {
return await fuHuaQiModel.find(param, files);
}
export async function statsFuHuaQiLabels() {
let subList = await fuHuaQiModel.aggregate([
{
$unwind: "$labels"
},
{
$group: {
_id: "$labels.labelId",
"count": {
"$sum": {
"$cond": [
{ "$eq": ["$labels.state", true] }, // 假设 specificValue 是您想要检查的值
1,
0
]
}
}
}
}
]);
return subList;
}
\ No newline at end of file
......@@ -134,3 +134,64 @@ export async function deleteEnterpriseFinancing(uscc:string, taskId:string) {
export async function findFinancingList(selectParam:object) {
return await financingModel.find(selectParam);
}
/**
* 获取融资企业数量
* @param param
* @returns
*/
export async function statsFinancingEnterpriseCount(param) {
let statsList = await financingModel.aggregate([
{"$match":param },
{"$group":{_id:{"uscc":"$uscc", "dist":"1"}, count:{"$sum":1} }},
{"$group":{_id:"$_id.dist", count:{"$sum":1} }}
]);
return statsList[0] ? statsList[0].count : 0;
}
/**
* 统计融资金额
* @param param
* @returns
*/
export async function statsFinancingCount(param) {
let statsList = await financingModel.aggregate([
{"$match":param },
{"$group":{_id:null, count:{"$sum":"$financingAmount"} }}
]);
return statsList[0] ? statsList[0].count : 0;
}
/**
* 统计融资金额和融资企业数量
* @param param
* @returns
*/
export async function statsFinancingEnterpriseAndCount(taskKey) {
let statsList = await financingModel.aggregate([
{"$match":{taskId:{"$regex":`${taskKey}$`}, draftLock:true} },
{
"$group":{
_id:{
"fuHuaQiUscc":"$fuHuaQiUscc",
"enterpriseUscc":"$enterpriseUscc"
},
"count":{"$sum":"$financingAmount"}
}
},
{
"$group":{
_id:"$_id.fuHuaQiUscc",
"enterpriseCount":{"$sum":1},
"financingAmount":{"$sum":"$count"}
}
}
]);
return statsList;
}
......@@ -140,4 +140,19 @@ export async function statsFuHuaQiMonthDataCount(year:number, month:number) {
*/
export async function getLowOccupancyRateForMonthData(year:number, month:number) {
return await monthTableModel.find({year, month, draftLock:true}).sort({occupancyRate:1}).limit(5);
}
/**
* 计算平均出租率
* @param year
* @param month
*/
export async function statsAvgOccupancyRate(year:number, month:number) {
let statsList = await monthTableModel.aggregate([
{"$match":{year, month, draftLock:true}},
{"$group":{_id:"$month", avgRate:{"$avg":"$occupancyRate"} }}
]);
return statsList[0] ? statsList[0].avgRate : 0;
}
\ No newline at end of file
......@@ -25,6 +25,10 @@ const fuHuaQiTaskSchema = new Schema({
month:Number,//数据的月
year:Number,//数据的年 2.0算分的时候加入的
submitCount:{type:Number, default:0},//提交数量 默认0
startTime:{type:Number, default:0},//任务开始时间 6.0加入
endTime:{type:Number, default:0},//任务结束时间 6.0加入
customTaskId:{type:Number}//自定义任务id 用于找关联数据
});
var fuHuaQiTaskModel;
......@@ -116,6 +120,10 @@ export async function updateTaskYearData(year:number) {
}
export async function upodateTaskStartAdnEndTime(selectParam, updateParam) {
return await fuHuaQiTaskModel.updateMany(selectParam, {$set:updateParam});
}
/**
* 根据条件分页查询任务列表
* @param selectParam 查询条件
......@@ -144,7 +152,7 @@ export async function updateSubmitCount(taskId:string, type:number, count:number
/**
* 获取个月的所有孵化器的填报率
* 获取个月的所有孵化器的填报率
* @param year
* @param month
* @returns
......@@ -161,4 +169,13 @@ export async function statsFuHuaQiTaskReportingRate(year:number, month:number) {
export async function findOneFuHuaQiMonthTaskData(selectParam) {
return await fuHuaQiTaskModel.findOne(selectParam);
}
\ No newline at end of file
}
/**
* 填报周期
*/
export async function distinctCycle() {
return await fuHuaQiTaskModel.distinct('key');
}
......@@ -73,3 +73,7 @@ export async function initFuHuaQiScore(array) {
export async function findScoreDataByParam(param) {
return await fuHuaQiScoreModel.find(param);
}
export async function updateOneByUscc(uscc, updateInfo) {
await fuHuaQiScoreModel.updateOne({uscc}, {"$set":updateInfo});
}
\ No newline at end of file
......@@ -98,4 +98,16 @@ export async function getLogByParam(param) {
export async function updateLog(uscc:string, timeMs:number,ways:number,taskType:number, newTimeMs:number) {
return await fuHuaQiScoreLogModel.updateOne({uscc, ways, taskType, timeMs}, {"$set":{timeMs:newTimeMs}});
}
export async function removeLogByParam(param) {
await fuHuaQiScoreLogModel.deleteMany(param);
}
export async function updateInfo(param, updateInfo) {
return await fuHuaQiScoreLogModel.updateOne(param, {"$set":updateInfo});
}
export async function getNewLog(uscc) {
return await fuHuaQiScoreLogModel.findOne({uscc}).sort({timeMs:-1});
}
\ No newline at end of file
......@@ -11,7 +11,9 @@ const guanWeiHuiSchema = new Schema({
loginId: {type:String, index:true},//登录账号
pwd:String,//密码
token:String,
tokenMs:Number
tokenMs:Number,
mobileToken:String,
mobileTokenMs:Number
});
var guanWeiHuiModel;
......
......@@ -69,7 +69,7 @@ export async function selectInformationByParam(param) {
}
export async function selectInformationByParamToPage(param, skipNumber:number) {
return await informationModel.find(param).sort({createTimeMs:-1}).skip(skipNumber).limit(10);;
return await informationModel.find(param).sort({createTimeMs:-1}).skip(skipNumber).limit(10);
}
export async function selectInformationByParamCount(param) {
......
/**管委会月报 */
import moment = require("moment");
import { FUHUAQILV, FUHUASTATE, INDUSTRY, INSTITUTIONALNATURE } from "../../config/enum";
import { findEnterpriseList } from "../enterprise/enterprise";
import { findFuHuaQiCount, findFuHuaQiList } from "../fuHuaQi/fuhuaqi";
import { findTaskListByParam } from "../fuHuaQi/monthTask/task";
import { findMonthTableList, findMonthTableListCount } from "../fuHuaQi/monthTask/monthTable";
import { changeEnumValue } from "../../util/verificationEnum";
export async function gtest() {
let fuHuaQiCountParam = {userState:false, uscc:{"$ne":"123456789123456789"}};
let fuHuaQiCount = await findFuHuaQiCount(fuHuaQiCountParam);//孵化器个数
let fuHuaQiList = await findFuHuaQiList(fuHuaQiCountParam);
let acreageTotalCount = 0;
let incubatedAcreageCount = 0;
let lvMap = {
1:{name:FUHUAQILV[FUHUAQILV.国家级众创空间], count:0},
2:{name:FUHUAQILV[FUHUAQILV.市级众创空间], count:0},
3:{name:FUHUAQILV[FUHUAQILV.国家级孵化器], count:0},
4:{name:FUHUAQILV[FUHUAQILV.市级孵化器], count:0},
5:{name:FUHUAQILV[FUHUAQILV.区级], count:0}
};
let institutionalNatureMap = {
1:{name:INSTITUTIONALNATURE[INSTITUTIONALNATURE.国资为主], count:0},
2:{name:INSTITUTIONALNATURE[INSTITUTIONALNATURE.民资为主], count:0},
3:{name:INSTITUTIONALNATURE[INSTITUTIONALNATURE.外资为主], count:0}
};
let industryMap = {};
for (let key in INDUSTRY) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
industryMap[INDUSTRY[key]]= {name:keyStr, count:0}
}
}
let fuHuaQiUsccNameMap = {};
fuHuaQiList.forEach(info => {
let {acreageTotal, incubatedAcreage, acreagePersonalUse, institutionalNature, industry, lv} = info;
if (acreageTotal) acreageTotalCount += acreageTotal;
if (incubatedAcreage) incubatedAcreageCount += incubatedAcreage;
if(lv) lvMap[lv].count += 1;
institutionalNatureMap[institutionalNature].count += 1;
if (industry[0]) {
industryMap[industry[0]].count += 1;
}
fuHuaQiUsccNameMap[info.uscc] = {opName:info.operationName, name:info.name, acreageTotal}
});
console.log("孵化器总面积", acreageTotalCount, "总在孵面积", incubatedAcreageCount);
console.log("国家级科技企业孵化器:",lvMap[FUHUAQILV.国家级孵化器].count);
console.log("国家级众创空间:",lvMap[FUHUAQILV.国家级众创空间].count);
console.log("市级孵化器:",lvMap[FUHUAQILV.市级孵化器].count);
console.log("市级众创空间:",lvMap[FUHUAQILV.市级众创空间].count);
console.log("=====================");
console.log("国有:",institutionalNatureMap[INSTITUTIONALNATURE.国资为主].count);
console.log("民营:",institutionalNatureMap[INSTITUTIONALNATURE.民资为主].count);
console.log("外资:",institutionalNatureMap[INSTITUTIONALNATURE.外资为主].count);
console.log("=====================");
console.log("人工智能及信息技术:",industryMap[INDUSTRY.人工智能及智能制造].count+industryMap[INDUSTRY.软件和信息服务业].count);
console.log("生物医药:",industryMap[INDUSTRY.生物医药].count);
console.log("集成电路:",industryMap[INDUSTRY.集成电路].count);
console.log("综合及其他:",industryMap[INDUSTRY.航空航天].count+industryMap[INDUSTRY.汽车产业].count+industryMap[INDUSTRY.低碳环保及新材料].count+industryMap[INDUSTRY.综合].count+industryMap[INDUSTRY.文化创意].count);
let enterpriseSelectParam = {
"$or": [
{
"$and":[
{
"draftLock":true
},
{
"taskId":{
"$ne":null
}
}
]
},
{
"$and": [
{
"draftLock":false
},
{
"taskId":null
}
]
}
],
state:{"$ne":FUHUASTATE.迁出}
};
let enterpriseList = await findEnterpriseList(enterpriseSelectParam);
let count = 0;
let nullCount = 0;
let thisYearCount = 0;
let thisYearCountMap = {};
enterpriseList.forEach(info => {
let {operatingAddress, logonAddress, fuHuaQiUscc, logonTime, industry, taskId, createTime, uscc, name} = info;
if (createTime && createTime > new Date("2024-01-01 00:00:00").valueOf()) {
// if (delList.indexOf(uscc) != -1) {
// return;
// }
let monthKey = moment(createTime).format("YYYYMM");
if (!thisYearCountMap[monthKey]) {
thisYearCountMap[monthKey] = {count:0};
for (let key in INDUSTRY) {
let anyKey:any = key;
if (isNaN(anyKey)) {
let keyStr = key;
thisYearCountMap[monthKey][keyStr]= 0;
}
}
}
thisYearCountMap[monthKey].count += 1;
if (industry && industry[0]) thisYearCountMap[monthKey][changeEnumValue(INDUSTRY,industry[0])] += 1;
thisYearCount += 1;
}
// if(taskId) {
// let taskIndex = taskId.slice(-5);
// if (taskIndex == "20242" || taskIndex == "20243" || taskIndex == "20244" || taskIndex == "20245") {
// if (!thisYearCountMap[taskIndex]) thisYearCountMap[taskIndex] = 0;
// thisYearCountMap[taskIndex] += 1;
// thisYearCount += 1;
// }
// }
if (logonAddress[0] && logonAddress[0] != "上海市" ) {
// console.log("注册地不在上海+1");
return;
}
if (logonAddress[1] && logonAddress[1] != "上海市" ) {
// console.log("经营地不在上海+1");
return;
}
// if (delList.indexOf(uscc) != -1) {
// // console.log("xxx");
// return;
// }
if(!logonAddress[0]) nullCount += 1;
if (logonTime) {
let yearLong = moment().diff(logonTime, 'years');
if (industry.indexOf(INDUSTRY.人工智能及智能制造) != -1 || industry.indexOf(INDUSTRY.生物医药) != -1 || industry.indexOf(INDUSTRY.集成电路) != -1) {
if (yearLong <= 5) count += 1;
} else {
if (yearLong <=4) count += 1;
}
}
});
console.log("本年累计新增",thisYearCount,"家");
console.log("在孵企业",count);
console.log("注册地址缺失:", nullCount);
let wangList = [];
//出租率
let monthAVGList = [];
for (let i = 1; i < 5; i++) {
let monthList = await findMonthTableList({year:2024, month:i, draftLock:true});
let thisMonthCheckCount = await findMonthTableListCount({year:2024, month:i, draftLock:true});
let monthCount = 0;
monthList.forEach(info => {
let {occupancyRate, fuHuaQiUscc} = info;
monthCount += occupancyRate;
if (i == 4 && occupancyRate < 50) {
wangList.push({name:fuHuaQiUsccNameMap[fuHuaQiUscc].opName, value:occupancyRate, acreageTotal:fuHuaQiUsccNameMap[fuHuaQiUscc].acreageTotal});
}
});
let avg = Math.ceil((monthCount / monthList.length)*100)/100;
monthAVGList.push(avg);
if (i != 1) console.log(`${i}月发出填报要求105,有效填报${thisMonthCheckCount}份,未填报${105-thisMonthCheckCount}份共收集,月平均出租率${avg},环比${(avg-monthAVGList[i-2])>0 ? "上升":"下降"}${Math.abs(Math.round((avg-monthAVGList[i-2])*100)/100)}`);
}
console.log("=================");
wangList.forEach(info => {
console.log(info.name, " 出租率:", info.value, " 孵化面积", info.acreageTotal);
});
console.log("============");
console.log("本月新增企业领域占比");
let thisMonth = moment().format("YYYYMM");//本月
for (let key in thisYearCountMap[thisMonth]) {
if (key == "count") continue;
let value = thisYearCountMap[thisMonth][key];
if (value) {
console.log(`${key}${value}家,占比${Math.round((value/thisYearCountMap[thisMonth]["count"]) *10000 )/100}`);
}
}
console.log();
}
\ No newline at end of file
/**
* 标签系统
*/
import {Schema} from 'mongoose';
import { baseDB } from '../db/mongo/dbInit';
const labelSchema = new Schema({
id:{type:String, index:true},//标识
labelName:String,
ctMs:Number,//创建时间
goal:Number,//目标 LABELGOAL
labelType:Number,//标签类型 LABELTYPE 系统标签不可以删除
state:{type:Boolean, default:false}//是否停用 true表示已停用
});
var labelModel;
export function initModel(){
labelModel = baseDB.model('label', labelSchema);
labelModel.selectOnceData = async function (paramater:object) {
let selectInfo = await labelModel.findOne(paramater).exec();
if (selectInfo) {
if (!selectInfo.runSave) {
selectInfo.runSave = selectInfo.save;
selectInfo.save = save.bind(selectInfo)
}
}
return selectInfo;
}
}
export async function save(throwError=false) {
if (!this.isModified()) return;
await this.runSave({validateBeforeSave:false}).catch(err=>{
console.log(err);
});
}
export async function createLabel(goal:number, labelType:number, name:string, id:string) {
let addInfo = { id, goal, labelType, labelName:name, ctMs:new Date().valueOf(), state:false, isDelete:false };
return await labelModel.create(addInfo);
}
export async function findOnceLabel(id:string) {
return await labelModel.selectOnceData({id});
}
export async function selectLabelList(param) {
return await labelModel.find(param);
}
export async function selectLabelListToPage(param, skipNumber) {
return await labelModel.find(param).skip(skipNumber).limit(10);
}
export async function selectLabelCount(param) {
return await labelModel.find(param).countDocuments();
}
export async function addSystemLabel(labels) {
await labelModel.insertMany(labels);
}
export async function delLabel(id) {
return await labelModel.deleteOne({id});
}
export async function getEffectiveLabelMap(goal:number) {
let list = await labelModel.find({goal, state:false});
let map = {};
list.forEach( info => {
let {id, labelName, labelType} = info;
map[id] = {labelName, labelType};
});
return map;
}
export async function getLabelNamMap(goal:number) {
let list = await labelModel.find({goal});
let nameMap = {};
list.forEach(info => {
let {id, labelName, state} = info;
nameMap[id] = {labelName, state};
});
return nameMap;
}
\ No newline at end of file
......@@ -28,6 +28,13 @@ import * as dataMaintenanceLogModel from "../../data/guanWeiHui/dataMaintenance
/**测试 */
import * as scoreRepairModel from "../../data/fuHuaQi/scoreRepair";
import * as scoreLogRepairModel from "../../data/fuHuaQi/scoreLogRepair";
/**标签 */
import * as labelModel from "../../data/label";
import * as enterpriseLabelLogModel from "../../data/enterprise/enterpriseLabelLog";
import * as fuHuaQiLabelLogModel from "../../data/fuHuaQi/fuHuaQiLabelLog";
import * as customTaskModel from "../../data/fuHuaQi/customTask";
export async function initTable() {
......@@ -60,4 +67,12 @@ export async function initTable() {
scoreRepairModel.initModel();
scoreLogRepairModel.initModel();
labelModel.initModel();
enterpriseLabelLogModel.initModel();
fuHuaQiLabelLogModel.initModel();
customTaskModel.initModel();
}
\ No newline at end of file
......@@ -23,7 +23,6 @@ async function lanuch() {
initOutline();
/**创建http服务 */
httpServer.createServer(systemConfig.port);
// await smsTask();
console.log('This indicates that the server is started successfully.');
}
......
......@@ -4,6 +4,35 @@ import { findFuHuaQiByUSCC } from "../data/fuHuaQi/fuhuaqi";
import { findGuanWeiHuiUserInfoByLoginId } from "../data/guanWeiHui/guanweihui";
import { BizError } from "../util/bizError";
/**
* 管委会小程序中间件
* @param req
* @param res
* @param next
* @returns
*/
export async function checkGuanWeiHuiMobileToken(req, res, next) {
if (!req.headers) req.headers = {};
const reqToken = req.headers.token;
const userId = req.headers.userid || "";
if (!userId) return next(new BizError(ERRORENUM.身份验证失败, `userId:${userId} token:${reqToken}`));
let userInfo = await findGuanWeiHuiUserInfoByLoginId(userId);
if (!userInfo) return next(new BizError(ERRORENUM.非法登录, `userId:${userId} token:${reqToken}`));
/**2023-2-8日需求 登录一次一直有效 */
// if (userInfo.token != reqToken || (new Date().valueOf() - userInfo.tokenMs) > (3600*100*24*7) ) return next(new BizError(ERRORENUM.身份验证过期, `userId:${userId} token:${reqToken}`));
if (userInfo.mobileToken != reqToken ) return next(new BizError(ERRORENUM.身份验证过期, `userId:${userId} token:${reqToken}`));
req.headers.uscc = req.headers.userid;
next();
}
/**
* 中间件 校验孵化器token
* @param req
......
/**
* 管理后台 标签路由
*/
import * as asyncHandler from 'express-async-handler';
import { checkGuanWeiHuiToken } from '../../middleware/user';
import { eccReqParamater } from '../../util/verificationParam';
import * as labelBiz from '../../biz/admin/label';
import * as fuHuaQiLabelBiz from '../../biz/admin/fuHuaQi/fuHuaQiLabel';
import * as enterpriseLabelBiz from '../../biz/admin/enterprise/enterpriseLabel';
export function setRouter(httpServer) {
/** 标签管理*/
httpServer.post('/admin/labels/list',checkGuanWeiHuiToken, asyncHandler(labList));
httpServer.post('/admin/labels/add',checkGuanWeiHuiToken, asyncHandler(createLab));
httpServer.post('/admin/labels/update',checkGuanWeiHuiToken, asyncHandler(updateLab));
httpServer.post('/admin/labels/delete',checkGuanWeiHuiToken, asyncHandler(deleteLab));
httpServer.post('/admin/labels/select',checkGuanWeiHuiToken, asyncHandler(labelSelect));
/** 孵化器标签*/
httpServer.post('/admin/labels/fuhuaqi/list',checkGuanWeiHuiToken, asyncHandler(fuHuaQiLabList));
httpServer.post('/admin/labels/fuhuaqi/add',checkGuanWeiHuiToken, asyncHandler(addFuHuaQiLab));
httpServer.post('/admin/labels/fuhuaqi/log',checkGuanWeiHuiToken, asyncHandler(fuHuaQiLabLog));
httpServer.post('/admin/labels/fuhuaqi/del',checkGuanWeiHuiToken, asyncHandler(delFuHuaQiLab));
/**企业标签 */
httpServer.post('/admin/labels/enterprise/list',checkGuanWeiHuiToken, asyncHandler(enterpriseLabList));
httpServer.post('/admin/labels/enterprise/add',checkGuanWeiHuiToken, asyncHandler(addEnterpriseLab));
httpServer.post('/admin/labels/enterprise/log',checkGuanWeiHuiToken, asyncHandler(enterpriseLabLog));
httpServer.post('/admin/labels/enterprise/del',checkGuanWeiHuiToken, asyncHandler(delEnterpriseLab));
}
async function labList(req, res) {
let reqConf = {
pageNumber:'Number'
};
const NotMustHaveKeys = [];
let {pageNumber} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await labelBiz.labelList(pageNumber);
res.success(result);
}
async function createLab(req, res) {
let reqConf = {
name: 'String',//机构名称
goal: 'Number' //类型
};
const NotMustHaveKeys = [];
let {goal, name} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await labelBiz.addLabel(name, goal);
res.success(result);
}
async function updateLab(req, res) {
let reqConf = {
name: 'String',//机构名称
id: 'String' //id
};
const NotMustHaveKeys = [];
let {id, name} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await labelBiz.updateLabelName(id, name);
res.success(result);
}
async function deleteLab(req, res) {
let reqConf = {
id: 'String'//标识
};
const NotMustHaveKeys = [];
let {id} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await labelBiz.deleteLabel(id);
res.success(result);
}
async function fuHuaQiLabList(req, res) {
let reqConf = {
name: 'String',//标识
labelIdList:'[String]',
pageNumber:'Number'
};
const NotMustHaveKeys = ["name", "pageNumber", "labelIdList"];
let {name, pageNumber, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await fuHuaQiLabelBiz.fuHuaQiLabelList(name, pageNumber, labelIdList);
res.success(result);
}
async function addFuHuaQiLab(req, res) {
let reqConf = {
uscc: 'String',//企业统一信用代码
labelIdList:'[String]',//标签列表
};
const NotMustHaveKeys = [];
let {uscc, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await fuHuaQiLabelBiz.addFuHuaQiLabel(uscc, labelIdList);
res.success(result);
}
async function delFuHuaQiLab(req, res) {
let reqConf = {
uscc: 'String',//企业统一信用代码
labelIdList:'[String]'//标签列表
};
const NotMustHaveKeys = [];
let {uscc, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await fuHuaQiLabelBiz.deleteFuHUaQiLabel(uscc, labelIdList);
res.success(result);
}
async function fuHuaQiLabLog(req, res) {
let reqConf = {
uscc: 'String',//企业统一信用代码
};
const NotMustHaveKeys = [];
let {uscc} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await fuHuaQiLabelBiz.labelLogList(uscc);
res.success(result);
}
async function enterpriseLabList(req, res) {
let reqConf = {
name: 'String',//标识
labelIdList:'[String]',
pageNumber:'Number'
};
const NotMustHaveKeys = ["name", "pageNumber", "labelIdList"];
let {name, pageNumber, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await enterpriseLabelBiz.enterpriseLabelList(name, pageNumber, labelIdList);
res.success(result);
}
async function addEnterpriseLab(req, res) {
let reqConf = {
uscc: 'String',//标识
labelIdList:'[String]'
};
const NotMustHaveKeys = [];
let {uscc, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await enterpriseLabelBiz.addEnterpriseLabel(uscc, labelIdList);
res.success(result);
}
async function delEnterpriseLab(req, res) {
let reqConf = {
uscc: 'String',//标识
labelIdList:'[String]'
};
const NotMustHaveKeys = [];
let {uscc, labelIdList} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await enterpriseLabelBiz.deleteEnterpriseLabel(uscc, labelIdList);
res.success(result);
}
async function enterpriseLabLog(req, res) {
let reqConf = {
uscc: 'String',//标识
};
const NotMustHaveKeys = [];
let {uscc} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await enterpriseLabelBiz.enterpriseLabelLogList(uscc);
res.success(result);
}
async function labelSelect(req, res) {
let reqConf = {
goal:'Number',//1是孵化器 2是企业
};
const NotMustHaveKeys = [];
let {goal} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await enterpriseLabelBiz.getLabelListByGoal(goal);
res.success(result);
}
\ No newline at end of file
......@@ -3,7 +3,7 @@
*/
import * as asyncHandler from 'express-async-handler';
import * as fuHuaQiAdminBiz from '../../biz/admin/fuHuaQi/fuHuaQi';
import * as customTaskBiz from '../../biz/admin/fuHuaQi/customTask';
import * as taskBiz from '../../biz/admin/fuHuaQi/task';
import { checkGuanWeiHuiToken } from '../../middleware/user';
import { eccReqParamater } from '../../util/verificationParam';
......@@ -17,7 +17,12 @@ export function setRouter(httpServer) {
httpServer.post('/admin/data/output/financingtasklist',checkGuanWeiHuiToken, asyncHandler(outPutFinancingTask));
httpServer.post('/admin/data/output/enterprisetasklist',checkGuanWeiHuiToken, asyncHandler(outPutEnterpriseTaskList));
httpServer.post('/admin/data/output/businesstasklist',checkGuanWeiHuiToken, asyncHandler(outPutQBusinessTaskList));
/**自定义任务 */
// httpServer.post('/admin/task/customtask/fuhuaqi/list', checkGuanWeiHuiToken, asyncHandler(customTaskList));
// httpServer.post('/admin/task/customtask/fuhuaqi/add', checkGuanWeiHuiToken, asyncHandler(addCustomTask));
// httpServer.post('/admin/task/customtask/fuhuaqi/recovery', checkGuanWeiHuiToken, asyncHandler(recoveryCustomTask));
// httpServer.post('/admin/task/customtask/fuhuaqi/changecycle', checkGuanWeiHuiToken, asyncHandler(changeCustomTaskCycle));
}
......@@ -123,4 +128,63 @@ async function outPutQBusinessTaskList(req, res) {
let fileName = `孵化器${name}经营数据.xlsx`;
res.success({name:fileName, data:dataList});
}
async function customTaskList(req, res) {
let reqConf = {
fuHuaQiTaskType:'Number',
dataCycle:'Number',
pageNumber:'Number'
};
const NotMustHaveKeys = ["fuHuaQiTaskType", "dataCycle"];
let { fuHuaQiTaskType, dataCycle, pageNumber } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await customTaskBiz.taskList( fuHuaQiTaskType, dataCycle, pageNumber);
res.success(result);
}
async function addCustomTask(req, res) {
let reqConf = {
fuHuaQiTaskType:'Number',
dataCycle:'Number',
startMs:'Number',
endMs:'Number'
};
const NotMustHaveKeys = [];
let { fuHuaQiTaskType, dataCycle, startMs, endMs } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await customTaskBiz.createTask( fuHuaQiTaskType, dataCycle, startMs, endMs);
res.success(result);
}
async function recoveryCustomTask(req, res) {
let reqConf = {
id:'String',
};
const NotMustHaveKeys = [];
let { id } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await customTaskBiz.recovery(id);
res.success(result);
}
async function changeCustomTaskCycle(req, res) {
let reqConf = {
id:'String',
startMs:'Number',
endMs:'Number'
};
const NotMustHaveKeys = [];
let { id, startMs, endMs } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let result = await customTaskBiz.changeCycle(id, startMs, endMs);
res.success(result);
}
\ No newline at end of file
/**
* 小程序端 管委会 用户基础功能路由
*/
import * as asyncHandler from 'express-async-handler';
import * as enterpriseManageBaseBiz from '../../biz/mobileGuanWeiHui/enterpriseManage/base';
import * as fuHuaQiManageBaseBiz from '../../biz/mobileGuanWeiHui/fuHuaQiManage/base';
import * as fuHuaQiManageTaskBiz from '../../biz/mobileGuanWeiHui/fuHuaQiManage/task';
import * as homePageBiz from '../../biz/mobileGuanWeiHui/homePage';
import { eccReqParamater } from '../../util/verificationParam';
import { checkGuanWeiHuiMobileToken } from '../../middleware/user';
export function setRouter(httpServer) {
httpServer.post('/guanweihui/enterprise/list', checkGuanWeiHuiMobileToken, asyncHandler(enterpriseList));
httpServer.post('/guanweihui/enterprise/info', checkGuanWeiHuiMobileToken, asyncHandler(enterpriseInfo));
httpServer.post('/guanweihui/fuhuaqi/list', checkGuanWeiHuiMobileToken, asyncHandler(fuHuaQiList));
httpServer.post('/guanweihui/fuhuaqi/info', checkGuanWeiHuiMobileToken, asyncHandler(fuHuaQiInfo));
httpServer.post('/guanweihui/fuhuaqi/task/tasklist', checkGuanWeiHuiMobileToken, asyncHandler(fuHuaQiTaskList));
httpServer.post('/guanweihui/fuhuaqi/task/monthlist', checkGuanWeiHuiMobileToken, asyncHandler(fuHuaQiTaskMonthsList))
httpServer.post('/guanweihui/homepage/info', checkGuanWeiHuiMobileToken, asyncHandler(homePageTop));
httpServer.post('/guanweihui/homepage/enterpriselabel', checkGuanWeiHuiMobileToken, asyncHandler(getEnterpriseLabel));
httpServer.post('/guanweihui/homepage/fuhuaqilabel', checkGuanWeiHuiMobileToken, asyncHandler(getFuHuaQiLabel));
}
async function enterpriseList(req, res) {
let reqConf = {name:'String', page:'Number', labelId:"String", year:"Number", month:"Number"};
let {labelId, year, month, name, page} = eccReqParamater(reqConf, req.body, ["teams","labelId", "year", "month",]);
let result = await enterpriseManageBaseBiz.enterpriseList(name, page, labelId, year, month);
res.success(result);
}
async function enterpriseInfo(req, res) {
let reqConf = {uscc:'String'};
let {uscc} = eccReqParamater(reqConf, req.body);
let result = await enterpriseManageBaseBiz.enterpriseInfomation(uscc);
res.success(result);
}
async function fuHuaQiList(req, res) {
let reqConf = {labelId:"String", name:'String', page:'Number'};
let {name, page, labelId} = eccReqParamater(reqConf, req.body);
let result = await fuHuaQiManageBaseBiz.fuHuaQiList(name, page, labelId);
res.success(result);
}
async function fuHuaQiInfo(req, res) {
let reqConf = {uscc:'String'};
let {uscc} = eccReqParamater(reqConf, req.body);
let result = await fuHuaQiManageBaseBiz.fuHuaQiInfomation(uscc);
res.success(result);
}
async function fuHuaQiTaskList(req, res) {
let reqConf = {
type:'Number',
year:'Number',
month:'Number',
name:'String',
page:'Number'
};
let {type, year, month, name, page} = eccReqParamater(reqConf, req.body, ["name"]);
let result = await fuHuaQiManageTaskBiz.taskList(type, year, month, name, page);
res.success(result);
}
async function fuHuaQiTaskMonthsList(req, res) {
let result = await fuHuaQiManageTaskBiz.taskMonthsList();
res.success(result);
}
async function homePageTop(req, res) {
let reqConf = {
year:'Number',
month:'Number'
};
let {year, month} = eccReqParamater(reqConf, req.body);
let result = await homePageBiz.stagingHomePageTop(year, month);
res.success(result);
}
async function getEnterpriseLabel(req, res) {
let result = await homePageBiz.enterpriseLabel();
res.success(result);
}
async function getFuHuaQiLabel(req, res) {
let result = await homePageBiz.fuHuaQiLabel();
res.success(result);
}
\ No newline at end of file
/**
* 小程序端 管委会 用户基础功能路由
*/
import * as asyncHandler from 'express-async-handler';
import * as userBiz from '../../biz/mobileGuanWeiHui/user';
import { eccReqParamater } from '../../util/verificationParam';
import { checkGuanWeiHuiMobileToken } from '../../middleware/user';
export function setRouter(httpServer) {
httpServer.post('/guanweihui/login', asyncHandler(login));
httpServer.post('/guanweihui/logout', checkGuanWeiHuiMobileToken, asyncHandler(loginOut));
}
/**
* 管理后台登录
* @param req
* @param res
*/
async function login(req, res) {
let reqConf = {loginId:'String', pwd:'String'};
let {loginId, pwd} = eccReqParamater(reqConf, req.body);
let userInfo = await userBiz.login(loginId, pwd);
res.success(userInfo);
}
/**
* 退出登录
* @param req
* @param res
*/
async function loginOut(req, res) {
const userId = req.headers.userid;
let result = await userBiz.logout(userId);
res.success(result);
}
......@@ -47,6 +47,17 @@ export function setRouter(httpServer) {
httpServer.post('/admin/provide/fuhuaqi/scort/enterpriseoutanin', checkInterior, asyncHandler(enterpriseOutAnInRot) );
httpServer.post('/admin/provide/fuhuaqi/scort/enterpriseoutandinmoverout', checkInterior, asyncHandler(enterpriseOutAndInMoverOutRot) );
/**更新分数 */
httpServer.post('/admin/provide/fuhuaqi/scort/updte2024scort', checkInterior, asyncHandler(updte2024scort) );
httpServer.post('/admin/provide/fuhuaqi/scort/repair2024scort', checkInterior, asyncHandler(repairReset2024Score) );
/**迁出91310115MA1K4TB91Q*/
httpServer.post('/admin/provide/fuhuaqi/output/once/1', checkInterior, asyncHandler(outPutOnceEnterpriseFor91310115MA1K4TB91Q) );
/**第一次企业数据清洗 */
httpServer.post('/admin/provide/enterprise/etl1', checkInterior, asyncHandler(etlfirst) );
}
async function inputEnterprise202304Data(req, res) {
......@@ -185,3 +196,24 @@ async function enterpriseOutAndInMoverOutRot(req, res) {
await provideBiz.enterpriseOutAndInMoverOut();
res.success({isUsccess:true});
}
async function updte2024scort(req, res) {
await provideBiz.updteScortFor2024();
res.success({isUsccess:true});
}
async function repairReset2024Score(req, res) {
await provideBiz.repairResettingScore();
res.success({isUsccess:true});
}
async function outPutOnceEnterpriseFor91310115MA1K4TB91Q(req, res) {
await provideBiz.outPutOnceEnterprise91310115MA1K4TB91Q();
res.success({isUsccess:true});
}
async function etlfirst(req, res) {
await provideBiz.ETL();
res.success({isUsccess:true});
}
\ No newline at end of file
......@@ -3,7 +3,8 @@
*/
import * as asyncHandler from 'express-async-handler';
import { FUHUAQILV, INSTITUTIONALNATURE, FUHUAINDUSTRY, INDUSTRY, FUHUAQILNVESTMENTSTYLE, OPERATIONMODEL, TEAM, DEGREE, FINANCINGROUNDS, INSIDESTATE, VIRTUALCAUSE, MOVEOUTTYPE, MOVEOUTCAUSE, MOVEOUTCAUSECLIENT, MOVEOUTCAUSENOTCLIENT, MOVEOUTTRACE, ENTERPRISETEAM, LISTINGSITUATION, BUSINESSDATATYPE, COOPERATIONMODE, SPECIALITY, TEACHERLV, ZJBEYONDLAYOUTOPERATIONMODE, CYCXFX, CYCSRBJ } from '../config/enum';
import { FUHUAQILV, INSTITUTIONALNATURE, FUHUAINDUSTRY, INDUSTRY, FUHUAQILNVESTMENTSTYLE, OPERATIONMODEL, TEAM, DEGREE, FINANCINGROUNDS, INSIDESTATE, VIRTUALCAUSE, MOVEOUTTYPE, MOVEOUTCAUSECLIENT, MOVEOUTCAUSENOTCLIENT, MOVEOUTTRACE, ENTERPRISETEAM, LISTINGSITUATION, BUSINESSDATATYPE, COOPERATIONMODE, SPECIALITY, TEACHERLV, ZJBEYONDLAYOUTOPERATIONMODE, CYCXFX, CYCSRBJ, FUHUAQICUSTOMTASKTYPE, GUANWEIHUIMANANGENTERPRISELABEL, LABELGOAL, ENTERPRISESYSTEMLABEL, LABELTYPE, FHQSYSTEMLABEL } from '../config/enum';
import { selectLabelList } from '../data/label';
export function setRouter(httpServer) {
httpServer.post('/public/fuhuaqilv', asyncHandler(getFuHuaQiLv));
......@@ -36,7 +37,12 @@ export function setRouter(httpServer) {
/**4.2 */
httpServer.post('/public/cycxfx', asyncHandler(cycxfx) );
httpServer.post('/public/cycsrbj', asyncHandler(cycsrbj) );
/**6.0 */
httpServer.post('/public/fuhuaqicustomtasktype', asyncHandler(fuhuaqiCustomTaskType) );
httpServer.post('/public/enterpriseselectlist', asyncHandler(enterpriseSelectList) );
httpServer.post('/public/admin/enterprilabelselectlist', asyncHandler(enterpriLabelSelectList) );
httpServer.post('/public/fuhuaqiselectlist', asyncHandler(fuHuaQiSelectList) );
}
/**
......@@ -467,3 +473,72 @@ async function getIndustry(req, res) {
res.success({lvList});
}
async function fuhuaqiCustomTaskType(req, res) {
let lvList = [];
for (let key in FUHUAQICUSTOMTASKTYPE) {
let anyKey:any = key;
if (isNaN(anyKey)) {
lvList.push({key, value:FUHUAQICUSTOMTASKTYPE[key]});
}
}
res.success({lvList});
}
/**
* 企业库下拉菜单
* @param req
* @param res
*/
async function enterpriseSelectList(req, res) {
let labelList = await selectLabelList({goal:LABELGOAL.企业, state:false});
let dataList = [];
dataList.push({key:"新注册企业", value:GUANWEIHUIMANANGENTERPRISELABEL.新注册企业});
dataList.push({key:"新迁入企业", value:GUANWEIHUIMANANGENTERPRISELABEL.新迁入企业});
labelList.forEach(info => {
dataList.push({key:info.labelName, value:info.id});
});
res.success({dataList});
}
/**
* 管理后台企业列表下拉框
* @param req
* @param res
*/
async function enterpriLabelSelectList(req, res) {
let labelList = await selectLabelList({goal:LABELGOAL.企业, state:false});
let dataList = [];
labelList.forEach(info => {
dataList.push({key:info.labelName, value:info.id});
});
res.success({dataList});
}
/**
* 孵化器下拉菜单
* @param req
* @param res
*/
async function fuHuaQiSelectList(req, res) {
let labelList = await selectLabelList({goal:LABELGOAL.孵化器, state:false, labelType:LABELTYPE.自定义标签});
let dataList = [];
dataList.push({key:"专业技术平台", value:FHQSYSTEMLABEL.专业技术平台});
labelList.forEach(info => {
dataList.push({key:info.labelName, value:info.id});
});
res.success({dataList});
}
......@@ -37,6 +37,9 @@ import * as testABIRouters from "./mobileClient/testAbi";
import * as pointRouters from "./point";
import * as gptRouters from "./gpt/ai";
import * as adminLabelsRouters from './admin/labels';
import * as guanWeiHuiMobileClientRouters from './guanWeiHuiMobileClient/manange';
import * as guanWeiHuiMobileClientUserRouters from './guanWeiHuiMobileClient/user';
export function setRouter(httpServer){
/**下拉框等公用 路由 */
......@@ -79,4 +82,11 @@ export function setRouter(httpServer){
/**gpt */
gptRouters.setRouter(httpServer);
/**标签系统 */
adminLabelsRouters.setRouter(httpServer);
/**管委会 */
guanWeiHuiMobileClientRouters.setRouter(httpServer);
guanWeiHuiMobileClientUserRouters.setRouter(httpServer);
}
\ No newline at end of file
var baiduMap = require('baidumap');
var bdmap = baiduMap.create({'ak':'QCxLry4y9BjIDRDIsGAerkcHrnrbo55I'});
import { areaList } from "../config/area";
export function changeAddresCode(address, city) {
return new Promise((resolve, reject) => {
var geocoderOption = {address, city};
bdmap.geocoder(geocoderOption, function(err, reuslt){
if (err) {
resolve({error:true});
} else {
try {
let resObj = JSON.parse(reuslt);
resolve(resObj.result.location)
}catch(err) {
resolve({error:true});
}
}
});
});
}
//使用射线法
export function isPointInPolygon(point) {
let isInside = false;
for (let k = 0; k < areaList.length; k++) {
let polygon:any = areaList[k];//单个区域
if(polygon[0].lat != polygon[polygon.length-1].lat || polygon[0].lng != polygon[polygon.length-1].lng) {
polygon.push(polygon[0]);
}
isInside = itemIsPointInPolygon(point, polygon);
if (isInside) break;
}
return isInside;
}
function itemIsPointInPolygon(point,pts){
var N = pts.length; //pts [{lat:xxx,lng:xxx},{lat:xxx,lng:xxx}]
var boundOrVertex = true; //如果点位于多边形的顶点或边上,也算做点在多边形内,直接返回true
var intersectCount = 0;//cross points count of x
var precision = 2e-10; //浮点类型计算时候与0比较时候的容差
var p1, p2;//neighbour bound vertices
var p = point; //point {lat:xxx,lng:xxx}
p1 = pts[0];//left vertex
for(var i = 1; i <= N; ++i){//check all rays
if((p.lat==p1.lat)&&(p.lng==p1.lng)){
return boundOrVertex;//p is an vertex
}
p2 = pts[i % N];//right vertex
if(p.lat < Math.min(p1.lat, p2.lat) || p.lat > Math.max(p1.lat, p2.lat)){//ray is outside of our interests
p1 = p2;
continue;//next ray left point
}
if(p.lat > Math.min(p1.lat, p2.lat) && p.lat < Math.max(p1.lat, p2.lat)){//ray is crossing over by the algorithm (common part of)
if(p.lng <= Math.max(p1.lng, p2.lng)){//x is before of ray
if(p1.lat == p2.lat && p.lng >= Math.min(p1.lng, p2.lng)){//overlies on a horizontal ray
return boundOrVertex;
}
if(p1.lng == p2.lng){//ray is vertical
if(p1.lng == p.lng){//overlies on a vertical ray
return boundOrVertex;
}else{//before ray
++intersectCount;
}
}else{//cross point on the left side
var xinters = (p.lat - p1.lat) * (p2.lng - p1.lng) / (p2.lat - p1.lat) + p1.lng;//cross point of lng
if(Math.abs(p.lng - xinters) < precision){//overlies on a ray
return boundOrVertex;
}
if(p.lng < xinters){//before ray
++intersectCount;
}
}
}
}else{//special case when ray is crossing through the vertex
if(p.lat == p2.lat && p.lng <= p2.lng){//p crossing over p2
var p3 = pts[(i+1) % N]; //next vertex
if(p.lat >= Math.min(p1.lat, p3.lat) && p.lat <= Math.max(p1.lat, p3.lat)){//p.lat lies between p1.lat & p3.lat
++intersectCount;
}else{
intersectCount += 2;
}
}
}
p1 = p2;//next ray left point
}
if(intersectCount % 2 == 0){//偶数在多边形外
return false;
} else { //奇数在多边形内
return true;
}
};
\ No newline at end of file
......@@ -76,6 +76,7 @@ function getExcel(filePath) {
* 初始化原始数据
*/
export async function initBasicData() {
return;
await initFuHuaQiData();
await initEnterprise();
await initMonth();
......
......@@ -180,8 +180,14 @@ export function getRandomId(uscc:string) {
export function changeAddToString(address) {
let str = "";
address.forEach(item => {
address.forEach((item, index) => {
if (index == 0 && item == "上海市") return;
str += item;
});
return str;
}
export function getLabelId() {
return `${md5(`label${new Date().valueOf()}${Math.ceil(Math.ceil(Math.random() * 10000))}${Math.ceil(Math.ceil(Math.random() * 10000))}`)}`
}
\ No newline at end of file
......@@ -84,4 +84,32 @@ export function changeEnumValue(enumConf, value:any) {
});
return str;
}
export function changeEnumManyValue(enumConf, value:any) {
let list = [];
value.forEach((item, index) => {
let subStr = enumConf[item];
/** 特化处理 中文引号在枚举中不适用*/
if (subStr == "_投资__孵化_类型") {
subStr = subStr.replace("__","+");
subStr = subStr.replace("_","“");
subStr = subStr.replace("_","”");
}
if (subStr == "经营成本过高_场地成本或人员成本_" || subStr == "办公空间拓展_无合适办公空间_") {
subStr = subStr.replace("_","(");
subStr = subStr.replace("_",")");
}
if (subStr == "迁出孵化器_仍在张江" || subStr == "迁出张江_仍在浦东" || subStr == "迁出浦东_仍在上海") {
subStr = subStr.replace("_",",");
}
if (subStr == "科技金融_风险投资_" || subStr == "科技金融_其他_" || subStr == "技术专家_法律专家_") {
subStr = subStr.replace("_","(");
subStr = subStr.replace("_",")");
}
list.push(subStr);
});
return list;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment