Commit 60fe1458 by lixinming

no message

parents
.idea
/out
/node_modules
/test
/public
/logs
/video
*.logs
*.zip
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "启动程序",
"program": "${workspaceFolder}/src/main.ts",
"outFiles": [
"${workspaceFolder}/**/*.js"
]
}
]
}
\ No newline at end of file
{
"name": "screen",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@alicloud/dybaseapi": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/@alicloud/dybaseapi/download/@alicloud/dybaseapi-1.0.0.tgz",
"integrity": "sha1-VS7dCZD5Db1p1AI3zf7/w2bQofU=",
"requires": {
"@alicloud/pop-core": "^1.3.3"
}
},
"@alicloud/dysmsapi-2017-05-25": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/@alicloud/dysmsapi-2017-05-25/download/@alicloud/dysmsapi-2017-05-25-1.0.1.tgz",
"integrity": "sha1-qKtpTb4QXrnWfL0eNzV/ag+Eh9U=",
"requires": {
"@alicloud/pop-core": "^1.5.1"
}
},
"@alicloud/mns": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/@alicloud/mns/download/@alicloud/mns-1.0.0.tgz",
"integrity": "sha1-AzqBmJmNXtk9onw72f8LnusJDpY=",
"requires": {
"debug": "^2.6.3",
"httpx": "^2.1.1",
"kitx": "^1.2.0",
"xml2js": "^0.4.17"
}
},
"@alicloud/pop-core": {
"version": "1.7.10",
"resolved": "https://registry.npm.taobao.org/@alicloud/pop-core/download/@alicloud/pop-core-1.7.10.tgz?cache=0&sync_timestamp=1603357203292&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40alicloud%2Fpop-core%2Fdownload%2F%40alicloud%2Fpop-core-1.7.10.tgz",
"integrity": "sha1-0OIhA227DM3kU90Jsc+r2DQbemk=",
"requires": {
"debug": "^3.1.0",
"httpx": "^2.1.2",
"json-bigint": "^1.0.0",
"kitx": "^1.2.1",
"xml2js": "^0.4.17"
},
"dependencies": {
"debug": {
"version": "3.2.7",
"resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz",
"integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz",
"integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI="
}
}
},
"@alicloud/sms-sdk": {
"version": "1.1.6",
"resolved": "https://registry.npm.taobao.org/@alicloud/sms-sdk/download/@alicloud/sms-sdk-1.1.6.tgz",
"integrity": "sha1-dwHq4eCDLINo1nebQtWDaPlEy/A=",
"requires": {
"@alicloud/dybaseapi": "^1.0.0",
"@alicloud/dysmsapi-2017-05-25": "^1.0.1",
"@alicloud/mns": "^1.0.0-beta6",
"babel-runtime": "^6.26.0"
}
},
"@babel/runtime": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
"integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
"requires": {
"regenerator-runtime": "^0.13.4"
},
"dependencies": {
"regenerator-runtime": {
"version": "0.13.7",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
"integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
}
}
},
"@types/bson": {
"version": "4.0.3",
"resolved": "https://registry.npm.taobao.org/@types/bson/download/@types/bson-4.0.3.tgz?cache=0&sync_timestamp=1613378303280&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fbson%2Fdownload%2F%40types%2Fbson-4.0.3.tgz",
"integrity": "sha1-MIidL/3mJiq744ZZNkxjFFSZn78=",
"requires": {
"@types/node": "*"
}
},
"@types/mongodb": {
"version": "3.6.10",
"resolved": "https://registry.npm.taobao.org/@types/mongodb/download/@types/mongodb-3.6.10.tgz?cache=0&sync_timestamp=1615809585833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fmongodb%2Fdownload%2F%40types%2Fmongodb-3.6.10.tgz",
"integrity": "sha1-gMzqq+7J9GDltGhE6Tjo66dPkmY=",
"requires": {
"@types/bson": "*",
"@types/node": "*"
}
},
"@types/node": {
"version": "10.17.55",
"resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-10.17.55.tgz?cache=0&sync_timestamp=1615834822695&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-10.17.55.tgz",
"integrity": "sha1-oUfygu3sZ5uJTUaU7bWr61lf7L0="
},
"accepts": {
"version": "1.3.7",
"resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
"integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
"requires": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
}
},
"adler-32": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz",
"integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=",
"requires": {
"exit-on-epipe": "~1.0.1",
"printj": "~1.1.0"
}
},
"agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"requires": {
"debug": "4"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
"integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"archiver": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/archiver/-/archiver-5.2.0.tgz",
"integrity": "sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ==",
"requires": {
"archiver-utils": "^2.1.0",
"async": "^3.2.0",
"buffer-crc32": "^0.2.1",
"readable-stream": "^3.6.0",
"readdir-glob": "^1.0.0",
"tar-stream": "^2.1.4",
"zip-stream": "^4.0.4"
},
"dependencies": {
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"archiver-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
"integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
"requires": {
"glob": "^7.1.4",
"graceful-fs": "^4.2.0",
"lazystream": "^1.0.0",
"lodash.defaults": "^4.2.0",
"lodash.difference": "^4.5.0",
"lodash.flatten": "^4.4.0",
"lodash.isplainobject": "^4.0.6",
"lodash.union": "^4.6.0",
"normalize-path": "^3.0.0",
"readable-stream": "^2.0.0"
}
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz",
"integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
"requires": {
"safer-buffer": "~2.1.0"
}
},
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"async": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
},
"async-limiter": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz",
"integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
"version": "1.11.0",
"resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101311814&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz",
"integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk="
},
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"requires": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
}
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"requires": {
"tweetnacl": "^0.14.3"
}
},
"bignumber.js": {
"version": "9.0.1",
"resolved": "https://registry.npm.taobao.org/bignumber.js/download/bignumber.js-9.0.1.tgz",
"integrity": "sha1-jXuhJMiCv9jkMmDGdHVRjQaJ5OU="
},
"bl": {
"version": "2.2.1",
"resolved": "https://registry.npm.taobao.org/bl/download/bl-2.2.1.tgz?cache=0&sync_timestamp=1612867177492&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbl%2Fdownload%2Fbl-2.2.1.tgz",
"integrity": "sha1-jBGntzBlXF1WiYzchxIk9A/ZAdU=",
"requires": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
}
},
"bluebird": {
"version": "3.5.1",
"resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz",
"integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk="
},
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"requires": {
"bytes": "3.1.0",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
"qs": "6.7.0",
"raw-body": "2.4.0",
"type-is": "~1.6.17"
},
"dependencies": {
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
}
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"bson": {
"version": "1.1.6",
"resolved": "https://registry.npm.taobao.org/bson/download/bson-1.1.6.tgz",
"integrity": "sha1-+4Gb6aYM1nfghTruTKcSp4XWYYo="
},
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz",
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"cfb": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz",
"integrity": "sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ==",
"requires": {
"adler-32": "~1.2.0",
"crc-32": "~1.2.0",
"printj": "~1.1.2"
}
},
"charenc": {
"version": "0.0.2",
"resolved": "https://registry.npm.taobao.org/charenc/download/charenc-0.0.2.tgz",
"integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc="
},
"codepage": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz",
"integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=",
"requires": {
"commander": "~2.14.1",
"exit-on-epipe": "~1.0.1"
},
"dependencies": {
"commander": {
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
"integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
}
}
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz",
"integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"commander": {
"version": "2.17.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
},
"compress-commons": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz",
"integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==",
"requires": {
"buffer-crc32": "^0.2.13",
"crc32-stream": "^4.0.2",
"normalize-path": "^3.0.0",
"readable-stream": "^3.6.0"
},
"dependencies": {
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"compressible": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
"integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
"requires": {
"mime-db": ">= 1.43.0 < 2"
}
},
"compression": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
"integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
"requires": {
"accepts": "~1.3.5",
"bytes": "3.0.0",
"compressible": "~2.0.16",
"debug": "2.6.9",
"on-headers": "~1.0.2",
"safe-buffer": "5.1.2",
"vary": "~1.1.2"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"content-disposition": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
"requires": {
"safe-buffer": "5.1.2"
}
},
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
"cookie": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"core-js": {
"version": "2.6.12",
"resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.12.tgz?cache=0&sync_timestamp=1614537347747&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.12.tgz",
"integrity": "sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw="
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"crc-32": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
"integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
"requires": {
"exit-on-epipe": "~1.0.1",
"printj": "~1.1.0"
}
},
"crc32-stream": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz",
"integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==",
"requires": {
"crc-32": "^1.2.0",
"readable-stream": "^3.4.0"
},
"dependencies": {
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"crypt": {
"version": "0.0.2",
"resolved": "https://registry.npm.taobao.org/crypt/download/crypt-0.0.2.tgz",
"integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
},
"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",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": {
"assert-plus": "^1.0.0"
}
},
"date-format": {
"version": "4.0.13",
"resolved": "http://localhost:4873/date-format/-/date-format-4.0.13.tgz",
"integrity": "sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ=="
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"requires": {
"ms": "2.0.0"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"denque": {
"version": "1.5.0",
"resolved": "https://registry.npm.taobao.org/denque/download/denque-1.5.0.tgz?cache=0&sync_timestamp=1609779969821&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdenque%2Fdownload%2Fdenque-1.5.0.tgz",
"integrity": "sha1-dz3gaG/y2Owv+SkUMWpHtzscc94="
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"requires": {
"once": "^1.4.0"
}
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"exit-on-epipe": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
"integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
},
"express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
"requires": {
"accepts": "~1.3.7",
"array-flatten": "1.1.1",
"body-parser": "1.19.0",
"content-disposition": "0.5.3",
"content-type": "~1.0.4",
"cookie": "0.4.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~1.1.2",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "~1.1.2",
"fresh": "0.5.2",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.5",
"qs": "6.7.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.1.2",
"send": "0.17.1",
"serve-static": "1.14.1",
"setprototypeof": "1.1.1",
"statuses": "~1.5.0",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
},
"dependencies": {
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
}
}
},
"express-async-handler": {
"version": "1.1.4",
"resolved": "https://registry.npm.taobao.org/express-async-handler/download/express-async-handler-1.1.4.tgz",
"integrity": "sha1-IlqEkI32OzWunflLbw8a8GEmZCY="
},
"express-history-api-fallback": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/express-history-api-fallback/-/express-history-api-fallback-2.2.1.tgz",
"integrity": "sha1-OirSf3vryQ/FM9EQ18bYMJe80Fc="
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz",
"integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo="
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
"integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU="
},
"fast-image-size": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/fast-image-size/-/fast-image-size-0.1.3.tgz",
"integrity": "sha512-aYg0XgNJT1F3z90HP04JedMhyBPkpQTM1va/JnjQsVqemBvsO7sRYMLAgp0A0opVFTyyoTbesV8HLYBJegRkKg=="
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM="
},
"fflate": {
"version": "0.3.11",
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz",
"integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A=="
},
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"statuses": "~1.5.0",
"unpipe": "~1.0.0"
}
},
"flatted": {
"version": "3.2.6",
"resolved": "http://localhost:4873/flatted/-/flatted-3.2.6.tgz",
"integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ=="
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz",
"integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"formidable": {
"version": "1.2.2",
"resolved": "https://registry.npm.taobao.org/formidable/download/formidable-1.2.2.tgz",
"integrity": "sha1-v2muopcpgmdfAIZTQrmCmG9rjdk="
},
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
},
"frac": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
"integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
"fs-extra": {
"version": "8.1.0",
"resolved": "http://localhost:4873/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"get-intrinsic": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
"integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.3"
}
},
"get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": {
"assert-plus": "^1.0.0"
}
},
"glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"graceful-fs": {
"version": "4.2.10",
"resolved": "http://localhost:4873/graceful-fs/-/graceful-fs-4.2.10.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz",
"integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=",
"requires": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
"setprototypeof": "1.1.1",
"statuses": ">= 1.5.0 < 2",
"toidentifier": "1.0.0"
}
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1600868613104&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"requires": {
"agent-base": "6",
"debug": "4"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"httpx": {
"version": "2.2.7",
"resolved": "https://registry.npm.taobao.org/httpx/download/httpx-2.2.7.tgz",
"integrity": "sha1-HjQZgUbjLKMwWmbBEglVnhy+ugk=",
"requires": {
"@types/node": "^14",
"debug": "^4.1.1"
},
"dependencies": {
"@types/node": {
"version": "14.14.35",
"resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.14.35.tgz?cache=0&sync_timestamp=1615834822695&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.14.35.tgz",
"integrity": "sha1-QslTpOKxirkx9yR35wEhcvT/oxM="
},
"debug": {
"version": "4.3.1",
"resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
"integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
"integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
}
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604429388528&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
"integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
},
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
"json-bigint": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/json-bigint/download/json-bigint-1.0.0.tgz",
"integrity": "sha1-rlR4I6wMrYOYZn+M2e9HMPWwH/E=",
"requires": {
"bignumber.js": "^9.0.0"
}
},
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz?cache=0&sync_timestamp=1609553708276&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1608000211395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
"integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsonfile": {
"version": "4.0.0",
"resolved": "http://localhost:4873/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"requires": {
"graceful-fs": "^4.1.6"
}
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"jszip": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"requires": {
"lie": "~3.3.0",
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
"setimmediate": "^1.0.5"
}
},
"kareem": {
"version": "2.3.2",
"resolved": "https://registry.npm.taobao.org/kareem/download/kareem-2.3.2.tgz",
"integrity": "sha1-eMRQiJSYW404oNwV4ajhEHjyypM="
},
"kitx": {
"version": "1.3.0",
"resolved": "https://registry.npm.taobao.org/kitx/download/kitx-1.3.0.tgz",
"integrity": "sha1-qz7nxZjSsdYp/VVWj4aMREDCAOo="
},
"lazystream": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
"integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
"requires": {
"readable-stream": "^2.0.5"
}
},
"lie": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"requires": {
"immediate": "~3.0.5"
}
},
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"lodash.defaults": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
"integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="
},
"lodash.difference": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
"integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA=="
},
"lodash.flatten": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
"integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g=="
},
"lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
},
"lodash.union": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
"integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw=="
},
"log4js": {
"version": "6.6.1",
"resolved": "http://localhost:4873/log4js/-/log4js-6.6.1.tgz",
"integrity": "sha512-J8VYFH2UQq/xucdNu71io4Fo+purYYudyErgBbswWKO0MC6QVOERRomt5su/z6d3RJSmLyTGmXl3Q/XjKCf+/A==",
"requires": {
"date-format": "^4.0.13",
"debug": "^4.3.4",
"flatted": "^3.2.6",
"rfdc": "^1.3.0",
"streamroller": "^3.1.2"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "http://localhost:4873/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "http://localhost:4873/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"lru-cache": {
"version": "4.1.5",
"resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz",
"integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
}
},
"md5": {
"version": "2.3.0",
"resolved": "https://registry.npm.taobao.org/md5/download/md5-2.3.0.tgz?cache=0&sync_timestamp=1596362680344&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmd5%2Fdownload%2Fmd5-2.3.0.tgz",
"integrity": "sha1-w9qaaq46MLRreww0m4exENw72k8=",
"requires": {
"charenc": "0.0.2",
"crypt": "0.0.2",
"is-buffer": "~1.1.6"
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"memory-pager": {
"version": "1.5.0",
"resolved": "https://registry.npm.taobao.org/memory-pager/download/memory-pager-1.5.0.tgz",
"integrity": "sha1-2HUWVdItOEaCdByXLyw9bfo+ZrU=",
"optional": true
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.46.0",
"resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.46.0.tgz?cache=0&sync_timestamp=1613194744108&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.46.0.tgz",
"integrity": "sha1-Ymd0in95lZTePLyM3pHe80lmHO4="
},
"mime-types": {
"version": "2.1.29",
"resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.29.tgz?cache=0&sync_timestamp=1613608491741&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.29.tgz",
"integrity": "sha1-HUq3faZLkfX3JInfKSNlY3VLsbI=",
"requires": {
"mime-db": "1.46.0"
}
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npm.taobao.org/moment/download/moment-2.29.1.tgz?cache=0&sync_timestamp=1601983320283&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.29.1.tgz",
"integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M="
},
"mongodb": {
"version": "3.6.5",
"resolved": "https://registry.npm.taobao.org/mongodb/download/mongodb-3.6.5.tgz",
"integrity": "sha1-wn14b9TTyD3BkwJINwfRKp0q7l8=",
"requires": {
"bl": "^2.2.1",
"bson": "^1.1.4",
"denque": "^1.4.1",
"require_optional": "^1.0.1",
"safe-buffer": "^5.1.2",
"saslprep": "^1.0.0"
}
},
"mongoose": {
"version": "5.12.1",
"resolved": "https://registry.npm.taobao.org/mongoose/download/mongoose-5.12.1.tgz?cache=0&sync_timestamp=1616103030377&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmongoose%2Fdownload%2Fmongoose-5.12.1.tgz",
"integrity": "sha1-mqzorHg7I5kGJTOWqY8qVsCWS4s=",
"requires": {
"@types/mongodb": "^3.5.27",
"bson": "^1.1.4",
"kareem": "2.3.2",
"mongodb": "3.6.5",
"mongoose-legacy-pluralize": "1.0.2",
"mpath": "0.8.3",
"mquery": "3.2.4",
"ms": "2.1.2",
"regexp-clone": "1.0.0",
"safe-buffer": "5.2.1",
"sift": "7.0.1",
"sliced": "1.0.1"
},
"dependencies": {
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
"integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk="
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz",
"integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY="
}
}
},
"mongoose-legacy-pluralize": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/mongoose-legacy-pluralize/download/mongoose-legacy-pluralize-1.0.2.tgz",
"integrity": "sha1-O6n5H6UHtRhtOZ+0CFS/8Y+1Y+Q="
},
"mpath": {
"version": "0.8.3",
"resolved": "https://registry.npm.taobao.org/mpath/download/mpath-0.8.3.tgz",
"integrity": "sha1-gorA0Yf39CZ0g510khlwl5q73Y8="
},
"mquery": {
"version": "3.2.4",
"resolved": "https://registry.npm.taobao.org/mquery/download/mquery-3.2.4.tgz?cache=0&sync_timestamp=1613149714087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmquery%2Fdownload%2Fmquery-3.2.4.tgz",
"integrity": "sha1-nFwuKF6mxvIGc/NSiXPJnuGqoaA=",
"requires": {
"bluebird": "3.5.1",
"debug": "3.1.0",
"regexp-clone": "^1.0.0",
"safe-buffer": "5.1.2",
"sliced": "1.0.1"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz",
"integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
"requires": {
"ms": "2.0.0"
}
}
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"mysql": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
"integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
"requires": {
"bignumber.js": "9.0.0",
"readable-stream": "2.3.7",
"safe-buffer": "5.1.2",
"sqlstring": "2.3.1"
},
"dependencies": {
"bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
"integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
}
}
},
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
"integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
},
"node-fetch": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz",
"integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==",
"requires": {
"whatwg-url": "^5.0.0"
}
},
"node-xlsx": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.16.1.tgz",
"integrity": "sha512-mwEZKItGXKO+jp5Pz9+wDCXxqhJITGd6m81A8WmalBpGAzREiR5cIJ0xrSF0BxzU6Mh2mC0fA2X0/3GqNU6dIw==",
"requires": {
"@babel/runtime": "^7.12.5",
"buffer-from": "^1.1.1",
"xlsx": "^0.16.9"
}
},
"nodemailer": {
"version": "6.5.0",
"resolved": "https://registry.npm.taobao.org/nodemailer/download/nodemailer-6.5.0.tgz?cache=0&sync_timestamp=1614329161993&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnodemailer%2Fdownload%2Fnodemailer-6.5.0.tgz",
"integrity": "sha1-0Swo2NSHeJGOJfGZnZeRAjGxddk="
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz",
"integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU="
},
"object-inspect": {
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
},
"officegen": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/officegen/-/officegen-0.6.5.tgz",
"integrity": "sha512-CpSqy7UiGeu1OvMGbj2nXIVRsi5Tcnr09Ce4RDxkZMU5pgDRV8ipROAe8iuhNZaLFPBM/dxdcR4Ty/BglhfrDA==",
"requires": {
"archiver": "~5.2.0",
"async": "^3.2.0",
"fast-image-size": "^0.1.3",
"jszip": "^3.6.0",
"lodash": "^4.17.21",
"readable-stream": "~3.6.0",
"setimmediate": "~1.0.5",
"xmlbuilder": "^15.1.1"
},
"dependencies": {
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
},
"xmlbuilder": {
"version": "15.1.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
"integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="
}
}
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"requires": {
"ee-first": "1.1.1"
}
},
"on-headers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"requires": {
"wrappy": "1"
}
},
"opentype.js": {
"version": "0.7.3",
"resolved": "https://registry.npm.taobao.org/opentype.js/download/opentype.js-0.7.3.tgz",
"integrity": "sha1-QPuM4Yv9YOdESO/f5EKDQJg5eqs=",
"requires": {
"tiny-inflate": "^1.0.2"
}
},
"pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"printj": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
"integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz",
"integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I="
},
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"requires": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
}
},
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
},
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz",
"integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ="
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
"integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
},
"pyfl": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/pyfl/-/pyfl-1.1.4.tgz",
"integrity": "sha512-tEwj+SYfOk7zMStPrcDvadkUYomRIX6URQA/dl+YDqaEZlP9gEXM501FUsorz5HozCkfIeFOoT7U2jTElQ+zYg=="
},
"qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"requires": {
"side-channel": "^1.0.4"
}
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"requires": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"dependencies": {
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
}
}
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz",
"integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"readdir-glob": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
"integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
"requires": {
"minimatch": "^5.1.0"
},
"dependencies": {
"brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"requires": {
"balanced-match": "^1.0.0"
}
},
"minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"requires": {
"brace-expansion": "^2.0.1"
}
}
}
},
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz",
"integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
},
"regexp-clone": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/regexp-clone/download/regexp-clone-1.0.0.tgz",
"integrity": "sha1-Ii25Z2IydwViYLmSYmNUoEzpv2M="
},
"request": {
"version": "2.88.2",
"resolved": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz",
"integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=",
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
"har-validator": "~5.1.3",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.5.0",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
"dependencies": {
"qs": {
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
"integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
}
}
},
"require_optional": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/require_optional/download/require_optional-1.0.1.tgz",
"integrity": "sha1-TPNaQkf2TKPfjC7yCMxJSxyo/C4=",
"requires": {
"resolve-from": "^2.0.0",
"semver": "^5.1.0"
}
},
"resolve-from": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-2.0.0.tgz",
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
},
"rfdc": {
"version": "1.3.0",
"resolved": "http://localhost:4873/rfdc/-/rfdc-1.3.0.tgz",
"integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
"integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
"integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
},
"saslprep": {
"version": "1.0.3",
"resolved": "https://registry.npm.taobao.org/saslprep/download/saslprep-1.0.3.tgz",
"integrity": "sha1-TAL5RrVs9UKX40e6EJPnrKxM8iY=",
"optional": true,
"requires": {
"sparse-bitfield": "^3.0.3"
}
},
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
"integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc="
},
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
"requires": {
"debug": "2.6.9",
"depd": "~1.1.2",
"destroy": "~1.0.4",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "~1.7.2",
"mime": "1.6.0",
"ms": "2.1.1",
"on-finished": "~2.3.0",
"range-parser": "~1.2.1",
"statuses": "~1.5.0"
},
"dependencies": {
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
}
}
},
"serve-static": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
"integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.17.1"
}
},
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
},
"setprototypeof": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"requires": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
}
},
"sift": {
"version": "7.0.1",
"resolved": "https://registry.npm.taobao.org/sift/download/sift-7.0.1.tgz",
"integrity": "sha1-R9YsULFZ0xbxNy+LU/nBDNIaSwg="
},
"sliced": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/sliced/download/sliced-1.0.1.tgz",
"integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
},
"sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npm.taobao.org/sparse-bitfield/download/sparse-bitfield-3.0.3.tgz",
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
"optional": true,
"requires": {
"memory-pager": "^1.0.2"
}
},
"sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
"integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
},
"ssf": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
"integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
"requires": {
"frac": "~1.1.2"
}
},
"sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz",
"integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=",
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
}
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"streamroller": {
"version": "3.1.2",
"resolved": "http://localhost:4873/streamroller/-/streamroller-3.1.2.tgz",
"integrity": "sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A==",
"requires": {
"date-format": "^4.0.13",
"debug": "^4.3.4",
"fs-extra": "^8.1.0"
},
"dependencies": {
"debug": {
"version": "4.3.4",
"resolved": "http://localhost:4873/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "http://localhost:4873/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
"integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"svg-captcha": {
"version": "1.4.0",
"resolved": "https://registry.npm.taobao.org/svg-captcha/download/svg-captcha-1.4.0.tgz",
"integrity": "sha1-MurTxkY5NsIYuzvJ7QT+pO7/5JI=",
"requires": {
"opentype.js": "^0.7.3"
}
},
"tar-stream": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
"requires": {
"bl": "^4.0.3",
"end-of-stream": "^1.4.1",
"fs-constants": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1"
},
"dependencies": {
"bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"requires": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
},
"dependencies": {
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
}
}
},
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"tencentcloud-sdk-nodejs": {
"version": "4.0.562",
"resolved": "https://registry.npmjs.org/tencentcloud-sdk-nodejs/-/tencentcloud-sdk-nodejs-4.0.562.tgz",
"integrity": "sha512-v519qlSr39bWeQiulCYZx6Doz3rs2R5gyKenj3LEDdo/SIlfZHdPEOEwqxcc5Fu9WSL4BRX74H2w8o/BN+1xyg==",
"requires": {
"form-data": "^3.0.0",
"get-stream": "^6.0.0",
"https-proxy-agent": "^5.0.0",
"is-stream": "^2.0.0",
"node-fetch": "^2.2.0",
"tslib": "1.13.0"
},
"dependencies": {
"form-data": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
"integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
}
}
},
"tiny-inflate": {
"version": "1.0.3",
"resolved": "https://registry.npm.taobao.org/tiny-inflate/download/tiny-inflate-1.0.3.tgz",
"integrity": "sha1-EicVSUkToYBRZqr3yTRnkz7qJsQ="
},
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz",
"integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=",
"requires": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
}
},
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
},
"tslib": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
"integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
}
},
"universalify": {
"version": "0.1.2",
"resolved": "http://localhost:4873/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237586670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz",
"integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=",
"requires": {
"punycode": "^2.1.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1607460052228&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz",
"integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"wmf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
"integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
},
"word": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
"integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"ws": {
"version": "5.2.2",
"resolved": "https://registry.npm.taobao.org/ws/download/ws-5.2.2.tgz?cache=0&sync_timestamp=1615063662500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-5.2.2.tgz",
"integrity": "sha1-3/7xSGa46NyRM1glFNG++vlumA8=",
"requires": {
"async-limiter": "~1.0.0"
}
},
"xlsx": {
"version": "0.16.9",
"resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.16.9.tgz",
"integrity": "sha512-gxi1I3EasYvgCX1vN9pGyq920Ron4NO8PNfhuoA3Hpq6Y8f0ECXiy4OLrK4QZBnj1jx3QD+8Fq5YZ/3mPZ5iXw==",
"requires": {
"adler-32": "~1.2.0",
"cfb": "^1.1.4",
"codepage": "~1.14.0",
"commander": "~2.17.1",
"crc-32": "~1.2.0",
"exit-on-epipe": "~1.0.1",
"fflate": "^0.3.8",
"ssf": "~0.11.2",
"wmf": "~1.0.1",
"word": "~0.3.0"
}
},
"xml2js": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
"integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
}
},
"xmlbuilder": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
},
"zip-stream": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz",
"integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==",
"requires": {
"archiver-utils": "^3.0.4",
"compress-commons": "^4.1.2",
"readable-stream": "^3.6.0"
},
"dependencies": {
"archiver-utils": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz",
"integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==",
"requires": {
"glob": "^7.2.3",
"graceful-fs": "^4.2.0",
"lazystream": "^1.0.0",
"lodash.defaults": "^4.2.0",
"lodash.difference": "^4.5.0",
"lodash.flatten": "^4.4.0",
"lodash.isplainobject": "^4.0.6",
"lodash.union": "^4.6.0",
"normalize-path": "^3.0.0",
"readable-stream": "^3.6.0"
}
},
"readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
}
}
}
{
"name": "screen",
"version": "1.0.0",
"description": "",
"main": "main.ts",
"dependencies": {
"@alicloud/sms-sdk": "^1.1.6",
"@types/node": "^10.12.18",
"compression": "^1.7.4",
"express": "^4.17.1",
"express-async-handler": "^1.1.4",
"express-history-api-fallback": "^2.2.1",
"formidable": "^1.2.1",
"log4js": "^6.6.1",
"lru-cache": "^4.1.5",
"md5": "^2.2.1",
"moment": "^2.24.0",
"mongoose": "^5.4.0",
"mysql": "^2.18.1",
"node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1",
"pyfl": "^1.1.4",
"officegen": "^0.6.5",
"qs": "^6.11.0",
"request": "^2.88.0",
"svg-captcha": "^1.3.12",
"tencentcloud-sdk-nodejs": "^4.0.562",
"ws": "^5.2.2",
"xml2js": "^0.4.23"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "cjj",
"license": "ISC",
"bin": "./out/main.js",
"pkg": {
"scripts": "out/**/*.js",
"assets": [
"public/**/*",
"res/**/*",
"images/**/*",
"video/**/*"
],
"outputPath": "dist"
}
}
<config>
<port>13280</port>
<mongodb>
<path>127.0.0.1</path>
<port>27017</port>
<w>1</w>
<!-- <dataBase>baseDB</dataBase> -->
<dataBase>zjzdata</dataBase>
<wtimeoutMS>30000</wtimeoutMS>
</mongodb>
<qcc>
<key>2b14555ce89346e8b96684e2e2a1c7c2</key>
<SecretKey>452AAE887A1CDCAB8C9D730BA8B8FBF0</SecretKey>
</qcc>
<!-- 小程序的secret 和 appid -->
<secret></secret>
<appId></appId>
<!-- 获取小程序的openId地址 -->
<getOpenIdUrl></getOpenIdUrl>
<!-- 短信相关配置 -->
<sms>
<sdkAppId></sdkAppId>
<appKey></appKey>
<smsSign></smsSign>
<!-- 修改密码的模板id -->
<changePwd></changePwd>
<!-- 填报提示 -->
<pointOut></pointOut>
<!-- 初始化账号提示 -->
<initPointOut></initPointOut>
</sms>
<!-- <baidumap>KI1jEpifrEQtgr7ZJ2zAOKlUw1tme7Eb</baidumap> -->
<!-- <baidumap>QCxLry4y9BjIDRDIsGAerkcHrnrbo55I</baidumap> 夏-->
<baidumap></baidumap>
</config>
File added
/**
* 企业活动
*/
import moment = require("moment");
import { ACTIVITYTYPECLIENT } from "../config/enum";
import { eccEnumValue } from "../util/verificationEnum";
import { findActivityCount, findActivityList, findOnceActivity } from "../data/policy/activity";
import { BizError } from "../util/bizError";
import { ERRORENUM } from "../config/errorEnum";
/**
* 活动列表
* @param type
* @param state
* @returns
*/
export async function activityList(type:number, state:number) {
const FunName = "企业活动列表";
let param:any = {};
eccEnumValue(FunName, "type", ACTIVITYTYPECLIENT, type);
if (type == ACTIVITYTYPECLIENT.本周新发布) {
let startOfWeekMs = moment().startOf('week').valueOf();
param.createTime = {"$gt":startOfWeekMs};
} else {
param.type = type;
}
let now = new Date().valueOf();
if (state == 1) {//进行中
param.startTime = {"$lt":now};
param.endTime = {"$gt":now};
} else {
param.endTime = {"$lt":now};
}
let dbList = await findActivityList(param);
let dataList = [];
dbList.forEach(info => {
let item = {
img:info.img,
aId:info.aId,
title:info.title,
activityTime:`${moment(info.startTime).format("YYYY-MM-DD")}${moment(info.endTime).format("YYYY-MM-DD")}`,
location:info.location
};
dataList.push(item);
});
return {dataList, dataCount:dataList.length};
}
/**
* 获取活动统计
* @param type
* @returns
*/
export async function activityStatis(type:number) {
let now = new Date().valueOf();
let dataList = [];
let thisTypeParam:any = {};
for (let key in ACTIVITYTYPECLIENT) {
let keyAny:any = key;
if (!isNaN(keyAny)) {
let itemType = parseInt(keyAny);
let param:any = {};
if (itemType == ACTIVITYTYPECLIENT.本周新发布) {
let startOfWeekMs = moment().startOf('week').valueOf();
param.createTime = {"$gt":startOfWeekMs};
if (type == itemType) thisTypeParam.createTime = {"$gt":startOfWeekMs};
} else {
param.type = itemType;
if (type == itemType) thisTypeParam.type = itemType;
}
let value = await findActivityCount(param);
dataList.push({
key:ACTIVITYTYPECLIENT[key],
value
});
}
}
thisTypeParam.startTime = {"$lt":now};
thisTypeParam.endTime = {"$gt":now};
let inProgressCount = await findActivityCount(thisTypeParam);
delete thisTypeParam.startTime;
thisTypeParam.endTime = {"$lt":now};
let endCount = await findActivityCount(thisTypeParam);
return {dataList, inProgressCount, endCount};
}
/**
* 获取活动详情
* @param type
* @returns
*/
export async function activityInfo(aId:string) {
let activityInfo = await findOnceActivity({aId});
if (!activityInfo || !activityInfo.aId) throw new BizError(ERRORENUM.活动不存在);
return {
dataInfo:{
title:activityInfo.title,
content:activityInfo.content,
createTime:moment(activityInfo.createTime).format("YYYY-MM-DD"),
img:activityInfo.img,
location:activityInfo.location,
startTime:moment(activityInfo.startTime).format("YYYY-MM-DD"),
endTime:moment(activityInfo.endTime).format("YYYY-MM-DD")
}
}
}
export async function homePageActivity() {
let now = new Date().valueOf();
let param = {
startTime : {"$lt":now},
endTime : {"$gt":now}
}
let dbList = await findActivityList(param);
dbList.sort((a, b) => {return b.createTime - a.createTime});
let dataList = [];
for (let i = 0; i < 2; i++) {
let info = dbList[i];
if (!info || !info.aId) break;
dataList.push({
img:info.img,
aId:info.aId,
title:info.title,
activityTime:`${moment(info.startTime).format("YYYY-MM-DD")}${moment(info.endTime).format("YYYY-MM-DD")}`,
location:info.location
});
}
return {dataList};
}
\ No newline at end of file
/**
* 管理后台所有逻辑
*/
import { AddActivityConfig, AddEnterpriseBaseConfig, AddEnterpriseBusinesConfig, AddEnterpriseServiceConfig, AddPolicyConfig, AddSerivceConfig, AddSerivceResolveDynamicsConfig, AddVisitConfig, AdminAddEnterpriseBaseConfig, AdminAddPolicyImplementConfig, AdminUpdateOverallOperationConfig, UpdateActivityConfig, updatePolicyConfig } from "../config/paramConfig";
import { eccFormParam } from "../util/verificationParam";
import * as enterpriseData from "../data/enterprise/enterprise";
import * as userData from "../data/user";
import * as businessData from "../data/enterprise/businessdata";
import * as serviceData from "../data/service/service";
import * as dynamicData from "../data/service/dynamic";
import * as visitData from "../data/service/visit";
import * as overallOperationData from "../data/overallOperation";
import * as policyData from "../data/policy/policy";
import * as policyImplementationData from "../data/service/policyImplementation";
import * as activityData from "../data/policy/activity";
import * as appealsData from "../data/service/appeals";
import { getRandomId, successResult } from "../tools/system";
import * as visitPlanData from "../data/service/visitPlan";
import moment = require("moment");
import { changeEnumManyValue, changeEnumValue, eccEnumValue } from "../util/verificationEnum";
import { ACTIVITYTYPECLIENT, APPEALTYPE, ENTERPRISECATEGORY, ENTERPRISELABEL, ENTERPRISESIZE, IMPLEMENT, INDUSTRY, OPERATIONTYPE, POLICYTYPE, RESEARCHTYPE, SERVICESTATE, SOLUTIONTYPE, SOLVESTATECLIENT, STATE } from "../config/enum";
import { findUserInfoByUserId } from "../data/user";
import { BizError } from "../util/bizError";
import { ERRORENUM } from "../config/errorEnum";
import { visitPlanStats } from "./service/visitPlan";
function capitalizeFirstLetter(str) {
const s = String(str);
return s.charAt(0).toUpperCase() + s.slice(1);
}
export async function enterprise_name_list(nameStr:string) {
let param = {};
if (nameStr) {
param = {name:{"$regex":nameStr}};
}
let list = await enterpriseData.findEnterpriseToPageByParam(param, 1);
let dataList = [];
list.forEach(info => {
dataList.push({
key:info.name,
value:info.uscc
});
});
return {dataList}
}
export async function addEnterprise(reqUser, param) {
const FunName = "管理后台=>快速建档";
eccFormParam(FunName, AdminAddEnterpriseBaseConfig, param);
let uscc = param.uscc;
let name = param.name;
let nowMs = new Date().valueOf();
//企业信息
let addEnterpriseInfo = {createUserId:reqUser.userId, createTime:nowMs};
for (let key in AddEnterpriseBaseConfig) {
if (param[key]) addEnterpriseInfo[key] = param[key];
}
await enterpriseData.createEnterpriseBase(addEnterpriseInfo);
//经营数据
let businessList = [];
if (AdminAddEnterpriseBaseConfig.thisYearStartTimeMs) {
let item = {};
for (let key in AddEnterpriseBusinesConfig) {
if (param[`thisYear${capitalizeFirstLetter(key)}`]) {
item[key] = param[`thisYear${capitalizeFirstLetter(key)}`];
}
}
businessList.push(item);
}
if (AdminAddEnterpriseBaseConfig.lastYearStartTimeMs) {
let item = {};
for (let key in AddEnterpriseBusinesConfig) {
if (param[`thisYear${capitalizeFirstLetter(key)}`]) {
item[key] = param[`thisYear${capitalizeFirstLetter(key)}`];
}
}
businessList.push(item);
}
let addList = [];
for (let i = 0; i < businessList.length; i++) {
let param = businessList[i];
param.createTime = reqUser.createTime;//创建时间
param.uscc = uscc;
param.name = name;
param.createTime = nowMs;
addList.push(param);
}
await businessData.addManyBusinessData(addList);
//服务记录
let isNull = false;
for (let key in AddEnterpriseServiceConfig) {
if (!param[key]) isNull = true;
}
if (!isNull) {
let serviceInfo = {uscc, promoterId:reqUser.userId, promoterName:reqUser.userName};
for (let key in AddEnterpriseServiceConfig) {
if (param[key]) serviceInfo[key] = param[key];
}
await serviceData.createData(serviceInfo);
}
return successResult();
}
export async function enterpriseList(reqUser, selectStr:string, industry:number, isNaturalPersonHolding:number, attribute:number, type:number, page:number) {
let param:any = {};
if (selectStr) {
param.name = {"$regex":selectStr};
}
if (industry) {
param.privateIndustry = {"$in":[industry]};
}
if (isNaturalPersonHolding) {
param.isNaturalPersonHolding = isNaturalPersonHolding == 1 ? true : false;
}
if (attribute) {
param.labelList = {"$in":[attribute]};
}
if (type) {
param.enterpriseCategory = type;
}
let followMap = await userData.findUserFollowEnterpriseMap(reqUser.userId);
let list = await enterpriseData.findEnterpriseToPageByParam(param, page);
let dataCount = await enterpriseData.findEnterpriseCountByParam(param);
let dataList = [];
list.forEach(info => {
let logonTime = moment(info.logonTime).format("YYYY-MM-DD");
let inZJTime = moment(info.inZJTime).format("YYYY-MM-DD");
let item = {
uscc:info.uscc,
name:info.name,
isFocus: info.isFocus ? "是" : "否",
enterpriseCategory:changeEnumValue(ENTERPRISECATEGORY, info.enterpriseType) || "-",
inZJTime,
zhuceziben:info.zhuceziben,
logonTime,
industry:changeEnumValue(INDUSTRY, info.privateIndustry),
isNaturalPersonHolding:info.isNaturalPersonHolding,
logonAddress:info.logonAddress || "-",
operatingAddress:info.operatingAddress || "-",
leasedArea:info.leasedArea || "-",
mainBusiness:info.mainBusiness,
isFollow:followMap[info.uscc] ? "已关注" : "未关注"
};
dataList.push(item);
});
return {dataList, dataCount};
}
/**
* 关注
* @param reqUser
* @param uscc
* @returns
*/
export async function addEnterpriseFollow(reqUser, uscc:string) {
let userInfo = await findUserInfoByUserId(reqUser.userId);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
if (userInfo.followEnterprise.indexOf(uscc) > -1) {
throw new BizError(ERRORENUM.已关注);
}
let list = [uscc];
userInfo.followEnterprise.forEach(key => {
list.push(key);
});
userInfo.followEnterprise = list;
await userInfo.save();
return successResult();
}
/**
* 取消关注
* @param reqUser
* @param uscc
* @returns
*/
export async function delEnterpriseFollow(reqUser, uscc:string) {
let userInfo = await findUserInfoByUserId(reqUser.userId);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
if (userInfo.followEnterprise.indexOf(uscc) == -1) {
throw new BizError(ERRORENUM.已取消);
}
let list = [];
userInfo.followEnterprise.forEach(key => {
if (key != uscc)list.push(key);
});
userInfo.followEnterprise = list;
await userInfo.save();
return successResult();
}
export async function enterpriseBusinessList(selectStr:string, industry:number, year:number, attribute:number, type:number, page:number) {
let param:any = {};
if (selectStr) {
param.name = {"$regex":selectStr};
}
if (industry) {
param.industry = {"$in":[industry]};
}
if (year) {
param.year = year;
}
let list = await businessData.findEnterpriseBusinessToPageByParam(param, page);
let dataCount = await businessData.findEnterpriseBusinessCountByParam(param);
let dataList = [];
list.forEach(info => {
let item = {
uscc:info.uscc,
name:info.name,
year:info.year,
industry:changeEnumManyValue(INDUSTRY, info.industry)[0] || "-",
tax:info.tax,
revenue:info.revenue,
FAI:info.FAI,
};
dataList.push(item);
});
return {dataList, dataCount};
}
export async function enterpriseVisitList(selectStr:string, researchTime:number, researchType:number, appealType:number, state:number, page:number) {
let param:any = {};
let list = await visitData.findDataToPage(param, page);
let dataCount = await visitData.findDataCount(param);
let userMap = await userData.findUserMap();
let dataList = [];
list.forEach(info => {
let researchTime = moment(info.researchTime).format("YYYY-MM-DD");
let accompanyStr = "";
info.accompany.forEach((item, index) => {
accompanyStr += `${userMap[item]}`;
if (index < info.accompany.length-1) accompanyStr += "、";
})
let item = {
name:info.name,
leaderName:info.leaderName,
researchTime,
appealType:changeEnumValue(APPEALTYPE, info.appealTypeEnumId),
researchType:changeEnumValue(RESEARCHTYPE, info.researchType),
appeal:info.appeal,
state:changeEnumValue(SOLVESTATECLIENT, info.state),
accompany:accompanyStr,
contacts:info.contacts,
contactsPhone:info.contactsPhone
};
dataList.push(item);
});
return {dataList, dataCount};
}
export async function addEnterpriseVisit(reqUser, uscc:string, param) {
const FunName = "企业服务=>添加走访";
eccFormParam(FunName, AddVisitConfig, param);
eccEnumValue(FunName, "researchType", RESEARCHTYPE, param.researchType);
eccEnumValue(FunName, "appealType", APPEALTYPE, param.appealType);
eccEnumValue(FunName, "solutionType", SOLUTIONTYPE, param.solutionType);
eccEnumValue(FunName, "state", SOLVESTATECLIENT, param.state);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
param.vId = getRandomId(uscc);
param.uscc = uscc;
param.name = enterpriseInfo.name;
param.promoterId = reqUser.userId;
await visitData.createData(param);
return successResult();
}
export async function enterpriseServiceList(selectStr:string, serivceTime:number, enterpriseType:number, state:number, page:number) {
let param:any = {};
let list = await serviceData.selectDataByParamToPage(param, page);
let dataCount = await serviceData.selectCountByParam(param);
let dataList = [];
list.forEach(info => {
let serivceTime = moment(info.serivceTime).format("YYYY-MM-DD");
let item = {
sId:info.sId,
uscc:info.uscc,
name:info.name,
contacts:info.contacts,
serivceTime,
contactsPhone:info.contactsPhone,
enterpriseType:info.enterpriseType,
content:info.content,
state:info.state
};
dataList.push(item);
});
return {dataList, dataCount};
}
/**
* 企业服务=>添加服务
* @param reqUser
* @param param
* @returns
*/
export async function addEnterpriseService(reqUser, uscc:string, param) {
const FunName = "添加服务";
eccFormParam(FunName, AddSerivceConfig, param);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
param.sId = getRandomId(uscc);
param.uscc = uscc;
param.promoterId = reqUser.userId;
param.state = SOLVESTATECLIENT.未解决;
param.name = enterpriseInfo.name;
await serviceData.createData(param);
return successResult();
}
/**
* 企业服务=>添加跟踪记录
* @param reqUser
* @param param
* @returns
*/
export async function addEnterpriseServiceResolveDynamics(reqUser, uscc:string, sId:string, param) {
const FunName = "添加日常服务跟踪记录"
eccFormParam(FunName, AddSerivceResolveDynamicsConfig, param);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
param.uscc = uscc;
param.sId = sId;
param.rId = getRandomId(uscc);
param.enterpriseName = enterpriseInfo.name;
param.createUserId = reqUser.userId;
await dynamicData.createData(param);
if (param.resolutionStatus == SERVICESTATE.已解决) {
let visitInfo = await serviceData.selectData({sId});
visitInfo.state = param.resolutionStatus;
await visitInfo.save();
}
return successResult();
}
/**
* 企业服务=>跟踪记录
* @param reqUser
* @param param
* @returns
*/
export async function enterpriseServiceResolveDynamicsList(reqUser, sId:string) {
const FunName = "日常服务跟踪记录"
let dynamicList = await dynamicData.selectDataByParam({sId:sId});
let userMap = await userData.findUserMap();
let dataList = [];
dynamicList.forEach(info => {
let {sId, rId, tracking, trackingDesc, trackingTime} = info;
dataList.push({
rId,
name:tracking,
trackingDesc,
trackingTime:moment(trackingTime).format("YYYY-MM-DD")
});
});
return {dataList};
}
/**
* 政策列表
* @returns
*/
export async function policyList(selectTitle:string, createTime:number, type:number, page:number) {
const FunName = "政策列表";
let selectParam:any = {};
if (type) {
eccEnumValue(FunName, "type", POLICYTYPE, type);
selectParam.type = type;
}
if (createTime) {
let endTime = moment(createTime).endOf("month").valueOf();
selectParam.createTime = {"$gt":createTime, "$lt":endTime};
}
if (selectTitle) {
selectParam.title = {"$regex":selectTitle};
}
let dataBaseList = await policyData.findDataToPage(selectParam, page);
let dataCount = await policyData.findDataCount(selectParam);
let dataList = [];
dataBaseList.forEach(info => {
let {title, createTimeMs, source, pId, type} = info;
dataList.push({
pId,
title,
type:changeEnumValue(POLICYTYPE, type),
createTime:moment(createTimeMs).format("YYYY-MM-DD"),
source
});
});
return {dataList, dataCount};
}
export async function policySelectList(selectTitle:string) {
let param:any = {};
if (selectTitle) {
selectTitle = selectTitle.replace("[", "\\[");
selectTitle = selectTitle.replace("]", "\\]")
param.title = {"$regex":selectTitle}
}
let policyList = await policyData.findData(param);
let dataList = [];
policyList.forEach(info => {
dataList.push({
key:info.title,
value:info.pId
});
});
return {dataList};
}
export async function policyPolicyimplementationList(selectTitle:string, status:number, type:number, page:number) {
let param:any = {};
if (selectTitle) param.policyName = {"$regex":selectTitle};
if (status) param.state = status;
if (type) param.type = type;
let dataList = [];
let pIList = await policyImplementationData.findDataToPage({}, page);
let dataCount = await policyImplementationData.findDataCount({});
pIList.forEach(info => {
dataList.push({
piId:info.piId,
pId:info.pId,
enterpriseName:info.enterpriseName,
policyName:info.policyName,
implementTime:moment(info.implementTime).format("YYYY-MM-DD"),
desc:info.desc,
notes:info.notes,
state:changeEnumValue(IMPLEMENT, info.state)
});
});
return {dataCount, dataList}
}
export async function policyPolicyimplementationInfo(piId:string) {
let piInfo = await policyImplementationData.findOneData({piId});
let dataInfo = {
pId:piInfo.pId, //关联政策
enterpriseName:piInfo.enterpriseName,//企业名称
policyName:piInfo.policyName,//政策名称
uscc:piInfo.uscc, //关联企业
implementTime:piInfo.implementTime, //落实时间
state:piInfo.state, //落实状态
desc:piInfo.desc, //具体描述
notes:piInfo.notes, //备注
};
return {dataInfo};
}
export async function policyPolicyimplementationAdd(reqUser, param) {
let FunName = "管理后台添加政策落实";
eccFormParam(FunName, AdminAddPolicyImplementConfig, param);
let policyInfo = await policyData.findOnceData({pId:param.pId});
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(param.uscc);
if (!enterpriseInfo || !enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
param.piId = getRandomId(param.uscc);
param.policyName = policyInfo.title;
param.createTime = new Date().valueOf();
param.createUser = reqUser.userId;
param.enterpriseName = enterpriseInfo.name;
await policyImplementationData.addData(param);
return successResult();
}
export async function policyPolicyimplementationUpdate(reqUser, piId, param) {
let FunName = "管理后台修改政策落实";
eccFormParam(FunName, AdminAddPolicyImplementConfig, param);
let policyInfo = await policyData.findOnceData({pId:param.pId});
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(param.uscc);
if (!enterpriseInfo || !enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
let piInfo = await policyImplementationData.findOneData({piId});
for (let key in param) {
piInfo[key] = param[key]
}
await piInfo.save();
return successResult();
}
export async function policyPolicyimplementationDel(reqUser, piId) {
let piInfo = await policyImplementationData.findOneData({piId});
if (!piInfo || !piInfo.piId) throw new BizError(ERRORENUM.政策落实不存在);
await policyImplementationData.deleteOne({piId});
return successResult();
}
/**
* 活动回显
* @returns
*/
export async function getPolicyInfo(pId:string) {
const FunName = "活动回显";
let policyInfo = await policyData.findOnceData({pId});
let dataInfo = {
title:policyInfo.title,//标题
type:policyInfo.type,
content:policyInfo.content,//内容
createTime:policyInfo.createTime,
endTime:policyInfo.endTime,
source:policyInfo.source
};
return {dataInfo};
}
/**
* 活动详情
* @returns
*/
export async function getPolicyItem(pId:string) {
const FunName = "活动详情";
let policyInfo = await policyData.findOnceData({pId});
let dataInfo = {
title:policyInfo.title,//标题
content:policyInfo.content,//内容
source:policyInfo.source,
createTime:moment(policyInfo.createTime).format("YYYY-MM-DD")
};
return {dataInfo};
}
/**
* 政策添加
* @returns
*/
export async function addPolicy(param) {
const FunName = "添加政策";
eccFormParam(FunName, AddPolicyConfig, param);
eccEnumValue(FunName, "type", POLICYTYPE, param.type);
param.pId = getRandomId("policy");
await policyData.addPolicy(param);
return successResult();
}
/**
* 政策修改
* @returns
*/
export async function updatePolicy(reqUser, pId, param) {
const FunName = "修改政策";
eccFormParam(FunName, updatePolicyConfig, param);
eccEnumValue(FunName, "type", POLICYTYPE, param.type);
let policyInfo = await policyData.findOnceData({pId});
if (!policyInfo || !policyInfo.pId) throw new BizError(ERRORENUM.政策不存在);
for (let key in param) {
policyInfo[key] = param[key];
}
await policyInfo.save();
return successResult();
}
export async function deletePolicy(pId:string) {
const FunName = "删除政策";
let policyInfo = await policyData.findOnceData({pId});
if (!policyInfo || !policyInfo.pId) throw new BizError(ERRORENUM.政策不存在);
await policyData.deleteOnePolicy({pId});
return successResult();
}
//活动
/**
* 活动列表
* @returns
*/
export async function activityList(selectTitle:string, startTime:number, endTime:number, type:number, state:number, page:number) {
const FunName = "活动列表";
let selectParam:any = {};
if (selectTitle) {
selectParam.title = {"$regex":selectTitle};
}
if (startTime) {
selectParam.startTime = {"$gt":startTime}
}
if (endTime) {
selectParam.endTime = {"$lt":endTime}
}
if (type) {
eccEnumValue(FunName, "type", ACTIVITYTYPECLIENT, type);
selectParam.type = type;
}
let dataBaseList = await activityData.findActivityListPage(selectParam, page);
let dataCount = await activityData.findActivityCount(selectParam);
let dataList = [];
dataBaseList.forEach(info => {
let {aId, title, startTime, endTime, location, type, releaseTime} = info;
dataList.push({
aId,
title,
activityTime:`${moment(startTime).format("YYYY/MM/DD")}-${moment(endTime).format("YYYY/MM/DD")}`,
type:changeEnumValue(ACTIVITYTYPECLIENT, type),
location,
status:"测试",
createTime:moment(releaseTime).format("YYYY-MM-DD")
});
});
return {dataList, dataCount};
}
/**
* 活动回显
* @returns
*/
export async function getActivityInfo(aId:string) {
const FunName = "活动回显";
let info = await activityData.findOnceActivity({aId});
let dataInfo = {
title:info.title,//活动名称
type:info.type,//活动类型
startTime:info.startTime,//开始时间
endTime:info.endTime,//结束时间
releaseTime:info.releaseTime,//发布时间
location:info.location,//地址
content:info.content,//活动内容
img:info.img//图片
};
return {dataInfo};
}
/**
* 活动回显
* @returns
*/
export async function activityItem(aId:string) {
const FunName = "活动回显";
let info = await activityData.findOnceActivity({aId});
let dataInfo = {
title:info.title,//活动名称
activityTime:`${moment(info.startTime).format("YYYY/MM/DD")}-${moment(info.endTime).format("YYYY/MM/DD")}`,//活动时间
location:info.location,//地址
content:info.content,//活动内容
img:info.img//图片
};
return {dataInfo};
}
/**
* 活动添加
* @returns
*/
export async function addActivity(reqUser, param) {
const FunName = "添加活动";
eccFormParam(FunName, AddActivityConfig, param);
eccEnumValue(FunName, "type", ACTIVITYTYPECLIENT, param.type);
param.aId = getRandomId("activity");
param.createUser = reqUser.userId;
param.createTime = new Date().valueOf();
param.startTime = param.activityTime[0];
param.endTime = param.activityTime[1];
param.img = '/activity.png'
await activityData.addActivity(param);
return successResult();
}
/**
* 活动修改
* @returns
*/
export async function updateActivity(reqUser, aId, param) {
const FunName = "修改活动";
eccFormParam(FunName, UpdateActivityConfig, param);
eccEnumValue(FunName, "type", ACTIVITYTYPECLIENT, param.type);
param.img = '/activity.png'
let activityInfo = await activityData.findOnceActivity({aId});
if (!activityInfo || !activityInfo.aId) throw new BizError(ERRORENUM.政策不存在);
for (let key in param) {
if (key == "activityTime") {
activityInfo.startTime = param.activityTime[0];
activityInfo.endTime = param.activityTime[1];
} else {
activityInfo[key] = param[key];
}
}
await activityInfo.save();
return successResult();
}
export async function deleteActivity(aId:string) {
const FunName = "删除活动";
let activityInfo = await activityData.findOnceActivity({aId});
if (!activityInfo || !activityInfo.aId) throw new BizError(ERRORENUM.政策不存在);
await activityData.deleteOneActivity({aId});
return successResult();
}
export async function activityPreviewList(selectTitle:string, startTime:number, endTime:number, type:number, page:number) {
let selectParam:any = {startTime:{"$gt":new Date().valueOf()}};
if (selectTitle) {
selectParam.title = {"$regex":selectTitle};
}
if (startTime) {
selectParam.startTime = {"$gt":startTime}
}
if (endTime) {
selectParam.endTime = {"$lt":endTime}
}
if (type) {
eccEnumValue("管理后台活动预告", "type", ACTIVITYTYPECLIENT, type);
selectParam.type = type;
}
let dataBaseList = await activityData.findActivityListPage(selectParam, page);
let dataCount = await activityData.findActivityCount(selectParam);
let dataList = [];
dataBaseList.forEach(info => {
let {aId, title, startTime, endTime, location, type, releaseTime} = info;
dataList.push({
aId,
title,
activityTime:`${moment(startTime).format("YYYY/MM/DD")}-${moment(endTime).format("YYYY/MM/DD")}`,
type:changeEnumValue(ACTIVITYTYPECLIENT, type),
location,
status:"预告",
createTime:moment(releaseTime).format("YYYY-MM-DD")
});
});
return {dataList, dataCount};
}
/**
* 政策列表
* @returns
*/
export async function policyMatchList(selectTitle:string, status:number, type:number, page:number) {
const FunName = "政策列表";
let selectParam:any = {};
if (type) {
eccEnumValue(FunName, "type", POLICYTYPE, type);
selectParam.type = type;
}
// if (createTime) {
// let endTime = moment(createTime).endOf("month").valueOf();
// selectParam.createTime = {"$gt":createTime, "$lt":endTime};
// }
let dataBaseList = await policyData.findDataToPage(selectParam, page);
let dataCount = await policyData.findDataCount(selectParam);
let dataList = [];
dataBaseList.forEach(info => {
let {title, createTimeMs, source, pId, type} = info;
dataList.push({
pId,
title,
type:changeEnumValue(POLICYTYPE, type),
createTime:moment(createTimeMs).format("YYYY-MM-DD"),
source
});
});
return {dataList, dataCount};
}
/**
* 政策列表
* @returns
*/
export async function policyMatchEnterpriseList(pId) {
let policyList = await policyData.findData({pId});
let dataList= [];
for (let i = 0; i < policyList.length; i++) {
let info = policyList[i];
let itemParam:any = {};
if (info.industry) {
itemParam.industry = {"$in":[info.industry]}
}
if (info.label && info.label.length) {
itemParam.labelList = {"$in":info.label}
}
let itemEnterpriseList
if (itemParam) itemEnterpriseList = await enterpriseData.findEnterpriseToPageByParam(itemParam, 1);
itemEnterpriseList.forEach(item => {
dataList.push({matchingDegree:"高", enterpriseName:item.name});
})
}
return {dataList}
}
export async function activityOutList(selectTitle:string, startTime:number, endTime:number, type:number, page:number) {
let selectParam:any = {endTime:{"$lt":new Date().valueOf()}};
if (selectTitle) {
selectParam.title = {"$regex":selectTitle};
}
if (startTime) {
selectParam.startTime = {"$gt":startTime}
}
if (endTime) {
selectParam.endTime = {"$lt":endTime}
}
if (type) {
eccEnumValue("管理后台活动预告", "type", ACTIVITYTYPECLIENT, type);
selectParam.type = type;
}
let dataBaseList = await activityData.findActivityListPage(selectParam, page);
let dataCount = await activityData.findActivityCount(selectParam);
let dataList = [];
dataBaseList.forEach(info => {
let {aId, title, startTime, endTime, location, type, releaseTime} = info;
dataList.push({
aId,
title,
activityTime:`${moment(startTime).format("YYYY/MM/DD")}-${moment(endTime).format("YYYY/MM/DD")}`,
type:changeEnumValue(ACTIVITYTYPECLIENT, type),
location,
status:"测试",
createTime:moment(releaseTime).format("YYYY-MM-DD")
});
});
return {dataList, dataCount};
}
export async function homeBase() {
let 企业总数 = await enterpriseData.findEnterpriseCountByParam({});
let 产业领域 = await enterpriseData.statisIndustryEnterprise();
let 专精特新企业 = await enterpriseData.findEnterpriseCountByParam({labelList:{"$in":[ENTERPRISELABEL.专精特新]}});
let 高新技术企业 = await enterpriseData.findEnterpriseCountByParam({labelList:{"$in":[ENTERPRISELABEL.高新技术]}});
let 重点关注企业 = await enterpriseData.findEnterpriseCountByParam({labelList:{"$in":[ENTERPRISELABEL.重点企业]}});
let 投促重点企业 = await enterpriseData.findEnterpriseCountByParam({labelList:{"$in":[ENTERPRISELABEL.投促重点]}});
let 外资企业 = await enterpriseData.findEnterpriseCountByParam({labelList:{"$in":[ENTERPRISELABEL.外资企业]}});
let 户管企业 = await enterpriseData.findEnterpriseCountByParam({labelList:{"$in":[ENTERPRISELABEL.户管企业]}});
let 规上企业 = await enterpriseData.findEnterpriseCountByParam({labelList:{"$in":[ENTERPRISELABEL.规上企业]}});
let 科技小巨人 = await enterpriseData.findEnterpriseCountByParam({labelList:{"$in":[ENTERPRISELABEL.科技小巨人]}});
let dataList =[
{key:"企业总数", value:企业总数, unit:"家"},
{key:"产业领域", value:产业领域, unit:"类"},
{key:"户管企业", value:户管企业, unit:"家"},
{key:"规上企业", value:规上企业, unit:"家"},
{key:"重点关注", value:重点关注企业, unit:"家"},
{key:"专精特新", value:专精特新企业, unit:"家"},
{key:"高新技术", value:高新技术企业, unit:"家"},
{key:"外资企业", value:外资企业, unit:"家"},
{key:"科技小巨人", value:科技小巨人, unit:"家"},
{key:"投促重点", value:投促重点企业, unit:"家"},
];
return {dataList}
}
export async function homeEnterpriseChange(year:number) {
let dataList = [
{key:"5月", value:0},
{key:"6月", value:0},
{key:"7月", value:0},
{key:"8月", value:0},
{key:"9月", value:0},
{key:"10月", value:0},
{key:"11月", value:0},
{key:"12月", value:0},
{key:"1月", value:0},
{key:"2月", value:0},
{key:"3月", value:0},
{key:"4月", value:45023},
];
return {dataList}
}
export async function homePolicy() {
let typeList = await policyData.typeStatis({});
let dataList =[];
let policyCount = 0;
typeList.forEach(info => {
dataList.push({
key:changeEnumValue(POLICYTYPE, info._id),
value:info.count
});
policyCount += info.count;
});
let implementationCount = await policyImplementationData.findDataCount({});
return {dataList, policyCount, implementationCount}
}
export async function homeActivity(type) {
let activityCount = await activityData.findActivityCount({});
let dataList = [
{key:"5月", value:0},
{key:"6月", value:0},
{key:"7月", value:0},
{key:"8月", value:0},
{key:"9月", value:0},
{key:"10月", value:0},
{key:"11月", value:0},
{key:"12月", value:0},
{key:"1月", value:0},
{key:"2月", value:0},
{key:"3月", value:0},
{key:"4月", value:activityCount},
];
return {dataList, activityCount, thisWeekCount:activityCount}
}
export async function homeVisit(year) {
let startTime = new Date(`${year}-01-01 00:00:00`).valueOf();
let endTime = new Date(`${year+1}-01-01 00:00:00`).valueOf();
let arrange = await visitPlanData.findDataCount({visitTime:{"$gt":startTime, "$lt":endTime}});
let unexecuted = await visitPlanData.findDataCount({visitTime:{"$gt":new Date().valueOf()}});
let visitDataList = await visitData.statisYearCount({researchTime:{"$gt":startTime, "$lt":endTime}});
let changeList = [];
visitDataList.forEach(info => {
let {_id, count} = info;
changeList.push({key:`${_id.month}`, value:count});
});
let visitList = await visitData.findDataToPage({researchTime:{"$gt":startTime, "$lt":endTime}}, 1);
let userMap = await userData.findUserMap();
let logList = [];
visitList.forEach(info => {
let {accompany} = info;
let accompanyStr = "";
accompany.forEach(uId => {
accompanyStr += `${userMap[uId]} `;
});
logList.push({name:info.name, accompany:accompanyStr, researchTime:moment(info.researchTime).format("YYYY年M月D日")});
});
return {changeList, logList, arrange, unexecuted, rate:98}
}
function getItemOperate(item) {
let list = [];
for (let i = 1; i <= 12; i++) {
list.push({
key:`${i}月`,
value:item[i] || 0
});
};
return list
}
function defaultData(item) {
if (!item || !item.id) {
item = {count:0}
for (let i = 1; i <= 12; i++) {
item[i] = 0;
};
}
return item;
}
/**
* 经营数据
* @returns
*/
export async function enterpriseOperate(year:number) {
let 今年税收 = await overallOperationData.findData({year, operationType:OPERATIONTYPE.税收});
let 去年税收 = await overallOperationData.findData({year:year-1, operationType:OPERATIONTYPE.税收});
let 今年财政收入 = await overallOperationData.findData({year, operationType:OPERATIONTYPE.财政收入});
let 去年财政收入 = await overallOperationData.findData({year:year-1, operationType:OPERATIONTYPE.财政收入});
let 今年固定资产投入 = await overallOperationData.findData({year, operationType:OPERATIONTYPE.固定资产投入});
let 去年固定资产投入 = await overallOperationData.findData({year:year-1, operationType:OPERATIONTYPE.固定资产投入});
今年税收 = defaultData(今年税收);
去年税收 = defaultData(去年税收);
今年财政收入 = defaultData(今年财政收入);
去年财政收入 = defaultData(去年财政收入);
今年固定资产投入 = defaultData(今年固定资产投入);
去年固定资产投入 = defaultData(去年固定资产投入);
let 税收YoY=0;
if (今年税收 && 去年税收) {
税收YoY = Math.round((今年税收-去年税收)/去年税收*1000)/10
}
let shuiShou = {
name:"税收情况",
thisYear:今年税收.count || 0,
yoy:税收YoY,//年度环比
chart:[
{
name:"本年度",
data:getItemOperate(今年税收)
},
{
name:"上年度",
data:getItemOperate(去年税收)
}
]
};
let 财政YoY=0;
if (今年财政收入 && 去年财政收入) {
税收YoY = Math.round((今年财政收入-去年财政收入)/去年财政收入*1000)/10
}
let caiZheng = {
name:"财政收入",
thisYear:今年财政收入.count || 0,
yoy:财政YoY,//年度环比
chart:[
{
name:"本年度",
data:getItemOperate(今年财政收入)
},
{
name:"上年度",
data:getItemOperate(去年财政收入)
}
]
};
let 固定资产投入YoY=0;
if (今年固定资产投入 && 去年固定资产投入) {
税收YoY = Math.round((今年固定资产投入-去年固定资产投入)/去年固定资产投入*1000)/10
}
let guDing = {
name:"固定投资情况",
thisYear:今年固定资产投入.count || 0,
yoy:固定资产投入YoY,//年度环比
chart:[
{
name:"本年度",
data:getItemOperate(今年固定资产投入)
},
{
name:"上年度",
data:getItemOperate(去年固定资产投入)
}
]
};
let industry = {
count:0,//企业产业领域数量
dataList:[]
}
let industryList =await enterpriseData.statisIndustryTypeEnterprise();
industryList.forEach(info => {
let {_id, count} = info;
industry.dataList.push({
key:changeEnumValue(INDUSTRY, _id),
value:count
})
});
industry.count = industryList.length;
return {shuiShou, caiZheng, guDing, industry};
}
export async function enterpriseOperateInfo(year:number, operationType:number) {
let info = await overallOperationData.findData({year,operationType});
if (!info || !info.id) {
//创建一个新的
info = {
id:getRandomId(year+"经营"+operationType),//标识
year,
operationType,//类型 枚举 OPERATIONTYPE
count:0,
1:0,//1月
2:0,//2月
3:0,//3月
4:0,//4月
5:0,//5月
6:0,//6月
7:0,//7月
8:0,//8月
9:0,//9月
10:0,//10月
11:0,//11月
12:0,//12月
ct:new Date().valueOf()
};
await overallOperationData.createData(info);
}
let dataInfo:any = {id:info.id};
for (let i = 1; i <=12; i++) {
dataInfo[i] = info[i] || 0;
}
dataInfo.count = info.count || 0;
return {dataInfo};
}
export async function updatEnterpriseOperateInfo(id:string, param) {
eccFormParam("管理后台=>修改经营数据", AdminUpdateOverallOperationConfig, param)
let info = await overallOperationData.findData({id});
for (let key in param) {
info[key] = param[key] || 0;
}
await info.save();
return successResult();
}
\ No newline at end of file
/**
* 初始化数据
*/
import { ACTIVITYTYPECLIENT, APPEALTYPE, ENTERPRISESIZE, INDUSTRY, NASHUIRENZIZHI, POLICYTYPE, RAS, RESEARCHTYPE, SOLUTIONTYPE, SOLVESTATE, SUBSIDYTYPE, USERTYPE } from "../config/enum";
import { initEnterpriseBase } from "../data/enterprise/enterprise";
import { createUser } from "../data/user";
import { excelBecomeOfBlockData, onceSheetBecomeOfblockData } from "../util/analysisExcel";
import * as serviceData from "../data/service/service";
import * as visitData from "../data/service/visit";
import { addActivity } from "../data/policy/activity";
import { addPolicy } from "../data/policy/policy";
import { addData } from "../data/service/policyImplementation";
import { getPwdMd5 } from "../tools/system";
const md5 = require("md5");
import { gaoXinEnterpriseMap } from "./labelEnterpriseList";
const xlsx = require('node-xlsx');
const path = require('path');
const fs = require('fs');
export async function test111() {
let excelInfo = onceSheetBecomeOfblockData("目标名单.xlsx", "Sheet1");
let dataList = excelInfo[0]["blockData"];
let newList = [
["序号","原文件导入名称","系统匹配企业名称","统一社会信用代码","是否高新技术企业"]
];
dataList.forEach((subList, index) => {
if (!index) return;
let name = subList[2];
if (!name) return;
if (gaoXinEnterpriseMap[name]) {
subList.push("是");
}
newList.push(subList);
});
let data = [
{
name:"sheet1",
data:newList
}
];
let buff = xlsx.build(data);
fs.writeFileSync(path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", '高新技术企业标记.xlsx' ), buff);
console.log();
}
export async function initData() {
// await createUser({userType:1, name:"李欣鸣", loginId:"18711017326", userId:"123123aac", pwd:getPwdMd5("18711017326", md5("123456")), phone:"18711017326"});
// await createUser({userType:1, name:"陈知行", loginId:"18120935727", userId:"123123aad", pwd:getPwdMd5("18120935727", md5("123456")), phone:"18120935727"});
// await upCheckEnterpriseData();
}
async function upCheckEnterpriseData() {
let zdqy = onceSheetBecomeOfblockData('重点企业.xlsx', "Sheet1");
let zdqyDataList = zdqy[0].blockData;
let map = {};
for (let i = 1; i < zdqyDataList.length; i++) {
let uscc = zdqyDataList[i][0];
map[uscc] = 1;
}
let data = onceSheetBecomeOfblockData('全部企业.xlsx', '已匹配户管企业');
let dataList = data[0].blockData;
let checkCount = 0;
let addList = [];
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 addInfo:any = {
uscc:统一社会信用代码,
name:系统匹配企业名称
};
/**核对基础信息,注册时间,注册地址,经营地址等 */
if (成立日期 != "-") {
addInfo.logonTime = new Date(成立日期).valueOf();
}
addInfo.logonAddressList = [所属省份, 所属城市, 所属区县, 企业地址];
addInfo.logonAddress = 企业地址;
addInfo.mainBusiness = 经营范围;
let ras = RAS.续存;
if (登记状态.indexOf("注销") != -1) {
//企业注销 注销将企业改成迁出
let 等级状态数组 = 登记状态.split("(");
if (等级状态数组[1]) {
addInfo.logOffMS = new Date(等级状态数组[1].replace(")", "")).valueOf();
}
ras = RAS.注销;
}
/** 增补字段 */
addInfo.RAS = ras;//登记状态
addInfo.legalPerson = 法定代表人;//法人
addInfo.zhuceziben = 注册资本;//注册资本
addInfo.shijiaoziben = 实缴资本;//实缴资本
addInfo.dianHua = 电话;//电话
addInfo.gengDuoDianHua = 更多电话;//更多电话
addInfo.mail = 邮箱;//邮箱
addInfo.moreMail = 更多邮箱;//更多邮箱
addInfo.enterpriseType = 企业机构类型;//企业(机构)类型
addInfo.zhuCeHao = 注册号;//注册号
addInfo.zuZhiJiGouDaiMa = 组织机构代码;//组织机构代码
addInfo.canBaoRenShu = 参保人数 == "-" || !参保人数 ? 0: parseInt(参保人数); //参保人数
addInfo.canBaoRenShuNianBao = 参保人数所属年报 == "-" || !参保人数所属年报 ? 0: parseInt(参保人数所属年报); //参保人数所属年报
addInfo.yingYeQiXian = 营业期限;//营业期限
switch (企业规模) {
case 'XS(微型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.微型;break;
case 'S(小型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.小型;break;
case 'M(中型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.中型;break;
case 'L(大型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.大型;break;
default: addInfo.qiYeGuiMo = ENTERPRISESIZE.未知;break;
}
addInfo.guanWang = 官网;//官网
addInfo.tongXinDiZhi = 通信地址;//通信地址
addInfo.jianJie = 企业简介;//企业简介
addInfo.dengJiJiGuan = 登记机关;//登记机关
switch (纳税人资质) {
case 'XS(微型)': addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.一般纳税人;break;
case '增值税一般纳税人': addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.增值税一般纳税人;break;
case 'M(中型)': addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.小规模纳税人;break;
default: addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.未知;break;
}
addInfo.zuiXinNianBaoNianFen = isNaN(最新年报年份) ? 0: parseInt(最新年报年份); //最新年报年份
addInfo.qccIndustry1 = 企查查行业门类;//企查查行业类别1
addInfo.qccIndustry2 = 企查查行业大类;//企查查行业类别2
addInfo.qccIndustry3 = 企查查行业中类;//企查查行业类别3
addInfo.qccIndustry4 = 企查查行业小类;//企查查行业类别4
addInfo.isFocus = map[统一社会信用代码] ? true : false;
addList.push(addInfo);
}
await initEnterpriseBase(addList);
console.log("企业数据导入成功");
}
\ No newline at end of file
import { findEnterpriseListByParam } from "../data/enterprise/enterprise";
const xlsx = require('node-xlsx');
const path = require('path');
const fs = require('fs');
export async function dataOut() {
let list = await findEnterpriseListByParam({});
let dataList = [["企业名称", "统一信用代码"]];
list.forEach(info => {
let subList = [info.name, info.uscc];
dataList.push(subList);
});
let data = [
{
name:"sheet1",
data:dataList
}
];
let buff = xlsx.build(data);
fs.writeFileSync(path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", '导出企业0630.xlsx' ), buff);
console.log();
}
/**
* 初始化数据
*/
import { ENTERPRISELABEL, ENTERPRISESIZE, ENTERPRISETYPE, INDUSTRY, NASHUIRENZIZHI, POLICYTYPE, RAS, RESEARCHTYPE, SOLUTIONTYPE, SOLVESTATE, SUBSIDYTYPE, USERTYPE } from "../../config/enum";
import { initEnterpriseBase } from "../../data/enterprise/enterprise";
import * as policyData from "../../data/policy/policy";
import { onceSheetBecomeOfblockData } from "../../util/analysisExcel";
import { getPwdMd5, getRandomId } from "../../tools/system";
const md5 = require("md5");
import { gaoXinEnterpriseMap } from "../labelEnterpriseList";
import moment = require("moment");
import { createUser } from "../../data/user";
import { systemConfig } from "../../config/serverConfig";
import { get } from "../../util/request";
const xlsx = require('node-xlsx');
const path = require('path');
const fs = require('fs');
export async function test111() {
let excelInfo = onceSheetBecomeOfblockData("目标名单.xlsx", "Sheet1");
let dataList = excelInfo[0]["blockData"];
let newList = [
["序号","原文件导入名称","系统匹配企业名称","统一社会信用代码","是否高新技术企业"]
];
dataList.forEach((subList, index) => {
if (!index) return;
let name = subList[2];
if (!name) return;
if (gaoXinEnterpriseMap[name]) {
subList.push("是");
}
newList.push(subList);
});
let data = [
{
name:"sheet1",
data:newList
}
];
let buff = xlsx.build(data);
fs.writeFileSync(path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", '高新技术企业标记.xlsx' ), buff);
console.log();
}
export async function initData() {
await 企业筛选();
// await createUser({userType:1, name:"夏先圣", loginId:"15921724025", userId:"123123aax", pwd:getPwdMd5("15921724025", md5("123456")), phone:"15921724025"});
// await createUser({userType:1, name:"李欣鸣", loginId:"18711017326", userId:"123123aac", pwd:getPwdMd5("18711017326", md5("123456")), phone:"18711017326"});
// await createUser({userType:1, name:"陈知行", loginId:"18120935727", userId:"123123aad", pwd:getPwdMd5("18120935727", md5("123456")), phone:"18120935727"});
// await createUser({userType:1, name:"王东晨", loginId:"18234720432", userId:"123123add", pwd:getPwdMd5("18234720432", md5("123456")), phone:"18234720432"});
// await createUser({userType:1, name:"李嘉琪", loginId:"13671876391", userId:"a13671876391", pwd:getPwdMd5("13671876391", md5("123456")), phone:"13671876391"});
// await createUser({userType:1, name:"曹轶琳", loginId:"13601897943", userId:"a13601897943", pwd:getPwdMd5("13601897943", md5("123456")), phone:"13601897943"});
// await createUser({userType:1, name:"曹赟", loginId:"15800582997", userId:"a15800582997", pwd:getPwdMd5("15800582997", md5("123456")), phone:"15800582997"});
// await createUser({userType:1, name:"奚紫羿", loginId:"18616671556", userId:"a18616671556", pwd:getPwdMd5("18616671556", md5("123456")), phone:"18616671556"});
// await createUser({userType:1, name:"李飞", loginId:"15921130885", userId:"a15921130885", pwd:getPwdMd5("15921130885", md5("123456")), phone:"15921130885"});
// await createUser({userType:1, name:"俞彬精", loginId:"18317133631", userId:"a18317133631", pwd:getPwdMd5("18317133631", md5("123456")), phone:"18317133631"});
// await upCheckEnterpriseData();
// await inputPolicyData();
}
//导入企业底表
async function upCheckEnterpriseData() {
let zdqy2025 = onceSheetBecomeOfblockData('重点企业2025.xlsx', "Sheet1");
let zdqyData2025List = zdqy2025[0].blockData;
let zdqy2024 = onceSheetBecomeOfblockData('重点企业2025.xlsx', "Sheet1");
let zdqyData2024List = zdqy2024[0].blockData;
let gxjsqy = onceSheetBecomeOfblockData('高新技术企业标记.xlsx', "Sheet1");
let gxjsqyList = gxjsqy[0].blockData;
let gxMap = {};
for (let i = 1; i < gxjsqyList.length; i++) {
let uscc = gxjsqyList[i][0];
gxMap[uscc] = 1;
}
let map = {};
for (let i = 1; i < zdqyData2024List.length; i++) {
let uscc = zdqyData2024List[i][0];
map[uscc] = 1;
}
for (let i = 1; i < zdqyData2025List.length; i++) {
let uscc = zdqyData2025List[i][0];
map[uscc] = 1;
}
let data = onceSheetBecomeOfblockData('标记全部企业.xlsx', '同步企业名单');
let dataList = data[0].blockData;
let checkCount = 0;
let addList = [];
for (let i = 1; i < dataList.length; i++) {
let itemList = dataList[i];
let 原文件导入名称 = itemList[0];
let 系统匹配企业名称 = itemList[1];
let 登记状态 = itemList[2];
if (!登记状态) continue;
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 addInfo:any = {
uscc:统一社会信用代码,
name:系统匹配企业名称
};
/**核对基础信息,注册时间,注册地址,经营地址等 */
if (成立日期 != "-") {
addInfo.logonTime = new Date(成立日期).valueOf();
}
addInfo.logonAddressList = [所属省份, 所属城市, 所属区县, 企业地址];
addInfo.logonAddress = 企业地址;
addInfo.mainBusiness = 经营范围;
let ras = RAS.续存;
if (登记状态.indexOf("注销") != -1) {
//企业注销 注销将企业改成迁出
let 等级状态数组 = 登记状态.split("(");
if (等级状态数组[1]) {
addInfo.logOffMS = new Date(等级状态数组[1].replace(")", "")).valueOf();
}
ras = RAS.注销;
}
/** 增补字段 */
addInfo.RAS = ras;//登记状态
addInfo.legalPerson = 法定代表人;//法人
addInfo.zhuceziben = 注册资本;//注册资本
addInfo.shijiaoziben = 实缴资本;//实缴资本
addInfo.dianHua = 电话;//电话
addInfo.gengDuoDianHua = 更多电话;//更多电话
addInfo.mail = 邮箱;//邮箱
addInfo.moreMail = 更多邮箱;//更多邮箱
addInfo.enterpriseType = 企业机构类型;//企业(机构)类型
addInfo.zhuCeHao = 注册号;//注册号
addInfo.zuZhiJiGouDaiMa = 组织机构代码;//组织机构代码
addInfo.canBaoRenShu = 参保人数 == "-" || !参保人数 ? 0: parseInt(参保人数); //参保人数
addInfo.canBaoRenShuNianBao = 参保人数所属年报 == "-" || !参保人数所属年报 ? 0: parseInt(参保人数所属年报); //参保人数所属年报
addInfo.yingYeQiXian = 营业期限;//营业期限
switch (企业规模) {
case 'XS(微型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.微型;break;
case 'S(小型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.小型;break;
case 'M(中型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.中型;break;
case 'L(大型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.大型;break;
default: addInfo.qiYeGuiMo = ENTERPRISESIZE.未知;break;
}
addInfo.guanWang = 官网;//官网
addInfo.tongXinDiZhi = 通信地址;//通信地址
addInfo.jianJie = 企业简介;//企业简介
addInfo.dengJiJiGuan = 登记机关;//登记机关
switch (纳税人资质) {
case 'XS(微型)': addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.一般纳税人;break;
case '增值税一般纳税人': addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.增值税一般纳税人;break;
case 'M(中型)': addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.小规模纳税人;break;
default: addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.未知;break;
}
addInfo.zuiXinNianBaoNianFen = isNaN(最新年报年份) ? 0: parseInt(最新年报年份); //最新年报年份
addInfo.qccIndustry1 = 企查查行业门类;//企查查行业类别1
addInfo.qccIndustry2 = 企查查行业大类;//企查查行业类别2
addInfo.qccIndustry3 = 企查查行业中类;//企查查行业类别3
addInfo.qccIndustry4 = 企查查行业小类;//企查查行业类别4
addInfo.isFocus = map[统一社会信用代码] ? true : false;
let labelList = [];
if (map[统一社会信用代码]) labelList.push(ENTERPRISELABEL.重点企业);
if (gxMap[统一社会信用代码]) labelList.push(ENTERPRISELABEL.高新技术);
addInfo.labelList = labelList;
addList.push(addInfo);
}
await initEnterpriseBase(addList);
console.log("企业数据导入成功");
}
//导入政策数据
async function inputPolicyData() {
let {sheetMap} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", '产业政策.xlsx' ));
for (let sheetName in sheetMap) {
let dataList = sheetMap[sheetName];
let industry = sheetName;
let title = dataList[2][0];
let content = `${dataList[2][1]}\n`;
let 附件 = "";
for (let i=2; i < dataList.length; i++ ) {
content += `${dataList[i][2]}\n${dataList[i][3]}`;
if (dataList[i][4]) 附件 +=`${dataList[i][4]}\n`
}
content+=附件;
let item = {
pId:getRandomId(industry),
title,
content,//内容
source:"张江镇政府",//来源
type:POLICYTYPE.产业政策,
subsidyType:SUBSIDYTYPE.财政支持,//补贴类型
createTime:new Date("2025-01-01").valueOf(),//创建时间
endTime:new Date("2025-12-31").valueOf(),//失效时间
industry:INDUSTRY[industry],
label:[]
};
await policyData.addPolicy(item);
console.log();
}
let 戴帽政策 = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", '戴帽政策.xlsx' ));
for (let sheetName in 戴帽政策.sheetMap) {
let dataList = 戴帽政策.sheetMap[sheetName];
let labelName = sheetName;
let title = dataList[0][0];
let 开头 = "";
let 结尾 = "";
let content = ``;
for (let i=3; i < dataList.length; i++ ) {
if (dataList[i][0]) 开头 = `${dataList[i][0]}`;
if (dataList[i][3]) 结尾 = `${dataList[i][3]}`;
content += `${dataList[i][1]}\n`;
content += `${dataList[i][2]}\n`;
}
let label = [];
label.push(parseInt(`${ENTERPRISELABEL.专精特新}`), parseInt(`${ENTERPRISELABEL.高新技术}`), parseInt(`${ENTERPRISELABEL.企业研发机构}`) );
let item = {
pId:getRandomId(labelName),
title,
content:`${开头}\n${content}\n${结尾}`,//内容
source:"张江镇政府",//来源
type:POLICYTYPE.戴帽政策,
subsidyType:SUBSIDYTYPE.财政支持,//补贴类型
createTime:new Date("2025-01-01").valueOf(),//创建时间
endTime:new Date("2025-12-31").valueOf(),//失效时间
industry:0,
label:label
};
await policyData.addPolicy(item);
}
let item = {
pId:getRandomId("明珠计划1"),
title:"浦东新区“明珠计划”高峰人才项目",
content:`
资助对象及内容:
在浦东新区领衔重大创新项目,且发展方向处于浦东新区具有相对优势的世界前沿领域,取得国内外同行公认的突出成就,一般处于本领域全国前5名或国际前20名;或年富力强、活跃在创新创业一线,具有成长为世界级战略科学家的潜力。
申报条件:
个人申报条件:
1、国际性重大科学技术奖项获得者;
2、中国及其他重要创新国家科学技术奖项或学术荣誉获得者;
3、国家级、上海市级人才计划重点项目入选者或相当层面的高层次人才;
4、在世界知名大学、科研机构任职的科学家,或世界一流科技型企业的科学家、技术官等;
5、担任国家或上海市重大科技基础设施、重大平台机构、重大科研任务、大科学计划(工程)的领军科学家;
6、近5年内国家顶级期刊、顶级会议、顶级论坛等评出的杰出青年科技人才,包括但不限于:《麻省理工科技评论》年度35岁以下的全球最佳35名创新人才、世界经济论坛青年科学家、《科学》杂志年度青年科学家等;
7、其他对引领区高端产业发展或科技创新策源具有战略性、决定性和带动性作用的人才。
项目申报条件:
1、属产业项目的,2年内新增投资额原则上应不低于1亿元,项目技术能级属于国际领先或先进,项目投资强度及产出效益一般应高于同产业领域30%以上。对于技术创新度高、具有重大产业化潜力和前景的可适当放宽以上要求。
2、属创新项目的,原则上须为2年内新立项项目,项目的实施将对于浦东新区加强基础研究和应用基础研究,打好关键核心技术攻坚战,加速科技成果向现实生产力转化,提升产业链水平具有重大引领性、突破性、示范性作用。
支持措施:
(一)个人及团队资金资助
1、一次性资助:给予入选者每人200万元一次性资助。
2、贡献奖励:三年内给予入选者每年最高500万元奖励。
3、团队支持:入选者推荐的团队核心成员(须为同一用人单位的高级管理(技术)人员,且原则上不超过5人),可直接推荐认定为“明珠领军人才”(创新类)建议人选。
(二)事业发展支持
入选者领衔的重大产业项目或重大创新项目,按“一事一议”方式,根据不超过项目实际支出的50%给予最高1亿元补贴。
对入选者创办的企业(机构),建立机构补贴、科技企业与研发项目支持、知识产权资助、投融资支持、引进人才落户支持等政策服务绿色通道,经相关单位通过专项政策评审后,在同等条件下优先给予政策支持。
(三)生活保障
1、人才安居支持:为符合条件的入选者提供每月最高3万元的人才安居补贴或免费提供最高300平方米的区级人才公寓。
2、其他政策支持:入选者还可享受相应的人才落户、医疗保障、体检与疗休养等综合服务,以及浦东新区永久居留推荐“直通车”、长期工作许可及居留许可、进出境物品通关等便利化措施。
申报方式:
用人单位、行业主管部门、行业协会或专家可直接向区人才工作局提名推荐。
`,//内容
source:"张江镇政府",//来源
type:POLICYTYPE.人才政策,
subsidyType:SUBSIDYTYPE.财政支持,//补贴类型
createTime:new Date("2025-01-01").valueOf(),//创建时间
endTime:new Date("2025-12-31").valueOf(),//失效时间
industry:0,
label:[]
};
await policyData.addPolicy(item);
console.log("政策数据同步完成");
}
//获取单个excel文件的数据
function getExcel(filePath) {
const workSheetsFromFile = xlsx.parse(filePath);
let sheetMap = {};
let sheetList = [];
for (let i = 0; i < workSheetsFromFile.length; i++) {
let sheetInfo = workSheetsFromFile[i];
sheetMap[sheetInfo.name] = sheetInfo.data;
sheetList.push(sheetInfo);
}
return {sheetMap, sheetList}
}
function cs(match:string, check:string) {
return match.indexOf(check) > -1;
}
function 多字段判断(checkStr, ...param) {
let isCY = false;
for (let i = 0; i < param.length; i++) {
if (param[i].indexOf(checkStr) > -1) isCY = true
}
return isCY;
}
function 二级筛选_实缴资本(实际缴资本) {
return ( parseInt(实际缴资本) > 100)
}
function 匹配企业类型(类型) {
if (cs(类型, "律师") || cs(类型, "律所") || cs(类型, "其他") || cs(类型, "基金会") || cs(类型, "集体") || cs(类型, "联营") || cs(类型, "农民专业合作社") || cs(类型, "普通合伙企业") || cs(类型, "常驻代表机构") ) {
return ENTERPRISETYPE.其他;
}
if (cs(类型, "港澳台") || cs(类型, "台港澳") || cs(类型, "港台奥") || cs(类型, "台奥港") || cs(类型, "澳台港") || cs(类型, "澳港台") ) {
return ENTERPRISETYPE.港澳台投资企业;
}
if (cs(类型, "外商投资") || cs(类型, "外商") || cs(类型, "中外") || cs(类型, "外国") ) {
return ENTERPRISETYPE.外商投资企业;
}
if (cs(类型, "机关") ) {
return ENTERPRISETYPE.机关单位;
}
if (cs(类型, "民办非企业单位")) {
return ENTERPRISETYPE.民办非企业单位;
}
if (cs(类型, "国有") || cs(类型, "全民所有制") ) {
return ENTERPRISETYPE.国有企业;
}
if (cs(类型, "社会") ) {
return ENTERPRISETYPE.社会组织;
}
if (cs(类型, "事业单位") ) {
return ENTERPRISETYPE.事业单位;
}
return ENTERPRISETYPE.民营企业
}
async function 企业筛选() {
let 企业名单 = onceSheetBecomeOfblockData('标记全部企业.xlsx', "同步企业名单");
let dataList = 企业名单[0].blockData;
let matchList = [];
let 店铺 = [];
let 饭店 = [];
let 吊销 = [];//吊销企业
let 药房 = [];
let 棋牌 = [];
let 旅馆 = [];
let 人力资源 = [];
let 养老院 = [];
let 物业管理 = [];
let 房地产开发租赁销售 = [];
let 学校 = [];
let map = {};
dataList.forEach((subList, index) => {
if (!index) return;
let 国标大类 = subList[23];
let 国标一类 = subList[24];
let 国标二类 = subList[25];
let 企查查大类 = subList[27];
let 企查查一类 = subList[28];
let 企查查二类 = subList[29];
let 经营状态 = subList[2];
let 类型 = subList[16];
let 名称 = subList[0];
if(!经营状态) return;
let 企业机构类型 = 匹配企业类型(类型);
if (!subList[2] || cs(经营状态, "注销") || cs(经营状态, "吊销") ) {
吊销.push(subList);
return;
}
if (!map[类型]) map[类型] =0;
map[类型] += 1;
//去除个体户
if (cs(类型, "个体")) {
if (subList[0].match(/^.*店$/) || cs(名称, "发廊") || ( cs(名称, "五金") && ( cs(国标大类, "零售") ||cs(国标大类, "批发") ) ) ) {
店铺.push(subList);
return;
} else if (cs(名称, "药房") || cs(名称, "药店")) {
药房.push(subList);
return;
} else if ( cs(名称, "棋牌") ) {
棋牌.push(subList);
return;
} else if ( cs(名称, "旅馆") || cs(名称, "宾馆") ) {
旅馆.push(subList);
} else if ( cs(名称, "餐饮") || cs(名称, "食品") || cs(名称, "咖啡") ) {
if (cs(国标大类, "零售")) 店铺.push(subList);
else 饭店.push(subList);
} else {
店铺.push(subList);
}
return;
}
//名字筛选
if ( cs(名称, "发廊") || cs(名称, "美容") ) {
店铺.push(subList);
return;
}
if ( cs(名称, "五金") && ( cs(国标大类, "零售") ||cs(国标大类, "批发")) ) {
店铺.push(subList);
return;
}
if (cs(名称, "药房") || cs(名称, "药店")) {
药房.push(subList);
return;
}
if ( cs(名称, "棋牌") ) {
棋牌.push(subList);
return;
}
if ( cs(名称, "旅馆") || cs(名称, "宾馆") ) {
旅馆.push(subList);
return;
}
if ( cs(名称, "幼儿园") || cs(名称, "中学") || cs(名称, "小学") || cs(名称, "高中") || cs(名称, "学校") ) {
学校.push(subList);
return;
}
//行业类别
if ( 多字段判断("零售", 国标大类, 国标一类, 国标二类, 企查查大类, 企查查一类, 企查查二类 ) ) {
店铺.push(subList);
return;
}
if ( 多字段判断("摄影", 国标大类, 国标一类, 国标二类, 企查查大类, 企查查一类, 企查查二类 ) ) {
店铺.push(subList);
return;
}
if ( 多字段判断("餐饮", 国标二类, 企查查二类 ) ) {
饭店.push(subList);
return;
}
if (多字段判断("住宿", 国标二类, 企查查二类 )) {
if (cs(名称, "养老")) 养老院.push(subList);
else 旅馆.push(subList);
return;
}
if ( 多字段判断("人力", 国标大类, 国标一类, 国标二类, 企查查大类, 企查查一类, 企查查二类 )) {
人力资源.push(subList);
return;
}
if ( 多字段判断("房地", 国标大类, 国标一类, 国标二类, 企查查大类, 企查查一类, 企查查二类 )) {
if ( 多字段判断("物业", 国标二类, 企查查二类 )) 物业管理.push(subList);
else 房地产开发租赁销售.push(subList);
return;
}
matchList.push(subList);
});
let 第二轮筛选 = [];
let 国标去重 = {};
let 国标二类去重 = {};
let 企查查去重 = {};
let 企查查二类去重 = {};
matchList.forEach(subList => {
let 国标大类 = subList[23];
let 国标一类 = subList[24];
let 国标二类 = subList[25];
let 企查查大类 = subList[27];
let 企查查一类 = subList[28];
let 企查查二类 = subList[29];
国标去重[国标一类] = 1;
if (国标一类 == "医药制造业" || 企查查大类 == "医药生物") {
第二轮筛选.push(subList);
}
企查查去重[企查查大类] = 1;
});
let data = [
{
name:"sheet1",
data:第二轮筛选
}
];
let buff = xlsx.build(data);
fs.writeFileSync(path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", '生物医药.xlsx' ), buff);
console.log();
}
export async function 雨艺() {
let 企业名单 = onceSheetBecomeOfblockData('在孵企业导入1210.xlsx', "Sheet1");
let dataList = 企业名单[0].blockData;
let titleList = ["企业名称", "注册时间", "注册地址", "注册资本", "实缴资本", "上市类型", "投资人", "联系方式", "行业分类", "标签", "软著", "风险提示", "专利数", "失信核查", "资质数量", "融资信息"];
let excelList = [titleList];
for (let i =1; i < dataList.length; i++) {
let uscc = dataList[i][6];
let res = await 企查查数据集(uscc);
excelList.push(res);
console.log(i);
}
let data = [
{
name:"sheet1",
data:excelList
}
];
let buff = xlsx.build(data);
fs.writeFileSync(path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", '在孵企业excel.xlsx' ), buff);
console.log();
}
async function 企查查数据集(uscc) {
const TimeSpan = Math.round(new Date().valueOf()/ 1000);
let header = {
Token:md5(`${systemConfig.qccKey}${TimeSpan}${systemConfig.qccSecretKey}`).toUpperCase(),
TimeSpan
};
let query = {
key:systemConfig.qccKey,
searchKey:uscc,
// keyNo:"云合智网(上海)技术有限公司"
};
let 工商信息:any = await get('https://api.qichacha.com/ECIInfoVerify/GetInfo', query, header);//获取工商信息
let keyList = ["Name", "StartDate", "Address", "RegistCapi", "RecCap", "StockType"];
let dataList = [];
keyList.forEach(str => {
dataList.push(工商信息[str] || "-");
});
let PartnersStr = "";//投资人
if (工商信息.Partners) {
工商信息.Partners.forEach(item => {
PartnersStr += `${item.StockName}:${item.StockPercent};`
});
}
dataList.push(PartnersStr);
dataList.push(工商信息.ContactInfo.PhoneNumber||"-");
dataList.push(工商信息.Industry.Industry||"-");
//联系信息
let TagListStr = "";//企业标签
if (工商信息.TagList) {
工商信息.TagList.forEach(item => {
TagListStr += `${item.Name};`
});
}
dataList.push(TagListStr);
let 著作权软著:any = await get('https://api.qichacha.com/CopyRight/SearchCopyRight', query, header);
let 著作权软著Str = "";
if(Object.keys(著作权软著).length) {
著作权软著.forEach(item => {
著作权软著Str += item.Name;
});
}
dataList.push(著作权软著Str);
let 准入尽职调查:any = await get('https://api.qichacha.com/AcctScan/GetInfo', query, header);
let 风险 = "";
if (准入尽职调查.Data) {
准入尽职调查.Data.forEach(item => {
风险 += item.Title;
});
}
dataList.push(风险);
let 专利查询:any = await get('https://api.qichacha.com/PatentV4/Search', query, header);
let 专利查询Str = 0;
if (Object.keys(专利查询).length) {
专利查询.forEach(item=> {
专利查询Str += item.items.length;
})
}
dataList.push(专利查询Str);
let 失信核查:any = await get('https://api.qichacha.com/ShixinCheck/GetList', query, header);
let 失信核查Str = 失信核查.VerifyResult ?? "-";
dataList.push(失信核查Str);
let 资质证书:any = await get('https://api.qichacha.com/ECICertification/SearchCertification', query, header);
let 资质证书Str = 0;
if (Object.keys(资质证书).length) {
资质证书Str = 资质证书.length;
}
dataList.push(资质证书Str);
let 融资信息:any = await get('https://api.qichacha.com/CompanyFinancingSearch/GetList', query, header);
let 融资信息Str = "";
if (融资信息.Data) {
融资信息.Data.forEach(item => {
融资信息Str += `${item.Amount};`
})
}
dataList.push(融资信息Str);
return dataList;
}
\ No newline at end of file
import * as request from 'request';
import { BizError } from '../../util/bizError';
export function getQcc(url:string, query?, headers?) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
return new Promise((resolve, reject)=>{
let paramater:any = { url, json:true };
if (query) paramater.qs = query;
if (headers) paramater.headers = headers;
request.get(paramater, function (err, r, body) {
if (err) {
return reject(err);
}
if (body) {
if (body.Status == 200) return resolve(body.Result);
else if (body.Status == 201) return resolve({});
}
console.log(body.Message || body);
return resolve({});
});
})
}
\ No newline at end of file
import { COMPREHENSIVE, ENTERPRISELABEL, ENTERPRISESIZE, ENTERPRISETYPE, INDUSTRY, MANUFACTURING, MEDICALSUB, NASHUIRENZIZHI, OTHERINDUSTRY, RAS } from "../../config/enum";
import { onceSheetBecomeOfblockData } from "../../util/analysisExcel";
const md5 = require("md5");
import moment = require("moment");
import { gaoXinEnterpriseMap, initQueue, xjrEnterpriseMap, xjrpyEnterpriseMap } from "../labelEnterpriseList";
import * as enterpriseData from "../../data/enterprise/enterprise";
import { createManyUser, createUser } from "../../data/user";
import { getPwdMd5 } from "../../tools/system";
const xlsx = require('node-xlsx');
const path = require('path');
const fs = require('fs');
/**=========================================================工具 */
function checkInmatch(match:string, check:string) {
return match.indexOf(check) > -1;
}
/**
* paramInCheckStr
* 用法 判断 checkStr 中是否含有 param中的任意一个
* @param checkStr 被判断的字符串
* @param param 目标字符串
* @returns
*/
function paramInCheckStr(checkStr, ...param) {
let isCY = false;
for (let i = 0; i < param.length; i++) {
if (param[i].indexOf(checkStr) > -1) isCY = true
}
return isCY;
}
/**
* 转换企业类型
* @param enterpriseType
* @returns
*/
function getEnterpriseType(enterpriseType) {
if (checkInmatch(enterpriseType, "律师") || checkInmatch(enterpriseType, "律所") || checkInmatch(enterpriseType, "其他") || checkInmatch(enterpriseType, "基金会") || checkInmatch(enterpriseType, "集体") || checkInmatch(enterpriseType, "联营") || checkInmatch(enterpriseType, "农民专业合作社") || checkInmatch(enterpriseType, "普通合伙企业") || checkInmatch(enterpriseType, "常驻代表机构") ) {
return ENTERPRISETYPE.其他;
}
if (checkInmatch(enterpriseType, "港澳台") || checkInmatch(enterpriseType, "台港澳") || checkInmatch(enterpriseType, "港台奥") || checkInmatch(enterpriseType, "台奥港") || checkInmatch(enterpriseType, "澳台港") || checkInmatch(enterpriseType, "澳港台") ) {
return ENTERPRISETYPE.港澳台投资企业;
}
if (checkInmatch(enterpriseType, "外商投资") || checkInmatch(enterpriseType, "外商") || checkInmatch(enterpriseType, "中外") || checkInmatch(enterpriseType, "外国") ) {
return ENTERPRISETYPE.外商投资企业;
}
if (checkInmatch(enterpriseType, "机关") ) {
return ENTERPRISETYPE.机关单位;
}
if (checkInmatch(enterpriseType, "民办非企业单位")) {
return ENTERPRISETYPE.民办非企业单位;
}
if (checkInmatch(enterpriseType, "国有") || checkInmatch(enterpriseType, "全民所有制") ) {
return ENTERPRISETYPE.国有企业;
}
if (checkInmatch(enterpriseType, "社会") ) {
return ENTERPRISETYPE.社会组织;
}
if (checkInmatch(enterpriseType, "事业单位") ) {
return ENTERPRISETYPE.事业单位;
}
return ENTERPRISETYPE.民营企业
}
function analysisSubListData(subList) {
let 名称 = subList[0];
let 系统匹配企业名称 = subList[1];
let 经营状态 = subList[2];
let 法定代表人 = subList[3];
let 注册资本 = subList[4];
let 实缴资本 = subList[5];
let 成立日期 = subList[6];
let 统一社会信用代码 = subList[7];
let 企业地址 = subList[8];
let 所属省份 = subList[9];
let 所属城市 = subList[10];
let 所属区县 = subList[11];
let 电话 = subList[12];
let 更多电话 = subList[13];
let 邮箱 = subList[14];
let 更多邮箱 = subList[15];
let 企业类型 = subList[16];
let 纳税人识别号 = subList[17];
let 注册号 = subList[18];
let 组织机构代码 = subList[19];
let 参保人数 = subList[20];
let 参保人数所属年报 = subList[21];
let 营业期限 = subList[22];
let 国标大类 = subList[23];
let 国标一类 = subList[24];
let 国标二类 = subList[25];
let 国标行业小类 = subList[26];
let 企查查大类 = subList[27];
let 企查查一类 = subList[28];
let 企查查二类 = subList[29];
let 企查查行业小类 = subList[30];
let 企业规模 = subList[31];
let 曾用名 = subList[32];
let 英文名 = subList[33];
let 官网 = subList[34];
let 通信地址 = subList[35];
let 企业简介 = subList[36];
let 经营范围 = subList[37];
let 登记机关 = subList[38];
let 纳税人资质 = subList[39];
let 最新年报年份 = subList[40];
if ( 系统匹配企业名称== "未匹配到相关企业") {
return {isFalse:true};
}
let addInfo:any = {
uscc:统一社会信用代码,
name:系统匹配企业名称,
labelList : []
};
let ras = RAS.续存;
if (!经营状态 || checkInmatch(经营状态, "注销") || checkInmatch(经营状态, "吊销") ) {
//企业注销 注销将企业改成迁出
let 等级状态数组 = 经营状态.split("(");
if (等级状态数组[1]) {
addInfo.logOffMS = new Date(等级状态数组[1].replace(")", "")).valueOf();
}
ras = RAS.注销;
addInfo.labelList.push(ENTERPRISELABEL.已注销);
}
let 同步后企业类型 = getEnterpriseType(企业类型);
let {industry, subIndustry} = getEnterpriseIndustry(名称, 企业类型, 国标大类, 国标一类, 国标二类, 企查查大类, 企查查一类, 企查查二类, 经营范围)
/**核对基础信息,注册时间,注册地址,经营地址等 */
if (成立日期 != "-") {
addInfo.logonTime = new Date(成立日期).valueOf();
}
addInfo.logonAddressList = [所属省份, 所属城市, 所属区县, 企业地址];
addInfo.logonAddress = 企业地址;
addInfo.mainBusiness = 经营范围;
/** 增补字段 */
addInfo.RAS = ras;//登记状态
addInfo.legalPerson = 法定代表人;//法人
addInfo.zhuceziben = 注册资本;//注册资本
addInfo.shijiaoziben = 实缴资本;//实缴资本
addInfo.dianHua = 电话;//电话
addInfo.gengDuoDianHua = 更多电话;//更多电话
addInfo.mail = 邮箱;//邮箱
addInfo.moreMail = 更多邮箱;//更多邮箱
addInfo.enterpriseType = 同步后企业类型;//企业(机构)类型
addInfo.zhuCeHao = 注册号;//注册号
addInfo.zuZhiJiGouDaiMa = 组织机构代码;//组织机构代码
addInfo.canBaoRenShu = 参保人数 == "-" || !参保人数 ? 0: parseInt(参保人数); //参保人数
addInfo.canBaoRenShuNianBao = 参保人数所属年报 == "-" || !参保人数所属年报 ? 0: parseInt(参保人数所属年报); //参保人数所属年报
addInfo.yingYeQiXian = 营业期限;//营业期限
switch (企业规模) {
case 'XS(微型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.微型;break;
case 'S(小型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.小型;break;
case 'M(中型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.中型;break;
case 'L(大型)': addInfo.qiYeGuiMo = ENTERPRISESIZE.大型;break;
default: addInfo.qiYeGuiMo = ENTERPRISESIZE.未知;break;
}
addInfo.guanWang = 官网;//官网
addInfo.tongXinDiZhi = 通信地址;//通信地址
addInfo.jianJie = 企业简介;//企业简介
addInfo.dengJiJiGuan = 登记机关;//登记机关
switch (纳税人资质) {
case 'XS(微型)': addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.一般纳税人;break;
case '增值税一般纳税人': addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.增值税一般纳税人;break;
case 'M(中型)': addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.小规模纳税人;break;
default: addInfo.naShuiRenZiZhi = NASHUIRENZIZHI.未知;break;
}
addInfo.zuiXinNianBaoNianFen = isNaN(最新年报年份) ? 0: parseInt(最新年报年份); //最新年报年份
addInfo.qccIndustry1 = 企查查大类;//企查查行业类别1
addInfo.qccIndustry2 = 企查查一类;//企查查行业类别2
addInfo.qccIndustry3 = 企查查二类;//企查查行业类别3
addInfo.qccIndustry4 = 企查查行业小类;//企查查行业类别4
if (gaoXinEnterpriseMap[名称]) {
addInfo.labelList.push(ENTERPRISELABEL.高新技术);
}
if (xjrEnterpriseMap[名称]) {
addInfo.labelList.push(ENTERPRISELABEL.科技小巨人);
}
if (xjrpyEnterpriseMap[名称]) {
addInfo.labelList.push(ENTERPRISELABEL.科技小巨人培育);
}
addInfo.privateIndustry = industry;
addInfo.privateSubIndustry = subIndustry;
addInfo.isFocus = false;
return addInfo;
}
/**
* 获取企业领域
* @param 名称
* @param 企业类型
* @param 国标大类
* @param 国标一类
* @param 国标二类
* @param 企查查大类
* @param 企查查一类
* @param 企查查二类
* @param 主营业务
* @returns
*/
function getEnterpriseIndustry(名称, 企业类型, 国标大类, 国标一类, 国标二类, 企查查大类, 企查查一类, 企查查二类, 主营业务) {
//去除个体户
if (checkInmatch(企业类型, "个体")) {
if (名称.match(/^.*店$/) || checkInmatch(名称, "发廊") || ( checkInmatch(名称, "五金") && ( checkInmatch(国标大类, "零售") ||checkInmatch(国标大类, "批发") ) ) ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.店铺};
} else if (checkInmatch(名称, "药房") || checkInmatch(名称, "药店")) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.药房};
} else if ( checkInmatch(名称, "棋牌") ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.棋牌室};
} else if ( checkInmatch(名称, "旅馆") || checkInmatch(名称, "宾馆") ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.宾馆酒店};
} else if ( checkInmatch(名称, "餐饮") || checkInmatch(名称, "食品") || checkInmatch(名称, "咖啡") ) {
if (checkInmatch(国标大类, "零售")) return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.店铺};
else return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.饭店};
} return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.店铺};
}
//名字筛选
if ( checkInmatch(名称, "发廊") || checkInmatch(名称, "美容") ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.店铺};
}
if ( checkInmatch(名称, "五金") && ( checkInmatch(国标大类, "零售") ||checkInmatch(国标大类, "批发")) ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.店铺};
}
if (checkInmatch(名称, "药房") || checkInmatch(名称, "药店")) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.药房};
}
if ( checkInmatch(名称, "棋牌") ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.棋牌室};
}
if ( checkInmatch(名称, "旅馆") || checkInmatch(名称, "宾馆") ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.宾馆酒店};
}
if ( checkInmatch(名称, "幼儿园") || checkInmatch(名称, "中学") || checkInmatch(名称, "小学") || checkInmatch(名称, "高中") || checkInmatch(名称, "学校") ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.学校};
}
if ( checkInmatch(名称, "劳务") ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.人力资源};
}
if ( checkInmatch(名称, "餐饮") ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.饭店};
}
if ( checkInmatch(名称, "口腔") || checkInmatch(名称, "诊所") || checkInmatch(名称, "门诊") ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.医疗机构};
}
if ( checkInmatch(名称, "健康管理") || checkInmatch(名称, "健康咨询") || checkInmatch(名称, "健康信息") || checkInmatch(名称, "健康服务") || checkInmatch(名称, "健身") ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.其他服务业};
}
if ( checkInmatch(名称, "修理") || checkInmatch(名称, "汽车维修") || checkInmatch(名称, "汽车修理")) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.修理厂};
}
//行业类别
if ( paramInCheckStr("零售", 国标大类, 国标一类, 国标二类, 企查查大类, 企查查一类, 企查查二类 ) ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.店铺};
}
if ( paramInCheckStr("摄影", 国标大类, 国标一类, 国标二类, 企查查大类, 企查查一类, 企查查二类 ) ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.店铺};
}
if ( paramInCheckStr("餐饮", 国标二类, 企查查二类 ) ) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.饭店};
}
if (paramInCheckStr("住宿", 国标二类, 企查查二类 )) {
if (checkInmatch(名称, "养老")) return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.养老院};
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.宾馆酒店};
}
if ( paramInCheckStr("人力", 国标大类, 国标一类, 国标二类, 企查查大类, 企查查一类, 企查查二类 )) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.人力资源};
}
if ( paramInCheckStr("房地", 国标大类, 国标一类, 国标二类, 企查查大类, 企查查一类, 企查查二类 )) {
if ( paramInCheckStr("物业", 国标二类, 企查查二类 )) return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.物业管理};
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.房地产开发租赁销售};
}
if ( paramInCheckStr("社会服务", 企查查大类 )) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.其他服务业};
}
if ( paramInCheckStr("食品饮料", 企查查大类 )) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.食品加工};
}
if ( paramInCheckStr("公共事业", 企查查大类 )) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.公共事业};
}
if (paramInCheckStr("汽车服务", 企查查一类 )) {
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.汽车服务};
}
if (paramInCheckStr("室内娱乐活动", 国标二类 )) {
return {industry:INDUSTRY.其他, subIndustry:OTHERINDUSTRY.其他服务业};
}
//生物医药
if ((国标一类 == "医药制造业" && 企查查大类 == "医药生物") || checkInmatch(名称, "生物") || checkInmatch(名称, "药业") || checkInmatch(名称, "医药") || checkInmatch(名称, "制药")) {
return {industry:INDUSTRY.生物医药, subIndustry:INDUSTRY.生物医药};
}
if ( checkInmatch(名称, "医疗科技") || checkInmatch(名称, "医疗器械") || checkInmatch(名称, "医疗技术") || checkInmatch(名称, "医学技术") ) {
return {industry:INDUSTRY.医疗科技, subIndustry:INDUSTRY.医疗科技};
}
if( 企查查大类 == "信息技术" || 国标大类 == "信息传输、软件和信息技术服务业" ) {
if (主营业务.indexOf("集成电路") > -1) return {industry:INDUSTRY.集成电路, subIndustry:INDUSTRY.集成电路};
if (企查查二类 == "人工智能") return {industry:INDUSTRY.人工智能, subIndustry:INDUSTRY.人工智能};
return {industry:INDUSTRY.软件和信息服务业, subIndustry:INDUSTRY.软件和信息服务业};
}
if( checkInmatch(名称, "新材料") ) {
return {industry:INDUSTRY.新材料, subIndustry:INDUSTRY.新材料};
}
if ( paramInCheckStr("轻工制造", 企查查大类 )) {
return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.轻工制造};
}
if (paramInCheckStr("汽车零部件制造", 企查查一类 ) || paramInCheckStr("汽车整车制造", 企查查一类 ) ) {
return {industry:INDUSTRY.汽车产业, subIndustry:INDUSTRY.汽车产业};
}
if(paramInCheckStr("医药制造", 国标一类 ) || paramInCheckStr("医药生物", 企查查大类 ) ) {
if (paramInCheckStr("医药商业", 企查查一类 )) return {industry:INDUSTRY.生物医药, subIndustry:MEDICALSUB.医药商业};
else if (paramInCheckStr("医疗器械制造", 企查查一类 )) return {industry:INDUSTRY.生物医药, subIndustry:MEDICALSUB.医疗器械制造};
else if (paramInCheckStr("医疗服务", 企查查一类 )) return {industry:INDUSTRY.生物医药, subIndustry:MEDICALSUB.医疗服务};
return {industry:INDUSTRY.生物医药, subIndustry:MEDICALSUB.其他生物医药};
}
if (paramInCheckStr("制造", 企查查一类 ) || paramInCheckStr("制造", 国标大类 ) ) {
if ( paramInCheckStr("轻工制造", 企查查一类 )) return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.轻工制造};
if ( paramInCheckStr("发电设备制造", 企查查一类 )) return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.发电设备制造};
if ( paramInCheckStr("电网设备制造", 企查查一类 )) return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.电网设备制造};
if ( paramInCheckStr("船舶制造", 企查查一类 )) return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.船舶制造};
if ( paramInCheckStr("化学制造", 企查查一类 )) return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.化学制造};
if ( paramInCheckStr("环保设备制造", 企查查一类 )) return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.环保设备制造};
if ( paramInCheckStr("橡胶制品制造", 企查查一类 )) return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.橡胶制品制造};
if ( paramInCheckStr("通用设备制造", 企查查一类 )) return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.通用设备制造};
if ( paramInCheckStr("专用设备制造", 企查查一类 )) return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.专用设备制造};
return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.其他制造};
}
if(paramInCheckStr("航空航天", 企查查一类 ) || paramInCheckStr("航空运输业", 企查查一类 ) ) {
return {industry:INDUSTRY.航空航天, subIndustry:INDUSTRY.航空航天};
}
if(paramInCheckStr("橡胶和塑料制品业", 企查查一类 ) ) {
return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.橡胶和塑料制品业};
}
if( paramInCheckStr("新闻出版", 企查查一类 ) || paramInCheckStr("文化娱乐", 企查查一类 ) || paramInCheckStr("广播电视", 企查查一类 ) || paramInCheckStr("其他文化传媒", 企查查一类 ) ) {
return {industry:INDUSTRY.文化创意, subIndustry:INDUSTRY.文化创意};
}
if (paramInCheckStr("物流及仓储业", 企查查一类 )) {
return {industry:INDUSTRY.物流及仓储, subIndustry:INDUSTRY.物流及仓储};
}
if (paramInCheckStr("水上运输业", 企查查一类 )) {
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.水上运输};
}
if (paramInCheckStr("道路运输业", 企查查一类 )) {
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.道路运输};
}
if (paramInCheckStr("其他交通运输业", 企查查一类 )) {
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.其他交通运输};
}
if (paramInCheckStr("水务业", 企查查一类 ) || paramInCheckStr("林业", 企查查一类 ) || paramInCheckStr("农业", 企查查一类 ) || paramInCheckStr("其他农林牧渔业", 企查查一类 ) || paramInCheckStr("渔业", 企查查一类 ) ) {
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.农林牧渔业};
}
if (paramInCheckStr("环境保护服务", 企查查一类 )) {
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.环境保护服务};
}
if (paramInCheckStr("专业服务业", 企查查一类 )) {
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.专业服务业};
}
if (paramInCheckStr("建筑工程", 企查查一类 ) || paramInCheckStr("建筑设计与服务", 企查查一类 )) {
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.建筑工程};
}
if (paramInCheckStr("电力、热力生产及供应业", 企查查一类 ) || paramInCheckStr("燃气生产及供应业", 企查查一类 )) {
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.能源};
}
if (paramInCheckStr("科学研究和技术服务业", 企查查一类 )) {
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.科学研究和技术服务业};
}
if (paramInCheckStr("其他金融业", 企查查一类 ) || paramInCheckStr("资本市场服务", 企查查一类 )) {
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.金融业};
}
if (paramInCheckStr("建筑材料", 企查查一类)) {
return {industry:INDUSTRY.制造业, subIndustry:MANUFACTURING.建筑材料制造};
}
return {industry:INDUSTRY.综合, subIndustry:COMPREHENSIVE.综合其他};
}
/**------------------------------------------------------------ */
export async function initEnterpriseData() {
// await initHuGuanData();//初始化户管企业
// await guishangEnterprise();//初始化规上企业
// await touchuEnterprise();//投促重点名单
// await initLabel();//初始化标签
// return
await initUser();
}
/**
* 初始化账号
*/
async function initUser() {
let tczxAdd2List = [
{userType:1, department:"投促中心", name:"伍宏晶", loginId:"13621864990", userId:"tczx_18621551552", pwd:getPwdMd5("18621551552", md5("551552")), phone:"18621551552", },
];
await createManyUser(tczxAdd2List);
return
let adminList = [
{userType:1, department:"供应商", name:"李欣鸣", loginId:"18711017326", userId:"admin_18711017326", pwd:getPwdMd5("18711017326", md5("123456")), phone:"18711017326"},
{userType:1, department:"供应商", name:"陈知行", loginId:"18120935727", userId:"admin_18120935727", pwd:getPwdMd5("18120935727", md5("123456")), phone:"18120935727"},
];
await createManyUser(adminList);
let jfbAdList = [
{userType:1, department:"张江镇经发办", name:"沈璐", loginId:"13671955166", userId:"zjzjfb_13671955166", pwd:getPwdMd5("13671955166", md5("955166")), phone:"13671955166"},
{userType:1, department:"张江镇经发办", name:"俞彬精", loginId:"18317133631", userId:"zjzjfb_18317133631", pwd:getPwdMd5("18317133631", md5("133631")), phone:"18317133631"},
{userType:1, department:"张江镇经发办", name:"李嘉琪", loginId:"13671876391", userId:"zjzjfb_13671876391", pwd:getPwdMd5("13671876391", md5("876391")), phone:"13671876391"},
{userType:1, department:"张江镇经发办", name:"曹轶琳", loginId:"13601897943", userId:"zjzjfb_13601897943", pwd:getPwdMd5("13601897943", md5("897943")), phone:"13601897943"},
{userType:1, department:"张江镇经发办", name:"吕史豪", loginId:"18721443512", userId:"zjzjfb_18721443512", pwd:getPwdMd5("18721443512", md5("443512")), phone:"18721443512"},
];
await createManyUser(jfbAdList);
let tczxAddList = [
{userType:1, department:"投促中心", name:"丁英", loginId:"13621864990", userId:"tczx_13621864990", pwd:getPwdMd5("13621864990", md5("864990")), phone:"13621864990", },
{userType:1, department:"投促中心", name:"李飞", loginId:"15921130885", userId:"tczx_15921130885", pwd:getPwdMd5("15921130885", md5("130885")), phone:"15921130885", },
{userType:1, department:"投促中心", name:"曹赟", loginId:"15800582997", userId:"tczx_15800582997", pwd:getPwdMd5("15800582997", md5("582997")), phone:"15800582997", },
{userType:1, department:"投促中心", name:"陈茵修", loginId:"13816397971", userId:"tczx_13816397971", pwd:getPwdMd5("13816397971", md5("397971")), phone:"13816397971", },
{userType:1, department:"投促中心", name:"高亮月", loginId:"18017027019", userId:"tczx_18017027019", pwd:getPwdMd5("18017027019", md5("027019")), phone:"18017027019", },
{userType:1, department:"投促中心", name:"徐燕萍", loginId:"13501840389", userId:"tczx_13501840389", pwd:getPwdMd5("13501840389", md5("840389")), phone:"13501840389", },
{userType:1, department:"投促中心", name:"奚紫羿", loginId:"18616671556", userId:"tczx_18616671556", pwd:getPwdMd5("18616671556", md5("671556")), phone:"18616671556", },
{userType:1, department:"投促中心", name:"陈逸欣", loginId:"18321785114", userId:"tczx_18321785114", pwd:getPwdMd5("18321785114", md5("785114")), phone:"18321785114", },
{userType:1, department:"投促中心", name:"贾思奇", loginId:"15221938430", userId:"tczx_15221938430", pwd:getPwdMd5("15221938430", md5("938430")), phone:"15221938430", }
];
await createManyUser(tczxAddList);
}
//初始化户管企业
async function initHuGuanData() {
let 企业名单 = onceSheetBecomeOfblockData('全部企业.xlsx', "已匹配户管企业");
let dataList = 企业名单[0].blockData;
let enterpriseList = [];
dataList.forEach((subList, index) => {
if (!index) return;
let addInfo = analysisSubListData(subList);
if (addInfo.isFalse) return;
addInfo.labelList.push(ENTERPRISELABEL.户管企业);
enterpriseList.push(addInfo);
});
await enterpriseData.initEnterpriseBase(enterpriseList);
console.log("企业数据导入成功");
}
/**
* 初始化规上企业
*/
async function guishangEnterprise() {
let 企业名单 = onceSheetBecomeOfblockData('规上企业.xlsx', "sheet1");
let dataList = 企业名单[0].blockData;
let enterpriseList = [];
for (let i = 0; i < dataList.length; i++) {
let subList = dataList[i];
if (!i) continue;
let addInfo = analysisSubListData(subList);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(addInfo.uscc);
if (enterpriseInfo && enterpriseInfo.uscc) {
enterpriseInfo.labelList.push(ENTERPRISELABEL.规上企业);
continue;
}
addInfo.labelList.push(ENTERPRISELABEL.规上企业);
enterpriseList.push(addInfo);
};
await enterpriseData.initEnterpriseBase(enterpriseList);
console.log("规上企业数据导入成功");
}
/**
* 投促重点名单
*/
async function touchuEnterprise() {
let 企业名单 = onceSheetBecomeOfblockData('投促重点.xlsx', "sheet1");
let dataList = 企业名单[0].blockData;
let enterpriseList = [];
for (let i=0; i < dataList.length; i++) {
if (!i) continue;
let subList = dataList[i];
let addInfo = analysisSubListData(subList);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(addInfo.uscc);
if (enterpriseInfo && enterpriseInfo.uscc) {
enterpriseInfo.labelList.push(ENTERPRISELABEL.投促重点);
continue;
}
addInfo.labelList.push(ENTERPRISELABEL.投促重点);
enterpriseList.push(addInfo);
}
await enterpriseData.initEnterpriseBase(enterpriseList);
console.log("投促重点企业导入成功");
}
/**
* 初始化标签
*/
async function initLabel() {
let zdqy = onceSheetBecomeOfblockData('重点企业.xlsx', "Sheet1");
let zdqyDataList = zdqy[0].blockData;
let focusNullist = [];
for (let i = 1; i < zdqyDataList.length; i++) {
let uscc = zdqyDataList[i][0];
let info = await enterpriseData.findEnterpriseByUscc(uscc);
if (!info || !info.uscc) {
console.log(uscc, "重点企业 找不到名单");
focusNullist.push(uscc);
continue;
}
if (info.labelList.indexOf(ENTERPRISELABEL.重点企业) == -1) {
info.labelList.push(ENTERPRISELABEL.重点企业);
info.isFocus = true;
await info.save();
}
}
let zjtxNullList = [];
let 企业名单 = onceSheetBecomeOfblockData('专精特新名单.xlsx', "Sheet1");
let dataList = 企业名单[0].blockData;
for (let i= 1; i < dataList.length; i++) {
let subList = dataList[i];
let info = await enterpriseData.findEnterpriseByName(subList[1]);
if (!info || !info.uscc) {
console.log(subList[1], "专精特新名单 找不到名单");
zjtxNullList.push(subList[1]);
continue;
}
if (info.labelList.indexOf(ENTERPRISELABEL.专精特新) == -1) {
info.labelList.push(ENTERPRISELABEL.专精特新);
await info.save();
}
}
let wzNullList = [];
let 外资企业名单 = onceSheetBecomeOfblockData('外资企业名单.xlsx', "Sheet1");
let wzdataList = 外资企业名单[0].blockData;
for (let i= 1; i < wzdataList.length; i++) {
let subList = wzdataList[i];
let info = await enterpriseData.findEnterpriseByName(subList[1]);
if (!info || !info.uscc) {
console.log(subList[1], "外资企业 找不到名单");
wzNullList.push(subList[1]);
continue;
}
if (info.labelList.indexOf(ENTERPRISELABEL.外资企业) == -1) {
info.labelList.push(ENTERPRISELABEL.外资企业);
await info.save();
}
}
let zdtcNullList = [];
let 重点投促企业 = ["上海赛尔欣生物医疗科技有限公司", "上海庄生晓梦信息科技有限公司"];//户管的
for (let i= 0; i < 重点投促企业.length; i++) {
let name = 重点投促企业[i];
let info = await enterpriseData.findEnterpriseByName(name);
if (!info || !info.uscc) {
console.log(name, "投促重点企业 找不到名单");
zdtcNullList.push(name);
continue;
}
if (info.labelList.indexOf(ENTERPRISELABEL.投促重点) == -1) {
info.labelList.push(ENTERPRISELABEL.投促重点);
await info.save();
}
}
// let enterpriseList = await enterpriseData.findEnterpriseListByParam({});
// for (let i= 0; i < enterpriseList.length; i++) {
// let {name} = enterpriseList[i];
// if (xjrEnterpriseMap[name]) {
// console.log(name);
// }
// if (xjrpyEnterpriseMap[name]) {
// console.log(name);
// }
// }
console.log("标签导入成功");
}
/**
* 企业相关
*/
import { AddAppealsConfig, AddEnterpriseBaseConfig, addEnterpriseBusinesConfig, AddEnterpriseBusinesConfig, AddEnterpriseServiceConfig, UpdateEnterpriseBaseConfig, updateEnterpriseBusinesConfig, yqydAdAppealsConfig } from "../config/paramConfig";
import { eccFormParam } from "../util/verificationParam";
import * as enterpriseData from "../data/enterprise/enterprise";
import * as userData from "../data/user";
import * as serviceData from "../data/service/service";
import * as businessData from "../data/enterprise/businessdata";
import { getRandomId, successResult } from "../tools/system";
import { changeEnumValue, eccEnumValue } from "../util/verificationEnum";
import { APPEALTYPE, ENTERPRISECATEGORY, ENTERPRISECHANGETYPE, ENTERPRISELABEL, INDUSTRY, OPERATIONTYPE, SOLVESTATE, SUBINDUSTRY, WARNTYPE } from "../config/enum";
import moment = require("moment");
import { findUserInfoByUserId } from "../data/user";
import { BizError } from "../util/bizError";
import { ERRORENUM } from "../config/errorEnum";
import { findDataByParam } from "../data/log/enterpriseLog";
import * as overallOperationData from "../data/overallOperation";
import * as appealsData from "../data/service/appeals";
/**================================================================ 首页 ================================================ */
/**
* 首页 => 企业变化趋势
* @returns
*/
export async function enterpriseChange() {
let sixMonthsAgo = moment().subtract(6, 'months');
let startTime = sixMonthsAgo.startOf('month').valueOf();
let endTime = new Date().valueOf();
let param = {createTime:{"$gt":startTime, "$lt":endTime}};
let dbList = await findDataByParam(param);
let monthMap = {};
dbList.forEach(info => {
let {month, count, type, createTime} = info;
if (!monthMap[month])monthMap[month] = {month, inCount:0, outCount:0, ms:0};
if (type == ENTERPRISECHANGETYPE.新增) monthMap[month].inCount += count;
else if (type == ENTERPRISECHANGETYPE.注销) monthMap[month].outCount += count;
monthMap[month].ms = new Date(createTime).valueOf();
});
let valueList = Object.values(monthMap);
valueList.sort((a:any, b:any) => {return a.ms - b.ms})
let inList = [];
let outList = [];
valueList.forEach((info:any) => {
inList.push({
key:info.month,
value:info.inCount
});
outList.push({
key:info.month,
value:info.outCount
});
});
inList = [
{key:"2月", value:4123},
{key:"3月", value:4146},
{key:"4月", value:4073},
{key:"5月", value:4173},
{key:"6月", value:4179},
{key:"7月", value:4201}
];
outList = [
{key:"2月", value:143},
{key:"3月", value:123},
{key:"4月", value:171},
{key:"5月", value:122},
{key:"6月", value:101},
{key:"7月", value:98}
]
return {dataList:[
{name:"新增企业(迁入)", data:inList},
{name:"减少企业(迁出)", data:outList},
]}
}
function getItemOperate(item) {
let list = [];
for (let i = 1; i <= 12; i++) {
list.push({
key:`${i}月`,
value:item[i] || 0
});
};
return list
}
function defaultData(item) {
if (!item || !item.id) {
item = {count:0}
for (let i = 1; i <= 12; i++) {
item[i] = 0;
};
}
return item;
}
/**
* 首页经营数据
* @returns
*/
export async function enterpriseOperate() {
let year = new Date().getFullYear();
let 今年税收 = await overallOperationData.findData({year, operationType:OPERATIONTYPE.税收});
let 去年税收 = await overallOperationData.findData({year:year-1, operationType:OPERATIONTYPE.税收});
let 今年财政收入 = await overallOperationData.findData({year, operationType:OPERATIONTYPE.财政收入});
let 去年财政收入 = await overallOperationData.findData({year:year-1, operationType:OPERATIONTYPE.财政收入});
let 今年固定资产投入 = await overallOperationData.findData({year, operationType:OPERATIONTYPE.固定资产投入});
let 去年固定资产投入 = await overallOperationData.findData({year:year-1, operationType:OPERATIONTYPE.固定资产投入});
今年税收 = defaultData(今年税收);
去年税收 = defaultData(去年税收);
今年财政收入 = defaultData(今年财政收入);
去年财政收入 = defaultData(去年财政收入);
今年固定资产投入 = defaultData(今年固定资产投入);
去年固定资产投入 = defaultData(去年固定资产投入);
let 税收YoY=0;
if (今年税收 && 去年税收) {
税收YoY = Math.round((今年税收-去年税收)/去年税收*1000)/10
}
let 财政YoY=0;
if (今年财政收入 && 去年财政收入) {
税收YoY = Math.round((今年财政收入-去年财政收入)/去年财政收入*1000)/10
}
let 固定资产投入YoY=0;
if (今年固定资产投入 && 去年固定资产投入) {
税收YoY = Math.round((今年固定资产投入-去年固定资产投入)/去年固定资产投入*1000)/10
}
let caiZheng = {
name:"财政收入",
thisYear:今年财政收入.count || 0,
yoy:财政YoY,//年度环比
chart:[
{
name:"本年度",
data:getItemOperate(今年财政收入)
},
{
name:"上年度",
data:getItemOperate(去年财政收入)
}
]
};
let dataList = [
{
name:"税收情况",
thisYear:今年税收.count || 0,
yoy:税收YoY,//年度环比
yoyCount:去年税收.count || 0,//年度环比数量
momCount:0,//月度环比数量
mom:0,//月度环比
chart:[
{
name:"本年度",
data:getItemOperate(今年税收)
},
{
name:"上年度",
data:getItemOperate(去年税收)
}
]
},
{
name:"财政收入",
thisYear:今年财政收入.count || 0,
yoy:财政YoY,//年度环比
yoyCount:去年财政收入.count || 0,//年度环比数量
momCount:0,//月度环比数量
mom:0,//月度环比
chart:[
{
name:"本年度",
data:getItemOperate(今年财政收入)
},
{
name:"上年度",
data:getItemOperate(去年财政收入)
}
]
},
{
name:"固定投资情况",
thisYear:今年固定资产投入.count || 0,
yoy:固定资产投入YoY,//年度环比
yoyCount:去年固定资产投入.count || 0,//年度环比数量
momCount:0,//月度环比数量
mom:0,//月度环比
chart:[
{
name:"本年度",
data:getItemOperate(今年固定资产投入)
},
{
name:"上年度",
data:getItemOperate(去年固定资产投入)
}
]
}
];
return {dataList};
}
/**
* 企业名称下拉框
* @param nameStr
* @returns
*/
export async function enterpriseNameSelectList(nameStr:string) {
let param = {};
if (nameStr) {
param = {name:{"$regex":nameStr}};
}
let list = await enterpriseData.findEnterpriseListByParam(param);
let dataList = [];
list.forEach(info => {
dataList.push({
key:info.name,
value:info.uscc
});
});
return {dataList}
}
/**
* 用户下拉框
* @param nameStr
* @returns
*/
export async function userNameSelectList(nameStr:string) {
let param = {};
if (nameStr) {
param = {name:{"$regex":nameStr}};
}
let list = await userData.findUserByParam({});
let dataList = [];
list.forEach(info => {
dataList.push({
key:info.name,
value:info.userId
});
});
return {dataList}
}
/**================================================================ 建档 ================================================ */
/**
* 创建企业第一步
* @param reqUser
* @param param
* @returns
*/
export async function createBase(reqUser, param) {
const FunName = "快速建档=>基本信息";
eccFormParam(FunName, AddEnterpriseBaseConfig, param);
param.createUserId = reqUser.userId;//创建人id
await enterpriseData.createEnterpriseBase(param);
return successResult();
}
/**
* 快速建档第二步
* @param reqUser
* @param paramList
* @returns
*/
export async function createOperate(reqUser, uscc, param) {
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo || !enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
// const FunName = "快速建档=>经营数据";
const FunName = "快速建档=>企业述求";
eccFormParam(FunName, yqydAdAppealsConfig, param);
eccEnumValue(FunName, "appealType", APPEALTYPE, param.appealType);
param.appId = getRandomId(param.uscc);
param.enterpriseName = enterpriseInfo.name;
param.createUserId = reqUser.userId;
param.createTime = new Date().valueOf();
param.state = SOLVESTATE.未解决;
await appealsData.createData(param);
return successResult();
// let nowMs = new Date().valueOf();
// let addList = [];
// for (let i = 0; i < paramList.length; i++) {
// let param = paramList[i];
// eccFormParam(`${FunName}=>第${i}个`, AddEnterpriseBusinesConfig, param);
// param.createTime = reqUser.createTime;//创建时间
// param.uscc = uscc;
// param.name = enterpriseInfo.name;
// param.createTime = nowMs;
// addList.push(param);
// }
// await businessData.addManyBusinessData(addList);
return successResult();
}
/**
* 创建企业第三步
* @param reqUser
* @param param
* @returns
*/
export async function createService(reqUser, uscc, param) {
const FunName = "快速建档=>服务记录";
eccFormParam(FunName, AddEnterpriseServiceConfig, param);
param.uscc = uscc;
param.promoterId = reqUser.userId;//发起人(添加人)
param.promoterName = reqUser.userName;//发起人名称(添加人)
await serviceData.createData(param);
return successResult();
}
/** ================================================== 一企一档 ========================================== */
/**
* 一企一档 => 企业列表
* @param selectStr
* @param labelIdList
* @returns
*/
export async function enterpriseList(reqUser, selectStr, labelIdList, industryList, isFoolow, page:number) {
let param:any = {};
if (selectStr) {
param["$or"] = [
{uscc:{"$regex":selectStr}},
{name:{"$regex":selectStr}},
{logonAddress:{"$regex":selectStr}},
];
};
if (labelIdList.length) {
param.labelList = {"$in":labelIdList};
}
if (industryList.length) {
param.privateIndustry = {"$in":industryList};
}
let userInfo = await findUserInfoByUserId(reqUser.userId);
let foolowMap = {};
userInfo.followEnterprise.forEach(uscc=> {
foolowMap[uscc] = 1;
});
if (isFoolow) {
param.uscc = {"$in":Object.keys(foolowMap)}
}
let list = await enterpriseData.findEnterpriseToPageByParam(param, page);
let dataCount = await enterpriseData.findEnterpriseCountByParam(param);
let dataList = [];
list.forEach(info => {
//标签
let labelList = [ {key:changeEnumValue(SUBINDUSTRY, info.privateSubIndustry), value:info.privateSubIndustry, state:true} ];
if (info.labelList) {
info.labelList.forEach(item => {
labelList.push({key:changeEnumValue(ENTERPRISELABEL, item), value:item, state:true});
})
}
let industry = "-";
if (info.privateIndustry) {
industry = changeEnumValue(INDUSTRY, info.privateIndustry);
} else if (info.qccIndustry1) {
industry = info.qccIndustry1;
}
dataList.push({
uscc:info.uscc,
name:info.name,
labelList,
// industry,
logonTime:moment(info.logonTime).format("YYYY/MM/DD"),
createTime:moment(info.createTime).format("YYYY/MM/DD"),
inZJ:"张江域内企业",
isFoolow:foolowMap[info.uscc]? true : false
});
});
return {dataList, dataCount}
}
/**
* 一企一档 => 企业列表 => 关注
* @param reqUser
* @param uscc
* @returns
*/
export async function addEnterpriseFollow(reqUser, uscc:string) {
let userInfo = await findUserInfoByUserId(reqUser.userId);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
if (userInfo.followEnterprise.indexOf(uscc) > -1) {
throw new BizError(ERRORENUM.已关注);
}
let list = [uscc];
userInfo.followEnterprise.forEach(key => {
list.push(key);
});
userInfo.followEnterprise = list;
await userInfo.save();
return successResult();
}
/**
* 一企一档 => 企业列表 => 取消关注
* @param reqUser
* @param uscc
* @returns
*/
export async function delEnterpriseFollow(reqUser, uscc:string) {
let userInfo = await findUserInfoByUserId(reqUser.userId);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
if (!enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
if (userInfo.followEnterprise.indexOf(uscc) == -1) {
throw new BizError(ERRORENUM.已取消);
}
let list = [];
userInfo.followEnterprise.forEach(key => {
if (key != uscc)list.push(key);
});
userInfo.followEnterprise = list;
await userInfo.save();
return successResult();
}
/**
* 一企一档 => 企业信息
* @param uscc
* @returns
*/
export async function enterpriseBaseInfo(uscc:string) {
let onceData = await enterpriseData.findEnterpriseByUscc(uscc);
//标签
let labelList = [];
if (onceData && onceData.labelList) {
onceData.labelList.forEach(item => {
labelList.push({key:changeEnumValue(ENTERPRISELABEL, item), value:item, state:true});
})
}
let baseInfo = {
uscc:onceData.uscc,
name:onceData.name,
labelList,
logonTime:moment(onceData.logonTime).format("YYYY/MM/DD"),
createTime:moment(onceData.createTime).format("YYYY/MM/DD"),
inZJ:"张江域内企业"
};
//中间部分
let patentInfo = {
industry:changeEnumValue(INDUSTRY, onceData.privateIndustry),
zhuceziben:onceData.zhuceziben,//注册资本
enterpriseCategory:changeEnumValue(ENTERPRISECATEGORY, onceData.enterpriseType),//企业类型
legalPerson:onceData.legalPerson,//法人
dianHua:onceData.dianHua,//联系方式
warn:0,//风险管控 todo
}
//地址数据
let addressInfo = {
logonAddress:onceData.logonAddress,
operatingAddress:[onceData.tongXinDiZhi]
};
//经营数据
let busData = await businessData.findBusinessDataByParam({uscc});
let businessList = [];
busData.forEach(info => {
let addInfo = {
year:info.year,
BI:info.BI,
TXP:info.TXP,
RD:info.RD,
startTimeMs:moment(info.startTimeMs).format("YYYY-MM-DD"),
endTimeMs:moment(info.endTimeMs).format("YYYY-MM-DD")
};
businessList.push(addInfo);
});
return {baseInfo, patentInfo, addressInfo, busData, businessList};
}
/**
* 一企一档 => 企业信息 => 经营数据修改
* @param uscc
* @param year
* @param param
* @returns
*/
export async function updateEnterpriseBusinessData(uscc:string, year:number, param) {
const FunName = "企业信息修改=>经营数据";
eccFormParam(FunName, updateEnterpriseBusinesConfig, param);
let businessInfo = await businessData.findOnceBusinessDataByParam({uscc, year});
if (!businessInfo || !businessInfo.year) {
throw new BizError(ERRORENUM.未找到数据)
}
businessInfo.startTimeMs = param.startTimeMs;
businessInfo.endTimeMs = param.endTimeMs;
businessInfo.BI = param.BI;
businessInfo.RD = param.RD;
businessInfo.TXP = param.TXP;
await businessInfo.save();
return successResult();
}
/**
* 一企一档 => 企业信息 => 经营数据删除
* @param uscc
* @param year
* @param param
* @returns
*/
export async function deleteEnterpriseBusinessData(uscc:string, year:number) {
let businessInfo = await businessData.findOnceBusinessDataByParam({uscc, year});
if (!businessInfo || !businessInfo.year) {
return successResult();
}
await businessData.deleteOnceBusinessDataByParam({uscc, year});
return successResult();
}
/**
* 一企一档 => 企业信息 => 经营数据添加
* @param uscc
* @param year
* @param param
* @returns
*/
export async function addEnterpriseBusinessData(uscc:string, param) {
const FunName = "企业信息添加=>经营数据";
eccFormParam(FunName, addEnterpriseBusinesConfig, param);
let businessInfo = await businessData.findOnceBusinessDataByParam({uscc, year:param.year});
if (!businessInfo || !businessInfo.year) {
let addItem = {
uscc,
year:param.year,
startTimeMs:param.startTimeMs,
endTimeMs:param.endTimeMs,
BI:param.BI,
RD:param.RD,
TXP:param.TXP,
};
await businessData.addManyBusinessData([addItem])
} else {
throw new BizError(ERRORENUM.本年度数据已存在);
}
return successResult();
}
/**
* 一企一档 => 企业信息 => 企业基础信息回显
* @param uscc
*/
export async function enterpriseInfo(uscc:string) {
let onceData = await enterpriseData.findEnterpriseByUscc(uscc);
let dataInfo = {
name:onceData.name,
uscc:onceData.uscc,
logonTime:onceData.logonTime || 0,
createTime:onceData.createTime || 0,
inZJ:onceData.inZJ || false,
privateIndustry:onceData.privateIndustry || 0,
zhuceziben:onceData.zhuceziben || "",
enterpriseType:onceData.enterpriseType || 0,
logonAddress:["上海市", "上海市", "浦东新区", "测试"],//onceData.logonAddress,
operatingAddress:["上海市", "上海市", "浦东新区", "测试"],//onceData.operatingAddress|| [],
contacts:onceData.contacts || "",
contactsPhone:onceData.contactsPhone || "",
};
return {dataInfo};
}
/**
* 一企一档 => 企业信息 => 企业基础信息修改
* @param uscc
* @param param
* @returns
*/
export async function enterpriseUpdate(uscc:string, param) {
let onceData = await enterpriseData.findEnterpriseByUscc(uscc);
if (!onceData) throw new BizError(ERRORENUM.企业不存在);
const FunName = "一企一档=>修改基本信息";
eccFormParam(FunName, UpdateEnterpriseBaseConfig, param);
for (let key in param) {
onceData[key] = param[key];
}
await onceData.save();
return successResult();
}
/**
* 一企一档 => 企业信息 => 企业预警列表
* @param uscc
* @param typeList
* @returns
*/
export async function enterpriseWarnList(uscc:string, typeList) {
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(uscc);
let dataList = [];
let dataCount = 0;
if (typeList.indexOf(WARNTYPE.其他风险) > -1 || !typeList.length) {
if (!enterpriseInfo.contacts) {
dataList.push({
name:"缺失联系人信息",
warnTime:moment().format("YYYY-MM-DD"),
type:changeEnumValue(WARNTYPE, WARNTYPE.其他风险),
desc:"缺失基础信息:联系人信息"
});
dataCount += 1;
}
let businessList = await businessData.findBusinessDataByParam({uscc});
if (!businessList.length) {
dataList.push({
name:"缺失经营数据",
warnTime:moment().format("YYYY-MM-DD"),
type:changeEnumValue(WARNTYPE, WARNTYPE.其他风险),
desc:"企业缺失经营数据,需尽快补充"
});
dataCount += 1;
}
}
return {dataList, dataCount}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
//标签
/**
* 获取企业标签
*/
export async function getEnterpriseLabel() {
}
/**
* 政策
*/
import moment = require("moment");
import * as policyData from "../data/policy/policy";
import * as policyImplementationData from "../data/service/policyImplementation";
import { eccEnumValue } from "../util/verificationEnum";
import { DEGREE, ENTERPRISELABEL, IMPLEMENT, POLICYTYPE } from "../config/enum";
import { eccFormParam } from "../util/verificationParam";
import { addPolicyImplementConfig } from "../config/paramConfig";
import { successResult } from "../tools/system";
import { AnyARecord } from "dns";
import { findEnterpriseListByParam, findEnterpriseToPageByParam } from "../data/enterprise/enterprise";
/**
* 企业基本信息 政策推荐
* @param uscc
*/
export async function policyRecommend(uscc:string, degree:number) {
let dataList = [];
let policyList = await policyData.findData({});
policyList.forEach(info => {
dataList.push({
pId:info.pId,
title:info.title,
endTime:moment(info.endTime).format("YYYY"),
matchingDegree:degree || DEGREE.,
subsidy:"返税"
});
});
return {dataList};
}
/**
* 企业基本信息 政策落实
* @param uscc
*/
export async function policyImplement(uscc:string, implement:number) {
let param:any = {uscc};
if (implement == IMPLEMENT.已落实) {
param.state = true;
} else if (implement == IMPLEMENT.未落实) {
param.state = false;
}
let policyList = await policyImplementationData.findData(param);
let dataList = [];
policyList.forEach(info => {
dataList.push({
pId:info.pId,
policyName:info.policyName,
createTime:moment(info.implementTime).format("YYYY"),
desc:info.desc,
notes:info.notes,
state:info.state ? IMPLEMENT.已落实 : IMPLEMENT.未落实
});
});
return {dataList};
}
/**
* 企业基本信息 添加政策落实
* @param uscc
*/
export async function addPolicyImplement(reqUserInfo, uscc:string, param) {
let FunName = "添加政策落实";
eccFormParam(FunName, addPolicyImplementConfig, param);
let policyInfo = await policyData.findOnceData({pId:param.pId});
param.policyName = policyInfo.title;
param.createTime = new Date().valueOf();
param.createUser = reqUserInfo.userId;
param.uscc = uscc;
await policyImplementationData.addData(param);
return successResult();
}
/**
* 企业基本信息 政策统计
* @param uscc
* @returns
*/
export async function policyImplementStatis(uscc:string) {
let policyRecommendCount = 0;//todo
let policyMatchingDegree = 0;//政策匹配度
let policyImplementCount = await policyImplementationData.findDataCount({uscc});
return {
dataInfo:{
policyRecommendCount, policyMatchingDegree, policyImplementCount
}
};
}
/**
* 政策速递 列表
* @param title
* @param type
* @returns
*/
export async function policyList(title:string, type:number) {
console.log(type)
const FunName = "政策速递=>列表";
eccEnumValue(FunName, "type", POLICYTYPE, type);
let parma:any = {type};
if (title) {
parma.title = {"$regex":title};
}
let dbList = await policyData.findData(parma);
let dataList = [];
dbList.forEach(info => {
dataList.push({
title:info.title,
pId:info.pId,
source:info.source,
createTime:moment(info.createTime).format("YYYY-MM-DD")
});
});
return {dataList, dataCount:dataList.length};
}
/**
* 政策速递 列表
* @param title
* @param type
* @returns
*/
export async function policyInfo(pId:string) {
let dbInfo = await policyData.findOnceData({pId});
let dataInfo = {
title:dbInfo.title,
content:dbInfo.content,
source:dbInfo.source,
createTime:moment(dbInfo.createTime).format("YYYY-MM-DD")
};
return { dataInfo };
}
export async function policyMatchEnterpriseList(pId:string) {
let enterpriseList = await findEnterpriseListByParam({labelList:{"$in":[ENTERPRISELABEL.重点企业]}});
let dataList = [];
enterpriseList.forEach(item => {
dataList.push({
key:item.name,
value:item.uscc
});
});
return { dataList };
}
/**
* 企业基本信息 政策落实
* @param uscc
*/
export async function policyImplementList(year:number) {
let thisYearStartMs = year;
let thisYearEndMsMs = moment(year).add(1, "years").valueOf();
let param:any = {
implementTime:{"$gt":thisYearStartMs,"$lt":thisYearEndMsMs},
};
let policyList = await policyImplementationData.findData(param);
let countMap = {};
policyList.forEach(info => {
if (!countMap[info.uscc]) countMap[info.uscc] = {count:0, enterpriseName:info.enterpriseName, dataList:[]}
countMap[info.uscc].count += 1;
countMap[info.uscc].dataList.push({
pId:info.pId,
policyName:info.policyName,
});
});
let dataList = Object.values(countMap);
let thisYearCount = await policyImplementationData.findDataCount(param);
let thisYearLastMs = moment(year).subtract(1, "years").valueOf();
param.implementTime = {"$gt":thisYearLastMs,"$lt":thisYearStartMs};
let lastYearCount = await policyImplementationData.findDataCount(param);
let rate = 0;
if (lastYearCount) {
rate = Math.ceil((thisYearCount - lastYearCount)/ lastYearCount * 100)
}
thisYearCount = 10;
rate = 10;
// dataList = [{
// count:0, enterpriseName:"测试企业名称",
// dataList:[
// {
// pId:"test111",
// policyName:"测试测试测试"
// }
// ]
// }];
return {dataList, thisYearCount, rate};
}
/**
* 企业基本信息 政策匹配企业
* @param uscc
*/
export async function policyMatchList(year:number) {
let thisYearStartMs = moment(`${year}-01-01 00:00:00`).valueOf();
let thisYearEndMsMs = moment(`${year+1}-01-01 00:00:00`).valueOf();
let param:any = {
endTime:{"$gte":thisYearStartMs},
createTime:{"$lte":thisYearEndMsMs},
};
let policyCount = await policyData.findDataCount(param);
let rate = 90;
let policyList = await policyData.findData(param);
let dataList= [];
for (let i = 0; i < policyList.length; i++) {
let info = policyList[i];
let itemParam:any = {};
if (info.industry) {
itemParam.industry = {"$in":[info.industry]}
}
if (info.label && info.label.length) {
itemParam.labelList = {"$in":info.label}
}
let itemEnterpriseList = await findEnterpriseToPageByParam(itemParam, 1);
let matchList =[];
itemEnterpriseList.forEach(item => {
matchList.push({uscc:item.uscc, enterpriseName:item.name})
})
dataList.push({
title:info.title,
matchList
});
}
return {dataList, thisYearCount:policyCount, rate};
}
\ No newline at end of file
哪吒港航智慧科技(上海)有限公司
理想万里晖半导体设备(上海)股份有限公司
上海格思信息技术有限公司
上海概伦电子股份有限公司
上海泰睿思微电子有限公司
上海泽丰半导体科技有限公司
上海聪链信息科技有限公司
上海航天空间技术有限公司
特福隆(上海)科技有限公司
明珞汽车装备(上海)有限公司
恒玄科技(上海)股份有限公司
上海谙邦半导体设备有限公司
弥费科技(上海)股份有限公司
励元科技(上海)有限公司
上海昂丰矿机科技有限公司
上海积塔半导体有限公司
卓沃网络科技(上海)有限公司
典基网络科技(上海)有限公司
上海显耀显示科技有限公司
上海江波龙微电子技术有限公司
上海遨拓深水装备技术开发有限公司
上海裕芯电子科技有限公司
上海建为历保科技股份有限公司
上海旻艾半导体有限公司
上海中船临港船舶装备有限公司
上海芳甸生物科技有限公司
世邦工业科技集团股份有限公司
上海龙腾科技股份有限公司
上海治臻新能源股份有限公司
上海诺倬力机电科技有限公司
上海御渡半导体科技有限公司
上海瞻芯电子科技股份有限公司
上海燧原科技股份有限公司
达观数据有限公司
星火智云(上海)科技发展有限公司
运去哪物流科技集团有限公司
上海汇航捷讯网络科技有限公司
拓迪化学(上海)股份有限公司
英韧科技股份有限公司
上海凌凯科技股份有限公司
上海临港益邦智能技术股份有限公司
上海新瑞谷科技集团有限公司
上海欧陆认证服务有限公司
上海同耀通信技术有限公司
格兰菲智能科技股份有限公司
上海融跃电子科技股份有限公司
济川(上海)医学科技有限公司
上海司羿智能科技有限公司
青芯半导体科技(上海)有限公司
壹药网科技(上海)股份有限公司
上海优周电子科技有限公司
上海域起网络科技有限公司
上海肇观电子科技有限公司
上海川也电机有限公司
上海德尔格医疗器械有限公司
上海方润医疗科技股份有限公司
上海海立新能源技术有限公司
宝船生物医药科技(上海)有限公司
昂华(上海)自动化工程股份有限公司
中交三航局第二工程有限公司
国网上海综合能源服务有限公司
上海金丘信息科技有限公司
上海通创信息技术股份有限公司
上海逸航汽车零部件有限公司
华领医药技术(上海)有限公司
都创(上海)医药科技股份有限公司
上海富友支付服务股份有限公司
上海英内物联网科技股份有限公司
上海博应信息技术有限公司
核电运行研究(上海)有限公司
普华基础软件股份有限公司
赫比(上海)家用电器产品有限公司
上海铱控自动化系统工程有限公司
上海城建信息科技有限公司
上海能源建设工程设计研究有限公司
原启生物科技(上海)有限责任公司
叠境数字科技(上海)有限公司
德明通讯(上海)股份有限公司
上海密尔克卫化工储存有限公司
上海箩箕技术有限公司
上海吉凯基因医学科技股份有限公司
创领心律管理医疗器械(上海)有限公司
上海盛迪医药有限公司
景略半导体(上海)有限公司
上海汉图科技有限公司
上海特波电机有限公司
通联支付网络服务股份有限公司
加特兰微电子科技(上海)有限公司
上海海拉电子有限公司
上海润诺生物科技有限公司
桑迪亚医药技术(上海)有限责任公司
上海中兴软件有限责任公司
上海云从企业发展有限公司
上海艾拉比智能科技有限公司
上海远铸智能技术有限公司
上海龙感汽车电子有限公司
上海北分科技股份有限公司
上海天源迪科信息技术有限公司
中钞油墨有限公司
上海聚星仪器有限公司
上海陛通半导体能源科技股份有限公司
上海青翼工业软件有限公司
上海童渠信息技术有限公司
上海盟科药业股份有限公司
睿励科学仪器(上海)有限公司
上海施能电器设备有限公司
上海辛帕智能科技股份有限公司
欣凯医药化工中间体(上海)有限公司
上海高科生物工程有限公司
上海维智卓新信息科技有限公司
虎伯拉铰接系统(上海)有限公司
新阳荣乐(上海)汽车电子有限公司
上海众托科技有限公司
上海科新生物技术股份有限公司
上海宽创国际文化科技股份有限公司
上海文华财经资讯股份有限公司
上海钛米机器人股份有限公司
车轮互联科技(上海)股份有限公司
上海耀皮工程玻璃有限公司
上海超致半导体科技有限公司
上海动联信息技术股份有限公司
麦格思维特(上海)流体工程有限公司
上海航空材料结构检测股份有限公司
上海昌投网络科技有限公司
荣湃半导体(上海)有限公司
上海百胜软件股份有限公司
上海英威腾工业技术有限公司
中移(上海)信息通信科技有限公司
上海金桥信息股份有限公司
上海仁会生物制药股份有限公司
上海国兴农智能科技股份有限公司
上海航新航宇机械技术有限公司
上海浦东金环医疗用品股份有限公司
上海新致软件股份有限公司
赛默飞世尔(上海)仪器有限公司
上海智浦欣微电子有限公司
上海光原谷信息技术有限公司
上海顺舟智能科技股份有限公司
派欧云计算(上海)有限公司
上海和宗焊接设备制造有限公司
盈力半导体(上海)有限公司
通联数据股份公司
灿芯半导体(上海)股份有限公司
上海辉文生物技术股份有限公司
上海芯龙半导体技术股份有限公司
正雅齿科科技(上海)有限公司
上海亿威航空电子股份有限公司
上海盛霄云计算技术有限公司
上海佐竹冷热控制技术有限公司
上海中基国威电子股份有限公司
上海丰野表面处理剂有限公司
唯智信息技术(上海)股份有限公司
上海力声特医学科技有限公司
上海微问家信息技术有限公司
上海联空网络科技有限公司
上海普兰金融服务有限公司
圣奥化学科技有限公司
劲方医药科技(上海)有限公司
欢乐互娱(上海)科技股份有限公司
上海米健信息技术有限公司
上海荻硕贝肯医学检验所有限公司
上海青瑞食品科技有限公司
上海金标生物科技有限公司
上海高诚智能科技有限公司
上海华迎汽车零部件有限公司
魔视智能科技(上海)有限公司
上海宝亚安全装备股份有限公司
上海山恒生态科技股份有限公司
恺佧生物科技(上海)有限公司
上海天昊生物科技有限公司
西刻标识设备(上海)有限公司
上海瑞浦青创新能源有限公司
上海东欣软件工程有限公司
迈威(上海)生物科技股份有限公司
前锦网络信息技术(上海)有限公司
上海赛连信息科技有限公司
上海金域医学检验所有限公司
上海唯科生物制药有限公司
上海臣邦医药科技股份有限公司
上海群之脉信息科技有限公司
韶远科技(上海)有限公司
上海地铁盾构设备工程有限公司
上海赛金生物医药有限公司
昂赛微电子(上海)有限公司
嘉和生物药业有限公司
盛趣信息技术(上海)有限公司
伊顿上飞(上海)航空管路制造有限公司
德比软件(上海)有限公司
博彦科技(上海)有限公司
上海新浪乐居信息科技有限公司
上海五同同步带有限公司
德赛诊断系统(上海)有限公司
上海边界智能科技有限公司
上海梦之路数字科技有限公司
上海三旗通信科技有限公司
上海晟矽微电子股份有限公司
上海观测未来信息技术有限公司
上海芯联芯智能科技有限公司
上海思创电器设备有限公司
雅泰歌思(上海)通讯科技有限公司
中交上海航道勘察设计研究院有限公司
上海中化科技有限公司
上海迦美信芯通讯技术有限公司
上海韦翰斯生物医药科技有限公司
上海衡拓液压控制技术有限公司
和记黄埔医药(上海)有限公司
驰众信息技术(上海)有限公司
上海波创电气有限公司
上海赢他网络科技有限公司
上海浦东软件平台有限公司
上海仙工智能科技有限公司
上海望友信息科技有限公司
上海鹏武电子科技有限公司
上海数慧系统技术有限公司
上海大智慧申久信息技术有限公司
妙顺(上海)生物科技有限公司
上海海能信息科技股份有限公司
上海方融科技有限责任公司
上海迪赛诺医药集团股份有限公司
上海大智慧信息科技有限公司
上海和誉生物医药科技有限公司
上海中商网络股份有限公司
上海鲍麦克斯电子科技有限公司
跬云(上海)信息科技有限公司
上海齐感电子信息科技有限公司
西宝生物科技(上海)股份有限公司
上海克硫环保科技股份有限公司
瑞德肝脏疾病研究(上海)有限公司
上海睿聚环保科技有限公司
上海星融汽车科技有限公司
上海华模科技有限公司
上海天正软件有限公司
贝加莱工业自动化(中国)有限公司
上海小度技术有限公司
上海融德机电工程设备有限公司
芯和半导体科技(上海)股份有限公司
安源医药科技(上海)有限公司
中交物流规划设计研究院有限公司
国检测试控股集团上海有限公司
上海荣数信息技术有限公司
上海钥熠电子科技有限公司
上海亿通国际股份有限公司
上海文依电气股份有限公司
上海彩迩文生化科技有限公司
上海派拉软件股份有限公司
恒泰柯半导体(上海)有限公司
阅霆信息技术(上海)有限公司
上海智同医药科技有限公司
上海玄霆娱乐信息科技有限公司
上海商泰汽车信息系统有限公司
上海秉坤数码科技有限公司
上海逸迅信息科技有限公司
上海南麟电子股份有限公司
上海亚朋生物技术有限公司
上海科源电子科技有限公司
上海科泰运输制冷设备有限公司
事必得精密机械(上海)有限公司
上海百润投资控股集团股份有限公司
普研(上海)标准技术服务有限公司
辅必成(上海)医药科技有限公司
凯惠睿智生物科技(上海)有限公司
东方久乐汽车电子(上海)股份有限公司
平辅寅健康科技(上海)有限公司
上海中菱电子有限公司
上海中卡智能卡有限公司
上海森林特种钢门有限公司
上海浦东新区公路建设发展有限公司
方达医药技术(上海)有限公司
上海申得欧有限公司
上海芯导电子科技股份有限公司
建信金融科技有限责任公司
上海执诚生物科技有限公司
上海文景信息科技有限公司
上海赛比曼生物科技有限公司
上海跬智信息技术有限公司
上海益诺思生物技术股份有限公司
福氏新能源技术(上海)有限公司
上海小传科技有限公司
上海几何伙伴智能驾驶有限公司
芯来智融半导体科技(上海)有限公司
上海朝阳永续信息技术股份有限公司
三信国际电器上海有限公司
昂科信息技术(上海)股份有限公司
上海伯豪生物技术有限公司
上海惠生海洋工程有限公司
上海胜华电气股份有限公司
上海仙视电子科技有限公司
复星凯特生物科技有限公司
上海陆芯电子科技有限公司
上海百英生物科技股份有限公司
上海思路迪医学检验所有限公司
上海顺久电子科技有限公司
上海泰崇电气有限公司
上海洪朴信息科技有限公司
上海海立中野冷机有限公司
上海诚明融鑫科技有限公司
上海合庆火龙果科技开发有限公司
上海鑫蓝海自动化科技有限公司
上海冰鉴信息科技有限公司
上海一芯智能科技有限公司
上海欣吉特生物科技有限公司
上海华瑞气雾剂有限公司
上海励驰半导体有限公司
上海科胜药物研发有限公司
上海迈泰君奥生物技术有限公司
上海图双精密装备有限公司
上海移柯通信技术股份有限公司
上海思岚科技有限公司
依柯力信息科技(上海)股份有限公司
上海高桥捷派克石化工程建设有限公司
上海境业环保能源科技股份有限公司
上海拜安传感技术有限公司
上海沪方软件有限公司
上海孤波科技有限公司
上海民航新时代机场设计研究院有限公司
上海安其威微电子科技有限公司
上海浦公检测技术股份有限公司
上海英诺伟医疗器械股份有限公司
上海凯创生物技术有限公司
上海大和衡器有限公司
上海立迪生物技术股份有限公司
上海微创生命科技有限公司
天翼视讯传媒有限公司
上海阅文信息技术有限公司
上海途擎微电子有限公司
上海分众信息技术有限公司
上海厦泰生物科技有限公司
上海菱威深信息技术有限公司
上海良信智能电工有限公司
上海爱谱华顿电子科技(集团)有限公司
盟立自动化科技(上海)有限公司
应达工业(上海)有限公司
上海讯联数据服务有限公司
格拉默车辆内饰(上海)有限公司
上海零数众合信息科技有限公司
上海唯捷创芯电子技术有限公司
上海企顺信息系统有限公司
上扬软件(上海)有限公司
臻驱科技(上海)有限公司
浦易(上海)生物技术股份有限公司
上海诗丹德标准技术服务有限公司
上海美橙科技信息发展有限公司
上海山景集成电路股份有限公司
时擎智能科技(上海)有限公司
上海药明巨诺生物科技有限公司
安境迩(上海)科技有限公司
上海华建电力设备股份有限公司
上海钫铖微电子有限公司
艾酷软件技术(上海)有限公司
上海诺生医疗科技有限公司
天境生物科技(上海)有限公司
上海艾力斯医药科技股份有限公司
上海鹰觉科技有限公司
上海汉枫电子科技有限公司
上海畅联智融通讯科技有限公司
美嘉帕拉斯特汽车零部件(上海)有限公司
旋智电子科技(上海)有限公司
上海申茂电磁线有限公司
吉尔生化(上海)有限公司
上海浦东美灵塑料制品有限公司
上海赛路客电子有限公司
上海宽睿信息科技有限责任公司
上海宏盾防伪材料有限公司
上海孙桥溢佳农业技术股份有限公司
上海磐启微电子有限公司
上海京硅智能技术有限公司
上海锐承通讯技术有限公司
上海畅星软件有限公司
中债金融估值中心有限公司
上海通微分析技术有限公司
上海期货信息技术有限公司
钜泉光电科技(上海)股份有限公司
安客诚信息服务(上海)有限公司
心凯诺医疗科技(上海)有限公司
国科量子通信网络有限公司
上海元方科技股份有限公司
华院分析技术(上海)有限公司
科美博阳诊断技术(上海)有限公司
上海沃比医疗科技有限公司
喜大(上海)网络科技有限公司
上海斯达瑞船舶海洋工程服务有限公司
上海柯林布瑞信息技术有限公司
携程旅游信息技术(上海)有限公司
上海盛付通电子支付服务有限公司
上海蓝云网络科技有限公司
上海京新生物医药有限公司
上海熙华检测技术服务股份有限公司
上海泓博智源医药股份有限公司
上海锡明光电科技有限公司
上海为彪汽配制造有限公司
上海凯鑫分离技术股份有限公司
上海华钦信息科技股份有限公司
上海芯歌智能科技有限公司
日荣半导体(上海)有限公司
上海韬润半导体有限公司
上海长锐汽车零部件有限公司
上海英联电子系统有限公司
上海志听医疗科技有限公司
上海钢之家信息科技有限公司
麦歌恩电子(上海)有限公司
特乐斯特机械(上海)有限公司
上海英曼尼安全装备有限公司
上海中兴易联通讯股份有限公司
上海英迈吉东影图像设备有限公司
上海沥高科技股份有限公司
上海莱天通信技术有限公司
上海霍莱沃电子系统技术股份有限公司
上海禾苗通信技术有限公司
上海百通项目管理咨询有限公司
上海联合赛尔生物工程有限公司
上海万柔汽车电子有限公司
上海现代先进超精密制造中心有限公司
上海航空机械有限公司
上海宽文是风软件有限公司
上海外高桥英得网络信息有限公司
上海成生科技有限公司
欧姆龙(上海)有限公司
亮风台(上海)信息科技有限公司
上海蓝丰信息科技有限公司
上海索迪龙自动化股份有限公司
上海浦东华宇信息技术有限公司
上海坤锐电子科技有限公司
上海佰奥聚新材料科技有限公司
上海埃帕信息科技有限公司
上海恩元生物科技有限公司
乔讯电子(上海)有限公司
黑芝麻智能科技(上海)有限公司
上海八彦图信息科技有限公司
上海导向医疗系统有限公司
上海泽信软件有限公司
银联智惠信息服务(上海)有限公司
尚科生物医药(上海)有限公司
上海普华科技发展股份有限公司
上海道生医疗科技有限公司
上海宝云网络科技有限公司
申朴信息技术(上海)股份有限公司
上海吉凯基因科技有限公司
上海霍普建筑设计事务所股份有限公司
奥解思信息科技(上海)有限公司
上海步科自动化股份有限公司
上海禾丰制药有限公司
上海懿贝瑞生物医药科技有限公司
上海修能医疗器械有限公司
芯与物(上海)技术有限公司
上海嘉扬信息系统有限公司
上海浩方信息技术有限公司
上海海典软件股份有限公司
上海高齐汽车配件有限公司
上海奥科达医药科技股份有限公司
锱云(上海)物联网科技有限公司
元镁科技股份有限公司
上海智众医疗科技有限公司
开店宝科技集团有限公司
马夸特电子科技(上海)有限公司
乐线软件开发(上海)有限公司
美迪西普胜医药科技(上海)有限公司
上海域格信息技术有限公司
上海星申仪表有限公司
上海艾铭思汽车控制系统有限公司
上海宏创医疗科技有限公司
劲方医药科技(上海)有限公司
理想万里晖半导体设备(上海)股份有限公司
上海小度技术有限公司
臻驱科技(上海)有限公司
加特兰微电子科技(上海)有限公司
上海燧原科技有限公司
迈威(上海)生物科技股份有限公司
上海航天空间技术有限公司
哪吒港航智慧科技(上海)有限公司
上海概伦电子股份有限公司
华领医药技术(上海)有限公司
上海盟科药业股份有限公司
圣奥化学科技有限公司
上海小传科技有限公司
上海治臻新能源股份有限公司
艾酷软件技术(上海)有限公司
上海志听医疗科技有限公司
上海零数众合信息科技有限公司
上海显耀显示科技有限公司
上海和誉生物医药科技有限公司
上海艾力斯医药科技股份有限公司
上海奥科达医药科技股份有限公司
格兰菲智能科技有限公司
上海积塔半导体有限公司
派欧云计算(上海)有限公司
弥费科技(上海)股份有限公司
上海仙工智能科技有限公司
上海海立新能源技术有限公司
上海合庆火龙果科技开发有限公司
上海华模科技有限公司
雅泰歌思(上海)通讯科技有限公司
上海泽丰半导体科技有限公司
上海益诺思生物技术股份有限公司
上海瞻芯电子科技有限公司
上海励驰半导体有限公司
上海青翼工业软件有限公司
芯与物(上海)技术有限公司
上海中化科技有限公司
上海芯歌智能科技有限公司
景略半导体(上海)有限公司
甫康(上海)健康科技有限责任公司
上海江波龙微电子技术有限公司
上海钫铖微电子有限公司
上海药明巨诺生物科技有限公司
上海谙邦半导体设备有限公司
上海图双精密装备有限公司
上海万柔汽车电子有限公司
依柯力信息科技(上海)股份有限公司
上海京硅智能技术有限公司
上海立迪生物技术股份有限公司
辅必成(上海)医药科技有限公司
上海荻硕贝肯医学检验所有限公司
上海百通项目管理咨询有限公司
上海孤波科技有限公司
复星凯特生物科技有限公司
上海诺倬力机电科技有限公司
嘉和生物药业有限公司
恺佧生物科技(上海)有限公司
上海能源建设工程设计研究有限公司
福氏新能源技术(上海)有限公司
上海沪方软件有限公司
上海东欣软件工程有限公司
心凯诺医疗科技(上海)有限公司
跬云(上海)信息科技有限公司
上海洪朴信息科技有限公司
上海陆芯电子科技有限公司
瑞德肝脏疾病研究(上海)有限公司
中交三航局第二工程有限公司
上海修能医疗器械有限公司
中钞油墨有限公司
中债金融估值中心有限公司
上海臣邦医药科技股份有限公司
上海英诺伟医疗器械股份有限公司
上海国兴农智能科技股份有限公司
\ No newline at end of file
/**
* 企业述求
*/
import { APPEALTYPE, SERVICESTATE, SOLVESTATE, SOLVESTATECLIENT } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum";
import { AddAppealsConfig } from "../../config/paramConfig";
import { findEnterpriseByUscc } from "../../data/enterprise/enterprise";
import { getRandomId, successResult } from "../../tools/system";
import { BizError } from "../../util/bizError";
import { changeEnumValue, eccEnumValue } from "../../util/verificationEnum";
import { eccFormParam } from "../../util/verificationParam";
import * as appealsData from "../../data/service/appeals";
import moment = require("moment");
//------------------------------------------------------------------企业页面 的 企业述求
/**
* 企业页面 => 企业述求 => 列表 success
* @param reqUser
* @param param
* @returns
*/
export async function enterpriseAppealList(reqUser, uscc:string) {
let enterpriseInfo = await findEnterpriseByUscc(uscc);
if (!enterpriseInfo || !enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
let dataList = [];
let appealList = await appealsData.selectDataByParam({uscc});
appealList.forEach(info => {
dataList.push({
createTime:moment(info.createTime).format("YYYY-MM-DD HH:mm:SS"),//创建时间
appealType:changeEnumValue(APPEALTYPE, info.appealType),//诉求类型 APPEALTYPE
appeal:info.appeal,
state:changeEnumValue(SOLVESTATECLIENT, info.state) || "未解决"
});
});
return {dataList};
}
/**
* 企业页面 => 企业述求 => 添加 success
* @param reqUser
* @param param
* @returns
*/
export async function addEnterpriseAppeals(reqUser, param) {
const FunName = "企业页面=>添加企业述求"
eccFormParam(FunName, AddAppealsConfig, param);
eccEnumValue(FunName, "appealType", APPEALTYPE, param.appealType);
let enterpriseInfo = await findEnterpriseByUscc(param.uscc);
if (!enterpriseInfo || !enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
param.appId = getRandomId(param.uscc);
param.enterpriseName = enterpriseInfo.name;
param.createUserId = reqUser.userId;
param.createTime = new Date().valueOf();
param.state = SOLVESTATE.未解决;
await appealsData.createData(param);
return successResult();
}
//------------------------------------------------------------------首页 的 企业述求
/**
* 企业述求 => 述求类型列表 success
* @param type
* @returns
*/
export async function appealTypeList(type:number) {
let param:any = {state:SOLVESTATE.已解决};//已解决参数
let oParam:any = {state:SOLVESTATE.未解决};//未解决参数
let statisList = [];
let solveCount = await appealsData.selectCountByParam(param);
let unresolvedCount = await appealsData.selectCountByParam(oParam);
if (type == 2) {//已解决
statisList = await appealsData.typeStatis(param);
} else {
statisList = await appealsData.typeStatis(oParam);
}
let dataList = [];
statisList.forEach(info => {
dataList.push({
key:changeEnumValue(APPEALTYPE, info._id),
value:info._id,
count:info.count
});
});
let countInfo = {solveCount, unresolvedCount};
return {dataList, countInfo};
}
/**
* 企业述求 => 述求列表 success
* @param type
* @returns
*/
export async function appealList(type:number, appealType:number) {
const FunName = "述求列表子列表";
eccEnumValue(FunName, "appealType", APPEALTYPE, appealType)
let param:any = {appealType};
param.state = type;
let statisList = await appealsData.selectDataByParam(param);
let dataList = [];
statisList.forEach(info => {
let {uscc, enterpriseName} = info;
dataList.push({
uscc, enterpriseName
});
});
return {dataList};
}
/**
* 企业述求 => 添加述求
* @param reqUser
* @param param
* @returns
*/
export async function addAppeals(reqUser, param) {
const FunName = "企业述求=>添加企业述求"
eccFormParam(FunName, AddAppealsConfig, param);
eccEnumValue(FunName, "appealType", APPEALTYPE, param.appealType);
let enterpriseInfo = await findEnterpriseByUscc(param.uscc);
if (!enterpriseInfo || !enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
param.appId = getRandomId(param.uscc);
param.enterpriseName = enterpriseInfo.name;
param.createUserId = reqUser.userId;
param.createTime = new Date().valueOf();
await appealsData.createData(param);
return successResult();
}
/**
* 企业述求下拉框
* 用于给所有企业服务/领导走访 用的 下拉框
* @param param
* @returns
*/
export async function appealsSelect(uscc) {
let appealList = await appealsData.selectDataByParam({uscc, state:SERVICESTATE.未解决});
let dataList = [];
appealList.forEach(info => {
dataList.push({
key:changeEnumValue(APPEALTYPE, info.appealType),
value:info.appId
});
});
return {dataList};
}
\ No newline at end of file
/**
* 企业服务 主要逻辑
*/
import moment = require("moment");
import { APPEALTYPE, ENTERPRISELABEL, INDUSTRY, RESEARCHTYPE, SERVERLOGTYPE, SERVICESTATE, SOLVESTATE, SUBINDUSTRY } from "../../config/enum";
import { AddSerivceConfig, AddSerivceResolveDynamicsConfig } from "../../config/paramConfig";
import * as serviceData from "../../data/service/service";
import * as enterpriseData from "../../data/enterprise/enterprise";
import * as visitData from "../../data/service/visit";
import { getRandomId, successResult } from "../../tools/system";
import { eccFormParam } from "../../util/verificationParam";
import { changeEnumValue, eccEnumValue } from "../../util/verificationEnum";
import { findEnterpriseByUscc } from "../../data/enterprise/enterprise";
import * as dynamicData from "../../data/service/dynamic";
import { findUserInfoByUserId, findUserMap } from "../../data/user";
import { BizError } from "../../util/bizError";
import { ERRORENUM } from "../../config/errorEnum";
import * as appealsData from "../../data/service/appeals";
//------------------------------------------------------------------企业页面的服务
/**
* 企业页面 => 企业服务 => 统计 success
* @param userInfo
*/
export async function serviceStatis(userInfo, uscc:string) {
let visitCountParam = {
uscc
};
let visitCount = await visitData.selectCountByParam(visitCountParam);
let serviceCountParam = {
uscc
};
let serviceCount = await serviceData.selectCountByParam(serviceCountParam);
let notSolveCountParam = {
state:SOLVESTATE.未解决,
uscc
};
let notSolveVisitCount = await visitData.selectCountByParam(notSolveCountParam);
let notSolveServiceCount = await serviceData.selectCountByParam(notSolveCountParam);
let notSolveCount = notSolveVisitCount + notSolveServiceCount;//未解决数量
let allCount = serviceCount + visitCount;//总数
let rate = 0;
if (( allCount -notSolveCount) && allCount ) {
rate = Math.ceil( (allCount - notSolveCount)/allCount*100);
}
return {
dataInfo:{
visitCount, serviceCount, rate:`${rate}%`
}
};
}
/**
* 企业页面 => 企业服务 => 添加日常服务 success
* @param reqUser
* @param param
* @returns
*/
export async function addService(reqUser, param) {
const FunName = "企业服务=>添加服务";
eccFormParam(FunName, AddSerivceConfig, param);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(param.uscc);
if (!enterpriseInfo || !enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
param.name = enterpriseInfo.name;//关联企业名称
param.sId = getRandomId(param.uscc);
param.promoterId = reqUser.userId;
param.createTime = new Date().valueOf();
let appealInfo = await appealsData.findData({appId:param.appealType})
param.appealTypeEnumId = appealInfo.appealType;
await serviceData.createData(param);
if (param.state == SERVICESTATE.已解决) {
appealInfo.state = SERVICESTATE.已解决;
await appealInfo.save();
}
return successResult();
}
/**
* 企业页面 => 企业服务 => 日常服务 => 添加跟踪记录 success
* @param reqUser
* @param param
* @returns
*/
export async function addServiceResolveDynamics(reqUser, uscc:string, sId:string, param) {
const FunName = "企业服务=>添加跟踪记录"
eccFormParam(FunName, AddSerivceResolveDynamicsConfig, param);
let enterpriseInfo = await findEnterpriseByUscc(uscc);
param.uscc = uscc;
param.sId = sId;
param.rId = getRandomId(uscc);
param.enterpriseName = enterpriseInfo.name;
param.createUserId = reqUser.userId;
await dynamicData.createData(param);
let serviceInfo = await serviceData.selectData({sId});
if (param.resolutionStatus != serviceInfo.state ) {
serviceInfo.state = param.resolutionStatus;
await serviceInfo.save();
let appealInfo = await appealsData.findData({appId:serviceInfo.appealType})
appealInfo.state = param.resolutionStatus;
await appealInfo.save();
}
return successResult();
}
/**
* 企业页面 => 企业服务 => 日常服务 => 修改跟踪记录 success
* @param reqUser
* @param param
* @returns
*/
export async function updateServiceResolveDynamics(reqUser,rId:string, param) {
const FunName = "企业服务=>修改跟踪记录"
eccFormParam(FunName, AddSerivceResolveDynamicsConfig, param);
let dynamicInfo:any = await dynamicData.findData({rId});
if (param.tracking) dynamicInfo.tracking = param.tracking;
if (param.trackingTime) dynamicInfo.trackingTime = param.trackingTime;
if (param.trackingDesc) dynamicInfo.trackingDesc = param.trackingDesc;
if (param.resolutionStatus) dynamicInfo.resolutionStatus = param.resolutionStatus;
await dynamicInfo.save();
let serviceInfo = await serviceData.selectData({sId:dynamicInfo.sId});
serviceInfo.state = param.resolutionStatus;
await serviceInfo.save();
let appealInfo = await appealsData.findData({appId:serviceInfo.appealType})
appealInfo.state = param.resolutionStatus;
await appealInfo.save();
return successResult();
}
/**
* 企业页面 => 企业服务 => 日常服务 => 列表
* @param appealType
* @param uscc
*/
export async function dailyLog(state:number, uscc:number) {
let dataList = [];
let param:any= {uscc};
if (state) {
param.state = state;
}
let dbList = await serviceData.selectDataByParam(param);
let userMap = await findUserMap();
let dynamicList = await dynamicData.selectDataByParam({uscc, sId:{"$ne":null}});
let dynamicMap = {};
dynamicList.forEach(info => {
let {sId, rId, tracking, trackingDesc, trackingTime} = info;
if (!dynamicMap[sId]) dynamicMap[sId] = [];
dynamicMap[sId].push({
rId,
// name:userMap[tracking],
tracking,
trackingDesc,
trackingTime:moment(trackingTime).format("YYYY-MM-DD")
});
});
dbList.forEach(info => {
dataList.push({
sId:info.sId,
serivceTime:moment(info.serivceTime).format("YYYY-MM-DD HH:mm:SS"),
contacts:info.contacts,
contactsPhone:info.contactsPhone,
content:info.content,
enterpriseType:info.enterpriseType,
follow:info.follow,
followContent:info.followContent,
state:info.state, //changeEnumValue(SOLVESTATE, info.state),
dynamicList:dynamicMap[info.sId]
});
});
return {dataList}
}
//-----------------------------------------------------------------------------------企业服务页面的 服务
/**
* 企业服务 => 统计 success
* @param userInfo
* @returns
*/
export async function enterpriseServerStatis(year:number) {
let thisYearStart = new Date(`${year}-01-01 00:00:00`).valueOf();
let thisYearEnd = new Date(`${year}-12-31 12:59:59`).valueOf();
let lastYearStart = new Date(`${year-1}-01-01 00:00:00`).valueOf();
let lastYearEnd = new Date(`${year-1}-12-31 12:59:59`).valueOf();
//实地走访 本年度
let thisYearInEnterpriseVisitCount = await visitData.selectCountByParam({ researchTime:{"$gt":thisYearStart, "$lt":thisYearEnd}, researchType:RESEARCHTYPE.实地走访});
let thisYearInEnterprisecServiceCount = await serviceData.selectCountByParam({ researchTime:{"$gt":thisYearStart, "$lt":thisYearEnd}, researchType:RESEARCHTYPE.实地走访});
let thisYearInEnterpriseCount = thisYearInEnterpriseVisitCount + thisYearInEnterprisecServiceCount;
let lastYearInEnterpriseVisitCount = await visitData.selectCountByParam({ researchTime:{"$gt":lastYearStart, "$lt":lastYearEnd}, researchType:RESEARCHTYPE.实地走访});
let lastYearInEnterprisecServiceCount = await serviceData.selectCountByParam({ researchTime:{"$gt":lastYearStart, "$lt":lastYearEnd}, researchType:RESEARCHTYPE.实地走访});
let lastYearInEnterpriseCount = lastYearInEnterpriseVisitCount + lastYearInEnterprisecServiceCount;
//全部日常走访和领导走访
let thisVisitCount = await visitData.selectCountByParam({ researchTime:{"$gt":thisYearStart, "$lt":thisYearEnd}});
let thisServiceCount = await serviceData.selectCountByParam({ researchTime:{"$gt":thisYearStart, "$lt":thisYearEnd}});
let yoy = 0;
if ((thisYearInEnterpriseCount - lastYearInEnterpriseCount) && lastYearInEnterpriseCount) {
yoy = Math.round((thisYearInEnterpriseCount - lastYearInEnterpriseCount)/lastYearInEnterpriseCount*10000)/100;
}
let dataInfo = {
checkYearCount:thisYearInEnterpriseCount,
yoy,
visitCount:thisVisitCount,
serviceCount:thisServiceCount,
rate:"98%"
};
return {dataInfo};
}
/**
* 企业服务 => 日常服务 => 列表 success
* @param appealType
* @param uscc
* @returns
*/
export async function enterpriseServiceLog(reqUser, type:number, page:number) {
eccEnumValue("企业服务列表", "type", SERVERLOGTYPE, type);
let param:any= {};
let startMs = 0;
switch(type) {
case SERVERLOGTYPE.近三天:
startMs = moment().subtract(3, 'day').valueOf();
break;
case SERVERLOGTYPE.近七天:
startMs = moment().subtract(7, 'day').valueOf();
break;
case SERVERLOGTYPE.近一个月:
startMs = moment().subtract(1, 'month').valueOf();
break;
case SERVERLOGTYPE.近一年:
startMs = moment().subtract(1, 'year').valueOf();
break;
}
param.researchTime = {"$gt":startMs};
let userInfo = await findUserInfoByUserId(reqUser.userId);
let foolowMap = {};
userInfo.followEnterprise.forEach(uscc=> {
foolowMap[uscc] = 1;
});
let dbList = await serviceData.selectDataByParamToPage(param, page);
let dataList = [];
for (let i= 0; i < dbList.length; i++) {
let visitInfo = dbList[i];
let info = await enterpriseData.findEnterpriseByUscc(visitInfo.uscc);
if (!info || !info.privateSubIndustry) continue
//标签
let labelList = [ {key:changeEnumValue(SUBINDUSTRY, info.privateSubIndustry), value:info.privateSubIndustry, state:true} ];
if (info.labelList) {
info.labelList.forEach(item => {
labelList.push({key:changeEnumValue(ENTERPRISELABEL, item), value:item, state:true});
})
}
//返回
let industry = "-";
if (info.privateIndustry) {
industry = changeEnumValue(INDUSTRY, info.privateIndustry);
} else if (info.qccIndustry1) {
industry = info.qccIndustry1;
}
dataList.push({
uscc:info.uscc,
name:info.name,
labelList,
industry,
logonTime:moment(info.logonTime).format("YYYY/MM/DD"),
leasedArea:`${info.leasedArea || 0}`,
inZJPark:info.inZJPark|| "",
logonAddress:info.logonAddress,
mainBusiness:info.mainBusiness,
isFoolow:foolowMap[info.uscc]? true : false
});
}
return {dataList}
}
/**
* 企业服务 主要逻辑
*/
import moment = require("moment");
moment.updateLocale('en', {
week: {
dow: 0, // 0代表周日,1代表周一,以此类推
doy: 6 // 一年的第一天被认为是第6周的第一天(这通常与ISO周数系统对齐,但不是必需的)
}
});
import { AddSerivceResolveDynamicsConfig, AddVisitConfig } from "../../config/paramConfig";
import * as visitData from "../../data/service/visit";
import * as dynamicData from "../../data/service/dynamic";
import * as enterpriseData from "../../data/enterprise/enterprise";
import { getRandomId, successResult } from "../../tools/system";
import { eccFormParam } from "../../util/verificationParam";
import { changeEnumManyValue, changeEnumValue, eccEnumValue } from "../../util/verificationEnum";
import { APPEALTYPE, ENTERPRISELABEL, INDUSTRY, REQUESTKEYWORDS, RESEARCHTYPE, SERVERLOGTYPE, SERVICESTATE, SOLUTIONTYPE, SOLVESTATE, SOLVESTATECLIENT, SUBINDUSTRY } from "../../config/enum";
import { findUserInfoByUserId, findUserMap } from "../../data/user";
import { findEnterpriseByUscc } from "../../data/enterprise/enterprise";
import { BizError } from "../../util/bizError";
import { ERRORENUM } from "../../config/errorEnum";
import * as appealsData from "../../data/service/appeals";
/**================================================================ 企业信息 下的 企业服务 ========================================= */
/**
* 企业页面 => 企业服务 => 企业服务 => 添加领导走访 success
* @param reqUser
* @param param
*/
export async function addVisit(reqUser, param) {
const FunName = "企业服务=>添加走访";
eccFormParam(FunName, AddVisitConfig, param);
// eccEnumValue(FunName, "researchType", RESEARCHTYPE, param.researchType);
// eccEnumValue(FunName, "solutionType", SOLUTIONTYPE, param.solutionType);
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(param.uscc);
if (!enterpriseInfo || !enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
param.name = enterpriseInfo.name;//关联企业名称
param.vId = getRandomId(param.uscc);
param.promoterId = reqUser.userId;
param.createTime = new Date().valueOf();
let appealInfo = await appealsData.findData({appId:param.appealType})
param.appealTypeEnumId = appealInfo.appealType;
await visitData.createData(param);
if (param.state == SERVICESTATE.已解决) {
appealInfo.state = SERVICESTATE.已解决;
await appealInfo.save();
}
return successResult();
}
/**
* 企业页面 => 企业服务 => 企业服务 => 领导走访 => 添加跟踪记录 success
* @param reqUser
* @param param
* @returns
*/
export async function addVisitResolveDynamics(reqUser, uscc:string, vId:string, param) {
const FunName = "企业服务=>添加跟踪记录"
eccFormParam(FunName, AddSerivceResolveDynamicsConfig, param);
let enterpriseInfo = await findEnterpriseByUscc(uscc);
param.uscc = uscc;
param.vId = vId;
param.rId = getRandomId(uscc);
param.enterpriseName = enterpriseInfo.name;
param.createUserId = reqUser.userId;
await dynamicData.createData(param);
let visitInfo = await visitData.selectData({vId});
if (param.resolutionStatus == visitInfo.state) {
visitInfo.state = param.resolutionStatus;
await visitInfo.save();
let appealInfo = await appealsData.findData({appId:visitInfo.appealType})
appealInfo.state = param.resolutionStatus;
await appealInfo.save();
}
return successResult();
}
/**
* 企业页面 => 企业服务 => 企业服务 => 领导走访 => 修改跟踪记录 success
* @param reqUser
* @param param
* @returns
*/
export async function updateVisitResolveDynamics(reqUser, rId:string, param) {
const FunName = "企业服务=>修改跟踪记录"
eccFormParam(FunName, AddSerivceResolveDynamicsConfig, param);
let dynamicInfo:any = await dynamicData.findData({rId});
if (param.tracking) dynamicInfo.tracking = param.tracking;
if (param.trackingTime) dynamicInfo.trackingTime = param.trackingTime;
if (param.trackingDesc) dynamicInfo.trackingDesc = param.trackingDesc;
if (param.resolutionStatus) dynamicInfo.resolutionStatus = param.resolutionStatus;
await dynamicInfo.save();
let visitInfo = await visitData.selectData({vId:dynamicInfo.vId});
visitInfo.state = param.resolutionStatus;
await visitInfo.save();
let appealInfo = await appealsData.findData({appId:visitInfo.appealType})
appealInfo.state = param.resolutionStatus;
await appealInfo.save();
return successResult();
}
/**
* 企业服务 服务记录 领导走访
* @param appealType
* @param uscc
* @returns
*/
export async function ladelVisitLog(reqUserInfo, state, appealType, uscc:number) {
let dataList = [];
// eccEnumValue("企业服务 领导走访", "state", SERVICESTATE, state );
let param:any= {uscc};
if (appealType && appealType.length) {
param.appealTypeEnumId = {"$in":appealType};
}
if (state) {
param.state = state;
}
let dbList = await visitData.findData(param);
let userMap = await findUserMap();
let dynamicList = await dynamicData.selectDataByParam({uscc, vId:{"$ne":null}});
let dynamicMap = {};
dynamicList.forEach(info => {
let {vId, rId, tracking, trackingDesc, trackingTime} = info;
if (!dynamicMap[vId]) dynamicMap[vId] = [];
dynamicMap[vId].push({
rId,
tracking,
trackingDesc,
trackingTime:moment(trackingTime).format("YYYY-MM-DD HH:mm:SS")
});
});
//述求map
// let appealsList = await appealsData.selectDataByParam({uscc});
// let appealsMap = {};
// appealsList.forEach(info => {
// appealsMap[info.appId] = info.appealType;
// });
dbList.forEach(info => {
dataList.push({
vId:info.vId,
researchTime:moment(info.researchTime).format("YYYY/MM/DD HH:mm:SS"),
// leaderId:info.leaderId,
leaderName:info.leaderName,
desc:info.desc,
// researchType:changeEnumValue(RESEARCHTYPE, info.researchType),
// appealType:changeEnumValue(APPEALTYPE, info.appealType),
researchType:info.researchType,
appealType:info.appealTypeEnumId,
appeal:info.appeal,
solutionType:info.solutionType, //changeEnumValue(SOLUTIONTYPE, info.solutionType),
state:info.state, //changeEnumValue(SOLVESTATE, info.state),
requestKeywords:changeEnumManyValue(REQUESTKEYWORDS, info.requestKeywords || []), //changeEnumManyValue(REQUESTKEYWORDS, info.requestKeywords),
dynamicList:dynamicMap[info.vId] || []
});
});
return {dataList}
}
/**
* 企业服务 领导走访列表 success
* @param appealType
* @param uscc
* @returns
*/
export async function enterpriseLadelVisitLog(reqUser, type:number, page:number) {
eccEnumValue("领导走访列表", "type", SERVERLOGTYPE, type);
let param:any= {};
let startMs = 0;
switch(type) {
case SERVERLOGTYPE.近三天:
startMs = moment().subtract(3, 'day').valueOf();
break;
case SERVERLOGTYPE.近七天:
startMs = moment().subtract(7, 'day').valueOf();
break;
case SERVERLOGTYPE.近一个月:
startMs = moment().subtract(1, 'month').valueOf();
break;
case SERVERLOGTYPE.近一年:
startMs = moment().subtract(1, 'year').valueOf();
break;
}
param.researchTime = {"$gt":startMs};
let userInfo = await findUserInfoByUserId(reqUser.userId);
let foolowMap = {};
userInfo.followEnterprise.forEach(uscc=> {
foolowMap[uscc] = 1;
});
let dbList = await visitData.findDataToPage(param, page);
let dataList = [];
for (let i= 0; i < dbList.length; i++) {
let visitInfo = dbList[i];
let info = await findEnterpriseByUscc(visitInfo.uscc);
//标签
let labelList = [ {key:changeEnumValue(SUBINDUSTRY, info.privateSubIndustry), value:info.privateSubIndustry, state:true} ];
if (info.labelList) {
info.labelList.forEach(item => {
labelList.push({key:changeEnumValue(ENTERPRISELABEL, item), value:item, state:true});
})
}
dataList.push({
uscc:info.uscc,
name:info.name,
labelList,
logonTime:moment(info.logonTime).format("YYYY/MM/DD"),
createTime:moment(info.createTime).format("YYYY/MM/DD"),
inZJ:"张江域内企业",
isFoolow:foolowMap[info.uscc]? true : false
});
}
return {dataList}
}
/**
* 走访安排
*/
import moment = require("moment");
import * as visitPlanData from "../../data/service/visitPlan";
import * as visitData from "../../data/service/visit";
import * as enterpriseData from "../../data/enterprise/enterprise";
import { findUserMap } from "../../data/user";
import { eccFormParam } from "../../util/verificationParam";
import { AddArrangeVisitsConfig } from "../../config/paramConfig";
import { getRandomId, successResult } from "../../tools/system";
import { BizError } from "../../util/bizError";
import { ERRORENUM } from "../../config/errorEnum";
/**
* 个人走访安排页 走访安排列表
* @param userInfo
* @param dayMs
* @returns
*/
export async function visitCalendarList(userInfo) {
//获取本周开始时间到结束时间
let startTime = moment().startOf('week').valueOf();
let endTime = moment().endOf('week').valueOf();
let param = {accompany:{"$in":[userInfo.userId]}, visitTime:{"$gt":startTime, "$lt":endTime}};
let visitPlanList = await visitPlanData.findData(param);
let userMap = await findUserMap();
let visitMap = {};
for (let i = 0; i < visitPlanList.length; i++) {
let info = visitPlanList[i];
let enterpriseItem = await enterpriseData.findEnterpriseByUscc(info.uscc);
if (!enterpriseItem || !enterpriseItem.uscc) continue;
let key = moment(info.visitTime).format("YYYY-MM-DD");
let accompany = "";
info.accompany.forEach(uId => {
accompany += `${userMap[uId]},`
});
accompany += `${userMap[userInfo.userId]}`;
if (!visitMap[key]) visitMap[key] = [];
visitMap[key].push({
enterpriseName:enterpriseItem.name,
accompany,
time:moment(info.visitTime).format("MM-DD-HH-mm")
});
}
let dataList = [];
for (let i = 0; i < 7; i++) {
let dayStr = moment(startTime).add(i, 'd').format("YYYY-MM-DD");
dataList.push({
key:dayStr,
haveTask:visitMap[dayStr] ? true : false,//是否有红点提示
visitList:visitMap[dayStr] || []
});
}
return {dataList};
}
/**
* 走访安排统计
* @param userInfo
* @param year
* @returns
*/
export async function visitPlanStats(userInfo, year:number) {
let startYear = moment(`${year}-01-01 00:00:00`).valueOf();
let endYear = moment(`${year}-01-01 00:00:00`).add(1, 'y').valueOf();;
let lastYear = moment(`${year}-01-01 00:00:00`).subtract(1, 'y').valueOf();
let param = {
visitTime:{"$gt":startYear, "$lt":endYear}, attendee:userInfo.userId
};
let checkYearPlanCount = await visitPlanData.findDataCount(param);
param = {
visitTime:{"$gt":lastYear, "$lt":startYear}, attendee:userInfo.userId
};
let checkLastYearPlanCount = await visitPlanData.findDataCount(param);
let visitParam = {researchTime:{"$gt":startYear, "$lt":endYear}, accompany:{"$in":userInfo.userId}};
let checkYearVisitCount = await visitData.findDataCount(visitParam);
let yToy = 0;
if (checkLastYearPlanCount && checkYearPlanCount) {
yToy = ((checkYearPlanCount - checkLastYearPlanCount) / checkLastYearPlanCount * 1000)/100
}
let dataInfo = {
planCount:checkYearPlanCount,
yToy,
visitCount:checkYearVisitCount,
reate:98
};
return {dataInfo};
}
/**
* 走访安排 添加
* @param userInfo
* @param param
* @returns
*/
export async function addArrangeVisitPlan(userInfo, param) {
const FunName = "走访安排=>添加"
eccFormParam(FunName, AddArrangeVisitsConfig, param);
param.attendee = userInfo.userId;//发起人id
param.promoterId = userInfo.userId;//发起人名称
param.vpId = getRandomId(userInfo.userId);
param.createTime = new Date().valueOf();
let enterpriseInfo = await enterpriseData.findEnterpriseByUscc(param.uscc);
if (!enterpriseInfo || !enterpriseInfo.uscc) throw new BizError(ERRORENUM.企业不存在);
await visitPlanData.createData(param);
return successResult();
}
/**
* 走访安排 走访安排列表
* @param appealType
* @param uscc
* @returns
*/
export async function userVisitPlanLog(reqUser) {
let startTime = moment().startOf('week').valueOf();
let endTime = startTime + (3600*1000*24 * 7);
let startMs = moment().startOf("year").valueOf();
let param:any= {
researchTime:{"$gt":startMs},
"$or":[
{accompany:{"$in":reqUser.userId}},
{attendee:reqUser.userId}
]
};
let dbList = await visitData.findData(param);
let userMap = await findUserMap();
let visitMap = {};
dbList.forEach(info => {
let key = moment(info.visitorsTime).format("YYYY-MM-DD");
let accompany = "";
info.accompany.forEach(uId => {
accompany += `${userMap[uId]},`
});
accompany += `${userMap[reqUser.userId]}`;
if (!visitMap[key]) visitMap[key] = [];
visitMap[key].push({
enterpriseName:info.name,
accompany,
time:moment(info.visitTime).format("MM-DD-HH-mm")
});
})
let dataList = [];
for (let i = 0; i < 7; i++) {
let dayStr = moment(startTime + (i * 3600*1000
*24) ).format("YYYY-MM-DD");
dataList.push({
key:dayStr,
haveTask:visitMap[dayStr] ? true : false,//是否有红点提示
visitList:visitMap[dayStr] || []
});
}
return {dataList};
}
\ No newline at end of file
/**
* 用户
*/
import { RAS, SOLVESTATE, STATE, USERTYPE } from "../config/enum";
import { ERRORENUM } from "../config/errorEnum";
import { findEnterpriseCountByParam, statisIndustryEnterprise } from "../data/enterprise/enterprise";
import * as visitData from "../data/service/visit";
import * as visitPlanData from "../data/service/visitPlan"
import { findUserInfoByLoginId, findUserInfoByUserId } from "../data/user";
import { getPwdMd5, getToken, successResult } from "../tools/system";
import { BizError } from "../util/bizError";
/**
* 企业管家登录
* @param loginId
* @param pwd
* @returns
*/
export async function userLogin(loginId:string, pwd:string) {
let userInfo:any = await findUserInfoByLoginId(loginId);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.账号不存在, loginId);
let checkPwd = getPwdMd5(loginId, pwd);
if (userInfo.pwd != checkPwd) throw new BizError(ERRORENUM.密码错误);
let token = getToken(loginId);
let resultUserInfo = {
loginId:userInfo.loginId,
name: userInfo.name,
userId:userInfo.userId,
token:token,
};
userInfo.token = token;
userInfo.tokenMs = new Date().valueOf();
await userInfo.save();
return {dataInfo:resultUserInfo};
}
/**
* 企业管家登出
* @param userInfo
*/
export async function userLogout(reqUserInfo) {
let userInfo = await findUserInfoByUserId(reqUserInfo.userId);
userInfo.token = getToken(userInfo.loginId);
userInfo.tokenMs = new Date().valueOf();
await userInfo.save();
return successResult();
}
/**
* 管理后台用户登录
*/
export async function adminUserLogin(loginId:string, pwd:string) {
let userInfo:any = await findUserInfoByLoginId(loginId);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.账号不存在, loginId);
let checkPwd = getPwdMd5(loginId, pwd);
if (userInfo.pwd != checkPwd) throw new BizError(ERRORENUM.密码错误);
let token = getToken(loginId);
let resultUserInfo = {
loginId:userInfo.loginId,
name: userInfo.name,
userId:userInfo.userId,
token:token,
};
userInfo.adminToken = token;
userInfo.adminTokenMs = new Date().valueOf();
await userInfo.save();
return {dataInfo:resultUserInfo};
}
/**
* 管理后台用户登出
*/
export async function adminUserLogout(reqUserInfo) {
let userInfo = await findUserInfoByUserId(reqUserInfo.userId);
userInfo.adminToken = getToken(userInfo.loginId);
userInfo.adminTokenMs = new Date().valueOf();
await userInfo.save();
return successResult();
}
/**
* 首页
* @param userInfo
* @returns
*/
export async function homePage(userInfo) {
let param = {
visitTime:{"$gt":new Date().valueOf()},//待解决
};
let visitCount = await visitPlanData.findDataCount(param);
let enterpriseCount = await findEnterpriseCountByParam({});
let industryCount = await statisIndustryEnterprise();
return {dataInfo:{visitCount, enterpriseCount, industryCount}};
}
/**
* 首页 顶部
* @param userInfo
* @returns
*/
export async function homePageTop(userInfo) {
let title = "张江镇";
if (userInfo.userType == USERTYPE.管家) title+"企业管家";
else title+"领导";
return {dataInfo:{
name:userInfo.name,
title
}};
}
/**
* 行业领域
*/
export enum INDUSTRY{
生物医药 = 1,
医疗科技 = 2,
软件和信息服务业,
人工智能,
集成电路,
新材料,
制造业,
汽车产业,
航空航天,
文化创意,
物流及仓储,
综合,
其他 = 14
}
export enum SUBINDUSTRY {
生物医药 = 1,
医疗科技 = 2,
软件和信息服务业,
人工智能,
集成电路,
新材料,
制造业,
汽车产业,
航空航天,
文化创意,
物流及仓储,
综合,
其他 = 14,
医药商业 = 101,
医疗服务,
医疗器械制造,
其他生物医药,
轻工制造 = 701,
发电设备制造,
电网设备制造,
船舶制造,
化学制造,
环保设备制造,
橡胶制品制造,
通用设备制造,
专用设备制造,
橡胶和塑料制品业,
建筑材料制造,
其他制造,
汽车服务 = 1301,
道路运输,
水上运输,
其他交通运输,
农林牧渔业,
环境保护服务,
专业服务业,
建筑工程,
能源,
科学研究和技术服务业,
金融业,
综合其他,
店铺 = 1401,
药房,
棋牌室,
宾馆酒店,
饭店,
学校,
人力资源,
养老院,
物业管理,
房地产开发租赁销售,
医疗机构,
其他服务业,
修理厂,
食品加工,
公共事业,
}
/**
* 制造业
*/
export enum MANUFACTURING {
轻工制造 = 701,
发电设备制造,
电网设备制造,
船舶制造,
化学制造,
环保设备制造,
橡胶制品制造,
通用设备制造,
专用设备制造,
橡胶和塑料制品业,
建筑材料制造,
其他制造
}
export enum MEDICALSUB {
医药商业 = 101,
医疗服务,
医疗器械制造,
其他生物医药
}
export enum OTHERINDUSTRY{
店铺 = 1401,
药房,
棋牌室,
宾馆酒店,
饭店,
学校,
人力资源,
养老院,
物业管理,
房地产开发租赁销售,
医疗机构,
其他服务业,
修理厂,
食品加工,
公共事业,
}
export enum COMPREHENSIVE {
汽车服务 = 1301,
道路运输,
水上运输,
其他交通运输,
农林牧渔业,
环境保护服务,
专业服务业,
建筑工程,
能源,
科学研究和技术服务业,
金融业,
综合其他
}
/**
* 解决状态
*/
export enum SOLVESTATE {
未解决 = 1,
已解决
}
/**
* 解决状态
*/
export enum SOLVESTATECLIENT {
未解决 = 1,
已解决
}
/**
* 述求类型
*/
export enum APPEALTYPE {
场地需求 = 1,
政策申请需求,
融资需求,
人才需求,
财政补贴需求
}
/**
* 活动
*/
export enum ACTIVITYTYPECLIENT {
本周新发布 = 0,
// 本周新发布 = 1,
重大活动 =1,
交流活动,
公益活动
}
/**
* 活动
*/
export enum ACTIVITYTYPESTATISCLIENT {
全部 = 0,
本周新发布,
重大活动,
交流活动,
公益活动
}
/**
* 政策类型
*/
export enum POLICYTYPE {
// 小微企业 = 1,
// 产业补助,
// 人才引进,
// 税收补贴,
// 政策减免
人才政策 = 1,
戴帽政策,
产业政策
}
/**
* 补贴类型
*/
export enum SUBSIDYTYPE {
财政支持 = 1,
}
/**
* 状态
*/
export enum STATE {
= 0,
}
export enum RAS {
续存 = 1,
注销 = 2
}
/**
* 企业变化统计类型
*/
export enum ENTERPRISECHANGETYPE {
新增 = 1,
注销 = 2
}
/**
*调研类型
*/
export enum RESEARCHTYPE {
实地走访 = 1
}
/**
* 解决方式
*/
export enum SOLUTIONTYPE {
线上解决 = 1,
帮助申报,
线下解决,
企业管家跟踪
}
/**
* 关键词
*/
export enum REQUESTKEYWORDS {
团队扩张 = 1,
团队缩减,
急需融资,
有投资意愿,
场地出租,
新得融资,
外地投资
}
export enum USERTYPE {
管家 = 1,
领导
}
/**
* 纳税人资质
*/
export enum NASHUIRENZIZHI {
未知 = 0,
小规模纳税人,
一般纳税人,
增值税一般纳税人
}
export enum ENTERPRISESIZE {
未知 = 0,
大型,
中型,
小型,
微型
}
/**
* 日常服务状态
*/
export enum SERVICESTATE {
未解决 = 1,
已解决
}
export enum ENTERPRISECATEGORY {
有限责任公司 = 1,
股份有限公司,
个人独资企业,
合伙企业,
全民所有制企业,
集体所有制企业,
私营企业,
股份制企业,
联营企业,
外商投资企业,
农民专业合作社,
港澳台投资企业
}
export enum DEGREE {
= 1,
= 2,
}
export enum IMPLEMENT {
未落实 = 1,
已落实
}
export enum IMPLEMENTCLIENT {
全部 = 0,
未落实 = 1,
已落实
}
/**
* 标签 企业属性
*/
export enum ENTERPRISELABEL {
重点企业 = 1,
科技创新,
专精特新,
科技小巨人,
小微企业,
融资企业,
科技型中小企业,
高新技术,
对外投资,
外资企业,
企业研发机构,
户管企业,
规上企业,
投促重点,
已注销,
科技小巨人培育
}
export enum SERVERLOGTYPE {
近一年 = 1,
近一个月,
近七天,
近三天,
}
export enum ACTIVITYSTATUS {
路演活动 = 1,
会议活动,
企业家座谈会,
商会活动,
重大活动
}
export enum OPERATIONTYPE {
税收 = 1,
财政收入,
固定资产投入
}
export enum ENTERPRISETYPE {
民营企业 = 1,
国有企业,
港澳台投资企业,
外商投资企业,
企事业单位,
事业单位,
社会组织,
机关单位,
民办非企业单位,
其他,
}
export enum WARNTYPE {
经营风险 = 1,
法律诉讼,
其他风险
}
export enum ERRORENUM {
未找到数据,
参数错误,
企业不存在,
已关注,
已取消,
活动不存在,
账号不存在,
密码错误,
地址数据不完整,
请完善信息,
非法登录,
身份验证过期,
身份验证失败,
文件上传失败,
只能上传pngjpg图片,
政策不存在,
政策落实不存在,
本年度数据已存在
}
export enum ERRORCODEENUM {
身份验证失败 = 401,
非法登录 = 402,
身份验证过期 = 403,
code无效 = 40029,
频繁操作请稍后再试 = 45011,
高风险等级用户 = 40226,
系统繁忙 = 40227
}
let bizErrorMsgMap = {};
for (let key in ERRORENUM) {
bizErrorMsgMap[ERRORENUM[key]] = key;
}
export function getBizMsg(param) {
return bizErrorMsgMap[param];
}
\ No newline at end of file
/**
* 表单参数校验
*/
/**
* 添加服务表单
*/
export const AddSerivceConfig = {
// uscc:{type:"String"},//关联企业
// researchTime:{type:"Number"},//调研时间
// leaderName:{type:"String"},//出席领导
// accompany:{type:"[String]"},//陪同人员
// contacts:{type:"String"},//联系人
// contactsPhone:{type:"String"},//联系人电话
// content:{type:"String"},//洽谈内容
// follow:{type:"String"},//跟进人
// followContent:{type:"String"},//跟进内容
// researchType:{type:"Number"}, //调研类型 RESEARCHTYPE
// appealType:{type:"String"},//诉求类型 关联企业述求的id
// appeal:{type:"String"},//诉求描述
// solutionType:{type:"Number"},//解决方式 SOLUTIONTYPE
// state:{type:"Number"},//解决状态
// desc:{type:"String"},//解决的备注
// requestKeywords:{type:"[Number]"},//关键词
uscc:{type:"String"},//关联企业 
researchTime:{type:"Number"},//调研时间
leaderName:{type:"String"},//出席领导
appealType:{type:"String"},//诉求类型 关联企业述求的id
appeal:{type:"String"},//诉求描述
state:{type:"Number",},//解决状态
desc:{type:"String"},//解决的备注
}
/**
* 添加 跟踪记录
*/
export const AddSerivceResolveDynamicsConfig = {
tracking:{type:"String"},//跟踪人
trackingTime:{type:"Number"},//跟踪时间
trackingDesc:{type:"String"},//跟踪进度
resolutionStatus:{type:"Number"}//解决情况
}
/**
* 添加 企业述求
*/
export const AddAppealsConfig = {
uscc:{type:"String"},//企业统一信用代码
appealType:{type:"Number"},//诉求类型
appeal:{type:"String"},//述求描述
}
/**
* 一企一档 添加 企业述求
*/
export const yqydAdAppealsConfig = {
appealType:{type:"Number"},//诉求类型
appeal:{type:"String"},//述求描述
}
/**
* 添加走访记录
*/
export const AddVisitConfig = {
uscc:{type:"String"},//关联企业
researchTime:{type:"Number"},//调研时间
leaderName:{type:"String"},//出席领导
// accompany:{type:"[String]"},//陪同人员
// contacts:{type:"String"},//联系人
// contactsPhone:{type:"String"},//联系人电话
// content:{type:"String"},//洽谈内容
// follow:{type:"String"},//跟进人
// followContent:{type:"String"},//跟进内容
// researchType:{type:"Number"}, //调研类型 RESEARCHTYPE
appealType:{type:"String"},//诉求类型 关联企业述求的id
appeal:{type:"String"},//诉求描述
// solutionType:{type:"Number"},//解决方式 SOLUTIONTYPE
state:{type:"Number"},//解决状态
desc:{type:"String"},//解决的备注
// requestKeywords:{type:"[Number]"},//关键词
}
/**
* 快速建档 基本信息
*/
export const AddEnterpriseBaseConfig = {
uscc:{type:"String"},//统一信用代码
name:{type:"String"},//企业名称
logonTime:{type:"Number"},//注册时间
createTime:{type:"Number"},//入库时间
inZJ:{inZJ:"Boolean"},//是否在张江
privateIndustry:{type:"Number"},//领域
zhuceziben:{type:"String"},//注册资本
enterpriseType:{type:"Number"},//企业类型
logonAddress:{type:"[String]"},//注册地址
operatingAddress:{type:"[String]"},//经营地址
contacts:{type:"String", notMustHave:true},//联系人
contactsPhone:{type:"String", notMustHave:true},//联系人手机号
}
/**
* 修改基本信息
*/
export const UpdateEnterpriseBaseConfig = {
uscc:{type:"String"},//统一信用代码
name:{type:"String"},//企业名称
logonTime:{type:"Number"},//注册时间
createTime:{type:"Number"},//入库时间
inZJ:{inZJ:"Boolean"},//是否在张江
privateIndustry:{type:"Number"},//领域
zhuceziben:{type:"String"},//注册资本
enterpriseType:{type:"Number"},//企业类型
logonAddress:{type:"[String]"},//注册地址
operatingAddress:{type:"[String]"},//经营地址
contacts:{type:"String", notMustHave:true},//联系人
contactsPhone:{type:"String", notMustHave:true},//联系人手机号
}
/**
* 快速建档 经营数据
*/
export const AddEnterpriseBusinesConfig = {
year:{type:"Number"},//年份
startTimeMs:{type:"Number"},//开始时间
endTimeMs:{type:"Number"},//结束时间
BI:{type:"Number"},//营业收入
RD:{type:"Number"},//研发投入
TXP:{type:"Number"},//纳税
}
/**
* 修改经营数据
*/
export const updateEnterpriseBusinesConfig = {
startTimeMs:{type:"Number"},//开始时间
endTimeMs:{type:"Number"},//结束时间
BI:{type:"Number"},//营业收入
RD:{type:"Number"},//研发投入
TXP:{type:"Number"},//纳税
}
/**
* 添加经营数据
*/
export const addEnterpriseBusinesConfig = {
year:{type:"Number"},
startTimeMs:{type:"Number"},//开始时间
endTimeMs:{type:"Number"},//结束时间
BI:{type:"Number"},//营业收入
RD:{type:"Number"},//研发投入
TXP:{type:"Number"},//纳税
}
/**
* 快速建档 服务记录 已修改
*/
export const AddEnterpriseServiceConfig = {
researchTime:{type:"Number"},//调研时间
leaderName:{type:"String"},//出席领导
// researchType:{type:"Number"}, //调研类型RESEARCHTYPE
appealType:{type:"Number"},//诉求类型 APPEALTYPE
appeal:{type:"String"},//诉求描述
// solutionType:{type:"Number"},//解决方式 SOLUTIONTYPE
state:{type:"Number",},//解决状态
desc:{type:"String"},//解决的备注
// requestKeywords:{type:"[Number]"},//关键词
}
/**
* 走访安排 添加
*/
export const AddArrangeVisitsConfig = {
uscc:{type:"String"},//企业
visitTime:{type:"Number"},//走访时间
accompany:{type:"[String]"},//陪同人员
desc:{type:"String"},//走访备注
}
//=================================================管理后台
/**
* 管理后台快速建档
*/
export const AdminAddEnterpriseBaseConfig = {
uscc:{type:"String"},//统一信用代码
name:{type:"String"},//企业名称
isFocus:{type:"Boolean"},//是否重点企业
enterpriseCategory:{type:"Number", notMustHave:true},//企业类型
inZJTime:{type:"Number"},//入驻张江时间
zhuceziben:{type:"String", notMustHave:true},//注册资本
logonTime:{type:"Number", notMustHave:true},//注册时间
industry:{type:"[Number]", notMustHave:true},//领域
sNaturalPersonHolding:{type:"Boolean", notMustHave:true},//是否自然人控股企业
logonAddress:{type:"String", notMustHave:true},//注册地址
operatingAddress:{type:"String", notMustHave:true},//经营地址
leasedArea:{type:"Number", notMustHave:true},//租赁面积(平方米)
mainBusiness:{type:"String", notMustHave:true},//主营业务
//经营数据
thisYearYear:{type:"Number"},//年份
thisYearStartTimeMs:{type:"Number", notMustHave:true},//开始时间
thisYearEndTimeMs:{type:"Number", notMustHave:true},//结束时间
thisYearTax:{type:"Number", notMustHave:true},//税收
thisYearRevenue:{type:"Number", notMustHave:true},//财政收入
thisYearFAI:{type:"Number", notMustHave:true},//固定资产投入
lastYearYear:{type:"Number"},//年份
lastYearStartTimeMs:{type:"Number", notMustHave:true},//开始时间
lastYearEndTimeMs:{type:"Number", notMustHave:true},//结束时间
lastYearTax:{type:"Number", notMustHave:true},//税收
lastYearRevenue:{type:"Number", notMustHave:true},//财政收入
lastYearFAI:{type:"Number", notMustHave:true},//固定资产投入
//服务记录
researchTime:{type:"Number", notMustHave:true},//调研时间
leaderName:{type:"String", notMustHave:true},//出席领导
researchType:{type:"Number", notMustHave:true}, //调研类型RESEARCHTYPE
appealType:{type:"Number", notMustHave:true},//诉求类型 APPEALTYPE
appeal:{type:"String", notMustHave:true},//诉求描述
solutionType:{type:"Number", notMustHave:true},//解决方式 SOLUTIONTYPE
state:{type:"Number", notMustHave:true,},//解决状态
desc:{type:"String", notMustHave:true},//解决的备注
requestKeywords:{type:"[Number]", notMustHave:true},//关键词
}
/**
* 添加 政策
*/
export const AddPolicyConfig = {
title:{type:"String"},//标题
type:{type:"Number"},//类型 POLICYTYPE
createTime:{type:"Number"},//创建时间
endTime:{type:"Number"},//失效时间
source:{type:"String"},//来源
content:{type:"String"},//内容
}
/**
* 修改 政策
*/
export const updatePolicyConfig = {
title:{type:"String"},//标题
type:{type:"Number"},//类型 POLICYTYPE
createTime:{type:"Number"},//创建时间
endTime:{type:"Number"},//失效时间
source:{type:"String"},//来源
content:{type:"String"},//内容
}
/**
* 添加 政策落实
*/
export const addPolicyImplementConfig = {
pId:{type:"String"},//关联政策
implementTime:{type:"Number"},//落实时间
state:{type:"Number"},//落实状态
desc:{type:"String"},//具体描述
notes:{type:"String"},//备注
}
/**
* 添加 活动
*/
export const AddActivityConfig = {
title:{type:"String"},//活动名称
type:{type:"Number"},//活动类型
activityTime:{type:"[Number]"},//活动时间
releaseTime:{type:"Number"},//发布时间
location:{type:"String"},//地址
content:{type:"String"},//活动内容
img:{type:"String", notMustHave:true}//图片
}
/**
* 修改 活动
*/
export const UpdateActivityConfig = {
title:{type:"String"},//活动名称
type:{type:"Number"},//活动类型
activityTime:{type:"[Number]"},//活动时间
releaseTime:{type:"Number"},//发布时间
location:{type:"String"},//地址
content:{type:"String"},//活动内容
img:{type:"String", notMustHave:true}//图片
}
/**
* 管理后台添加 政策落实
*/
export const AdminAddPolicyImplementConfig = {
pId:{type:"String"},//关联政策
uscc:{type:"String"},//关联企业
implementTime:{type:"Number"},//落实时间
state:{type:"Number"},//落实状态
desc:{type:"String"},//具体描述
notes:{type:"String"},//备注
}
/**
* 管理后台数据
*/
export const AdminUpdateOverallOperationConfig = {
count:{type:"Number"},
1:{type:"Number"},//1月
2:{type:"Number"},//2月
3:{type:"Number"},//3月
4:{type:"Number"},//4月
5:{type:"Number"},//5月
6:{type:"Number"},//6月
7:{type:"Number"},//7月
8:{type:"Number"},//8月
9:{type:"Number"},//9月
10:{type:"Number"},//10月
11:{type:"Number"},//11月
12:{type:"Number"},//12月
}
const path = require('path');
import * as fs from "fs";
import { BizError } from "../util/bizError";
import { analysisXml } from "../util/myXML";
import { ServerConfig } from "../config/systemClass";
const os = require('os');
export let systemConfig = new ServerConfig;
const ConfigName = "serverConfig.xml";
export async function initConfig() {
try {
let buff = fs.readFileSync(path.join(__dirname.substring(0,__dirname.indexOf("out")), ConfigName));
let configStr = buff.toString();
let configInfo:any = await analysisXml(configStr);
if (!configInfo || !configInfo.config) throw new BizError('xml中无配置');
else {
let {port, mongodb, secret, getOpenIdUrl, appId, qcc } = configInfo.config;
systemConfig.port = parseInt(port[0]);
systemConfig.secret = secret[0];
systemConfig.getOpenIdUrl = getOpenIdUrl[0];
systemConfig.appId = appId[0];
const MongoPath = mongodb[0].path[0];
const MongoPort = mongodb[0].port[0];
const MongoW = mongodb[0].w[0];
const MongoDataBase = mongodb[0].dataBase[0];
const MongoWtimeoutMS = mongodb[0].wtimeoutMS[0];
systemConfig.mongodbStr = analysisMongoConnectStr( MongoPath, MongoPort, MongoDataBase, MongoW, MongoWtimeoutMS);
systemConfig.qccKey = qcc[0].key[0];
systemConfig.qccSecretKey = qcc[0].SecretKey[0];
}
console.log("config init success");
} catch(err) {
console.log('ERROR => 服务器配置解析错误 请检查根目录下 serverConfig.xml 文件是否正确');
console.log(err);
throw new BizError("服务器配置解析错误 请检查根目录下 serverConfig.xml 文件是否正确");
}
}
function analysisMongoConnectStr(path, port, dataBase, w, timeOutMs) {
return `mongodb://${path}:${port}/${dataBase}?w=${w}&wtimeoutMS=${timeOutMs}`
}
\ No newline at end of file
/**
* 系统配置类
*
*/
export class ServerConfig {
/**系统配置 */
port:number;
mongodbStr:string;
secret:string;
/**小程序相关配置 */
getOpenIdUrl:string;
appId:string;
/**短信相关配置 */
smsSDKId:number;
smsAppKey:string;
smsSign:string;
smsModelChangePwd:number;
smsModelPointOut:number;
smsModelInitPointOut:number;
/**百度地图api */
ak:string
/**企查查 */
qccKey:string;
qccSecretKey:string;
}
\ No newline at end of file
/**
* 企业经营数据 数据层
*
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const enterpriseBusinesSchema = new Schema({
year:{type:Number, index:true},//年度
// quarter:{type:Number, index:true},//季度
uscc:{type:String, index:true},//关联企业
name:{type:String, index:true},//企业名称
industry:[Number],//领域 冗余
BI:{type:Number, default:0},//营业收入
RD:{type:Number, default:0},//研发投入
TXP:{type:Number, default:0},//纳税
// tax:{type:Number, default:0},//税收
// revenue:{type:Number, default:0},//财政收入
// FAI:{type:Number, default:0},//固定资产投入
startTimeMs:Number,//开始时间
endTimeMs:Number,//结束时间
createTime:Number,//填写时间
});
var enterpriseBusinesModel;
export function initModel(){
enterpriseBusinesModel = baseDB.model('enterpriseBusiness', enterpriseBusinesSchema);
enterpriseBusinesModel.selectOnceData = async function (paramater:object) {
let selectInfo = await enterpriseBusinesModel.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);
});
}
/**
* 添加多个数据
* @param addList
*/
export async function addManyBusinessData(addList) {
await enterpriseBusinesModel.insertMany(addList);
}
export async function findOnceBusinessDataByParam(param) {
return await enterpriseBusinesModel.selectOnceData(param);
}
export async function deleteOnceBusinessDataByParam(param) {
return await enterpriseBusinesModel.deleteOne(param);
}
/**
* 获取特定企业某年度的经营数据
* @param uscc 企业统一信用代码
* @param year 年度
*/
export async function findBusinessDataByParam(param) {
return await enterpriseBusinesModel.find(param);
}
export async function findEnterpriseBusinessToPageByParam(param, pageNumber) {
return await enterpriseBusinesModel.find(param).skip((pageNumber-1)*10).limit(10);
}
export async function findEnterpriseBusinessCountByParam(param) {
return await enterpriseBusinesModel.find(param).countDocuments()
}
export async function statisBusinessDataByParam(param) {
let statisList = await enterpriseBusinesModel.aggregate([
{"$match":param},
{"$group":{
_id:"year",
BICount:{"$sum":"$BI"},
RDCount:{"$sum":"$RD"},
TXPCount:{"$sum":"$TXP"}
}}
]);
let statisInfo = statisList[0];
return {
BICount:statisInfo.BICount || 0,
RDCount:statisInfo.RDCount || 0,
TXPCount:statisInfo.TXPCount || 0
}
}
\ No newline at end of file
/**
* 企业信息表
* draftLock 草稿锁 当任务提交的时候,将此字段改为true
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
import { RAS } from '../../config/enum';
/**
* 创始团队
*/
const initialTeamSchema = new Schema({
type:Number,//创始团队人才类型
memberName:String,//成员姓名
memberSex:Number,//成员性别
memberAge:Number,//成员年龄 出生年月时间戳
memberDEGREE:Number,//成员最高学历
memberSchool:String,//毕业学校
des:String,//履历描述
},{_id:false});
/**
* 企业资质
*/
const qualificationSchema = new Schema({
isHighTech:Boolean,
highTechMs:Number,//高新技术
isZjtx:Boolean,
zjtxMs:Number,//专精特新
isXjrpy:Boolean,
xjrpyMs:Number,//小巨人培育
isXjr:Boolean,
xjrMs:Number,//小巨人
beOnTheMarket:[Number],//上市情况
isBeOnTheMarket:{type:Boolean, default:false}//是否上市
}, {_id:false});
/**
* 专利
*/
const intellectualPropertySchema = new Schema({
alienPatent:Number,//海外专利
classIPatent:Number,//一类专利
secondClassPatent:Number,//二类专利
}, {_id:false});
/**
* 主要人员
*/
const employeesSchema = new Schema({
job:String,//职务
name:String,//姓名
}, {_id:false});
/**
* 行业领域
*/
const industrySchema = new Schema({
industryCode:String,//行业门类code
industry:String,//行业门类描述
subIndustryCode:String,//行业大类code
subIndustry:String,//行业大类描述
middleCategoryCode:String,//行业中类code
middleCategory:String,//行业中类描述
smallCategoryCode:String,//行业小类code
smallCategory:String,//行业小类描述
}, {_id:false});
/**
* 股权结构
*/
const ownershipSchema = new Schema({
name:String, //名称
finalBenefitPercent:Number, //最终受益股份
stockPercent:Number, //持股比例
stockType:String, //投资人类型
realCapi:Number, //实缴出资额
paidUpCapitalUnit:String, //实缴出资额单位
capiDate:Number, //实缴时间
subscribedCapital:Number, //认缴出资额数额
subscribedCapitalUnit:String, //认缴出资额单位
shoudDate:Number, //认缴出资时间
}, {_id:false});
/**
* 科创分
*/
const stemSchema = new Schema({
industry:String, //一级行业
subIndustry:String, //二级行业
industryRanking:Number, //行业位置,百分比(在同行中处于前多少)
score:Number, //分数
},{_id:false});
/**
* 标签
*/
const enterpriseLabelSchema = new Schema({
labelId:String,
state:{type:Boolean, default:true},//状态 false表示标签失效
},{_id:false});
const enterpriseSchema = new Schema({
uscc:{type:String, index: true},//统一信用代码
name:{type:String, index: true},//企业名称
isFocus:{type:Boolean, default: false},//是否重点企业
// enterpriseCategory:{type:Number},//企业(机构)类型 弃用
logonTime:Number,//注册时间
settledTime:Number,//入驻时间
timeOfImmigration:Number,//迁入时间
privateIndustry:Number,//领域 (清洗后)
privateSubIndustry:Number,//子领域 (清洗后)
qccindustry1:String,//企查查行业类别1
qccIndustry2:String,//企查查行业类别2
qccIndustry3:String,//企查查行业类别3
qccIndustry4:String,//企查查行业类别4
RAS:{type:Number, index:true},//登记状态
logOffMS:{type:Number},//注销时间
legalPerson:String,//法人
shijiaoziben:{type:String, default:'-'},//实缴资本
zhuceziben:{type:String, default:'-'},//注册资本
dianHua:String,//电话
gengDuoDianHua:{type:String},//更多电话
mail:{type:String, default:'-'},//邮箱
moreMail:{type:String, default:'-'},//更多邮箱
enterpriseType:{type:Number, 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,//最新年报年份
isNaturalPersonHolding:{type:Boolean, default:true},//是否自然人控股企业
mainBusiness:{type:String, default:""},//主营业务
logonAddress:{type:[String], default:[]},//注册地址
operatingAddress:{type:[String], default:[]},//经营地址
inZJ:{type:Boolean, default:true},//是否在张江 默认=true
inZJTime:{type:Number},//入驻张江时间
inZJPark:String,//入驻园区
leasedArea:Number,//租赁面积(平方米)
contacts:String,//联系人
contactsPhone:String,//联系人手机号
//经纬度
lng:String,//经度
lat:String,//纬度
//系统
createTime:Number,//录入时间
createUserId:String,//创建人 关联
//子表
initialTeam:{type:[initialTeamSchema], default:[]},//创始团队 无使用场景
labels:{type:[enterpriseLabelSchema], default:[]},//标签系统 弃用
qualification:{type:qualificationSchema},//企业资质 资质证书
intellectualProperty:{type:intellectualPropertySchema},//专利 无使用场景
labelList:{type:[Number], default:[]},//标签列表 参考枚举标签
ownership:{type:[ownershipSchema], default:[]},//股权结构
industry:{type:industrySchema},//行业信息分类
employees:{type:[employeesSchema], default:[]},//主要人员
stem:{type:stemSchema, default:{}}//科创分
});
var enterpriseModel;
export function initModel(){
enterpriseModel = baseDB.model('enterprise', enterpriseSchema);
enterpriseModel.selectOnceData = async function (paramater:object) {
let selectInfo = await enterpriseModel.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);
});
}
/**
* 创建新的企业数据
* @param param 添加的字段对象
*/
export async function createEnterpriseBase(param) {
param.createTime = new Date().valueOf();
await enterpriseModel.create(param);
}
/**
* 创建新的企业数据
* @param param 添加的字段对象
*/
export async function initEnterpriseBase(list) {
await enterpriseModel.insertMany(list);
}
/**
*/
export async function findEnterpriseListByParam(param) {
return await enterpriseModel.find(param);
}
export async function findEnterpriseToPageByParam(param, skipCount) {
return await enterpriseModel.find(param).skip((skipCount-1)*10).limit(10);
}
/**
*/
export async function findEnterpriseCountByParam(param) {
return await enterpriseModel.find(param).countDocuments();
}
/**
* 通过企业统一信用代码获取企业信息
* 支持.save方法保存对象修改
* @param uscc 企业统一信用代码
* @returns {}
*/
export async function findEnterpriseByUscc(uscc:string) {
return await enterpriseModel.selectOnceData({uscc});
}
export async function findEnterpriseByName(name:string) {
return await enterpriseModel.selectOnceData({name});
}
export async function statisIndustryEnterprise() {
let statisList = await enterpriseModel.aggregate([
{"$match":{RAS:RAS.续存}},
{"$group":{_id:"$privateIndustry", count:{"$sum":1} }}
]);
return statisList.length;
}
export async function statisCanBaoEnterprise() {
let statisList = await enterpriseModel.aggregate([
{"$match":{RAS:RAS.续存}},
{"$group":{_id:"1", count:{"$sum":"$canBaoRenShu"} }}
]);
return statisList[0].count;
}
export async function statisIndustryTypeEnterprise() {
let statisList = await enterpriseModel.aggregate([
{"$match":{RAS:RAS.续存}},
{"$group":{_id:"$privateIndustry", count:{"$sum":1} }}
]);
return statisList;
}
\ 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,//创建时间
labelType:Number,//标签类型 LABELTYPE 系统标签不可以删除
state:{type:Boolean, default:true}//是否停用 false表示已停用
});
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(labelType:number, name:string, id:string) {
let addInfo = { id, 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});
}
/**
* 获取标签名称与标签类型map
* @returns
*/
export async function getEffectiveLabelMap() {
let list = await labelModel.find({state:true});
let map = {};
list.forEach( info => {
let {id, labelName, labelType} = info;
map[id] = {labelName, labelType};
});
return map;
}
/**
* 获取标签名称与状态map
* @returns
*/
export async function getLabelNamMap() {
let list = await labelModel.find({});
let nameMap = {};
list.forEach(info => {
let {id, labelName, state} = info;
nameMap[id] = {labelName, state};
});
return nameMap;
}
\ 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,//标签id
road:Number,//途径
createTime: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
/**
* 企业变化 数据层
*
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const enterpriseChangeSchema = new Schema({
year:{type:Number, index:true},//年度
month:{type:Number},//月度
type:{type:Number},//类型 参考枚举 ENTERPRISECHANGETYPE
count:{type:Number},
createTime:{type:Number},//添加时间
});
var enterpriseChangeModel;
export function initModel(){
enterpriseChangeModel = baseDB.model('enterpriseChange', enterpriseChangeSchema);
enterpriseChangeModel.selectOnceData = async function (paramater:object) {
let selectInfo = await enterpriseChangeModel.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 findDataByParam(param) {
return await enterpriseChangeModel.find(param);
}
/**
* 标签系统
*/
import {Schema} from 'mongoose';
import { baseDB } from '../db/mongo/dbInit';
const overallOperationSchema = new Schema({
id:{type:String, index:true},//标识
year:{type:Number},
operationType:{type:Number},//类型 枚举 OPERATIONTYPE
count:Number,
1:{type:Number},//1月
2:{type:Number},//2月
3:{type:Number},//3月
4:{type:Number},//4月
5:{type:Number},//5月
6:{type:Number},//6月
7:{type:Number},//7月
8:{type:Number},//8月
9:{type:Number},//9月
10:{type:Number},//10月
11:{type:Number},//11月
12:{type:Number},//12月
ct:Number
});
var overallOperationModel;
export function initModel(){
overallOperationModel = baseDB.model('overalloperation', overallOperationSchema);
overallOperationModel.selectOnceData = async function (paramater:object) {
let selectInfo = await overallOperationModel.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 findData(param) {
return await overallOperationModel.selectOnceData(param);
}
export async function createData(param) {
await overallOperationModel.create(param);
}
export async function selectCountByParam(param) {
return await overallOperationModel.find(param).countDocuments();
}
export async function selectDataByParam(param) {
return await overallOperationModel.find(param);
}
export async function typeStatis(param) {
let statsList = await overallOperationModel.aggregate([
{"$match":param},
{"$group":{_id:"$appealType", count:{"$sum":1}} }
]);
return statsList;
}
/**
* 企业活动
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const activitySchema = new Schema({
aId:{type:String, index: true},//政策id
title:String,//标题
content:String,//内容
type:Number,//类型
startTime:{type:Number, index: true},//开始时间
endTime:{type:Number, index: true},//结束时间
location:String,//位置
img:String,//图片
releaseTime:Number,//发布时间
createTime:Number,//创建时间
createUser:String,//创建人
});
var activityModel;
export function initModel(){
activityModel = baseDB.model('activity', activitySchema);
activityModel.selectOnceData = async function (paramater:object) {
let selectInfo = await activityModel.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 findActivityList(param) {
return await activityModel.find(param);
}
export async function findActivityListPage(param, page) {
return await activityModel.find(param).skip((page-1)*10).limit(10);;
}
export async function findActivityCount(param) {
return await activityModel.find(param).countDocuments();
}
export async function findOnceActivity(param) {
return await activityModel.selectOnceData(param)
}
export async function addActivity(param) {
return await activityModel.create(param);
}
export async function deleteOneActivity(param) {
return await activityModel.deleteOne(param);
}
/**
* 政策
*/
import {Schema} from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const policySchema = new Schema({
pId:{type:String, index: true},//政策id
title:{type:String, index:true},//标题
content:String,//内容
source:String,//来源
type:{type:Number},//类型 POLICYTYPE
subsidyType:Number,//补贴类型
createTime:{type:Number, index:true},//创建时间
endTime:{type:Number, index:true},//失效时间
industry:{type:Number, index:true},
label:{type:[Number], default:[]},//关联标签
});
var policyModel;
export function initModel(){
policyModel = baseDB.model('policy', policySchema);
policyModel.selectOnceData = async function (paramater:object) {
let selectInfo = await policyModel.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 findData(param) {
return await policyModel.find(param);
}
export async function findDataToPage(param, page) {
return await policyModel.find(param).skip((page-1)*10).limit(10);
}
export async function findDataCount(param) {
return await policyModel.find(param).countDocuments();
}
export async function findOnceData(param) {
return await policyModel.selectOnceData(param);
}
export async function addPolicy(param) {
return await policyModel.create(param);
}
export async function deleteOnePolicy(param) {
return await policyModel.deleteOne(param);
}
export async function typeStatis(param) {
let statsList = await policyModel.aggregate([
{"$match":param},
{"$group":{_id:"$type", count:{"$sum":1}} }
]);
return statsList;
}
/**
* 述求
*/
import { Schema } from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const appealsSchema = new Schema({
appId:{type:String},//id
uscc:{type:String, index: true},//关联企业
enterpriseName:{type:String},//关联企业企业名称
createTime:Number,//创建时间
createUserId:String,//创建人
appealType:{type:Number, index: true},//诉求类型 APPEALTYPE
appeal:{type:String},//诉求描述
state:{type:Number, index: true, default:1},//解决状态
});
var appealsModel;
export function initModel(){
appealsModel = baseDB.model('appeals', appealsSchema);
appealsModel.selectOnceData = async function (paramater:object) {
let selectInfo = await appealsModel.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 findData(param) {
return await appealsModel.selectOnceData(param);
}
export async function createData(param) {
param.createTime = new Date().valueOf();
await appealsModel.create(param);
}
export async function selectCountByParam(param) {
return await appealsModel.find(param).countDocuments();
}
export async function selectDataByParam(param) {
return await appealsModel.find(param);
}
export async function typeStatis(param) {
let statsList = await appealsModel.aggregate([
{"$match":param},
{"$group":{_id:"$appealType", count:{"$sum":1}} }
]);
return statsList;
}
/**
* 跟踪
*/
import { Schema } from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const resolveDynamicsSchema = new Schema({
rId:{type:String},//id
uscc:{type:String, index: true},//关联企业
sId:{type:String, index:true},//服务id
vId:{type:String, index:true},//服务id
enterpriseName:{type:String},//关联企业企业名称
tracking:{type:String},//跟踪人id
trackingTime:{type:Number},//跟踪时间
trackingDesc:String,//跟踪进度
resolutionStatus:{type:Number},//解决情况
createTime:Number,//创建时间
createUserId:String,//创建人
});
var resolveDynamicsModel;
export function initModel(){
resolveDynamicsModel = baseDB.model('resolvedynamics', resolveDynamicsSchema);
resolveDynamicsModel.selectOnceData = async function (paramater:object) {
let selectInfo = await resolveDynamicsModel.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 findData(param) {
return await resolveDynamicsModel.selectOnceData(param);
}
export async function createData(param) {
param.createTime = new Date().valueOf();
await resolveDynamicsModel.create(param);
}
export async function selectCountByParam(param) {
return await resolveDynamicsModel.find(param).countDocuments();
}
export async function selectDataByParam(param) {
return await resolveDynamicsModel.find(param);
}
/**
* 政策落实
*/
import { Schema } from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const policyImplementationSchema = new Schema({
piId:{type:String},
uscc:{type:String, index: true},//关联企业
enterpriseName:String,//企业名称
pId:{type:String, index: true},//关联政策
policyName:String,//政策名称
implement:Number,//落实类型
state:{type:Number},//落实状态
desc:String,//具体描述
notes:String,//备注
implementTime:Number,//落实时间
createTime:Number,//创建时间
createUser:String,
type:Number//政策类型
});
var policyImplementationModel;
export function initModel(){
policyImplementationModel = baseDB.model('policyImplementation', policyImplementationSchema);
policyImplementationModel.selectOnceData = async function (paramater:object) {
let selectInfo = await policyImplementationModel.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 findOneData(param) {
return await policyImplementationModel.selectOnceData(param);
}
export async function findData(param) {
return await policyImplementationModel.find(param);
}
export async function findDataCount(param) {
return await policyImplementationModel.find(param).countDocuments();
}
export async function addData(param) {
return await policyImplementationModel.create(param);
}
export async function findDataToPage(param, pageNumber) {
return await policyImplementationModel.find(param).skip((pageNumber-1)*10).limit(10);
}
export async function deleteOne(param) {
return await policyImplementationModel.deleteOne(param);
}
\ No newline at end of file
/**
* 企业服务表
*/
import { Schema } from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
import { SOLVESTATECLIENT } from '../../config/enum';
const serviceSchema = new Schema({
sId:{type:String, index:true},//服务id
uscc:{type:String, index: true},//关联企业
name:{type:String, index: true},//关联企业名称
researchTime:{type:Number},//调研时间
leaderName:{type:String},//出席领导
accompany:{type:[String], default:[]},//陪同人员
contacts:String,//联系人
contactsPhone:String,//联系人电话
content:String,//洽谈内容
follow:{type:String},//跟进人
followContent:String,//跟进内容
researchType:Number, //调研类型 RESEARCHTYPE
appealType:{type:String, index:true, default:SOLVESTATECLIENT.未解决},//诉求类型 关联企业述求的id
appealTypeEnumId:{type:Number},//诉求类型 关联枚举
appeal:{type:String},//诉求描述
solutionType:{type:Number},//解决方式 SOLUTIONTYPE
state:{type:Number, index: true},//解决状态
desc:String,//解决的备注
requestKeywords:[Number],//关键词
createTime:Number,//创建时间
processingTime:{type:Number, default:0},//处理时间
endTime:{type:Number, default:0},//结束时间
promoterId:{type:String},//发起人(添加人)
});
var serviceModel;
export function initModel(){
serviceModel = baseDB.model('service', serviceSchema);
serviceModel.selectOnceData = async function (paramater:object) {
let selectInfo = await serviceModel.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 createData(param) {
param.createTime = new Date().valueOf();
await serviceModel.create(param);
}
export async function selectCountByParam(param) {
return await serviceModel.find(param).countDocuments();
}
export async function selectDataByParam(param) {
return await serviceModel.find(param);
}
export async function selectDataByParamToPage(param, pageNumber) {
return await serviceModel.find(param).skip((pageNumber-1)*10).limit(10);;;
}
export async function selectData(param) {
return await serviceModel.selectOnceData(param);
}
\ No newline at end of file
/**
* 走访
*/
import { Schema } from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
import { SOLVESTATECLIENT, STATE } from '../../config/enum';
const visitSchema = new Schema({
vId:{type:String, index:true},//走访id
uscc:{type:String, index: true},//关联企业
name:{type:String, index: true},//关联企业名称
researchTime:{type:Number},//调研时间
leaderName:{type:String},//出席领导
accompany:{type:[String], default:[]},//陪同人员
contacts:String,//联系人
contactsPhone:String,//联系人电话
content:String,//洽谈内容
follow:{type:String},//跟进人
followContent:String,//跟进内容
researchType:Number, //调研类型 RESEARCHTYPE
appealType:{type:String, index: true},//诉求类型 关联企业述求的id
appealTypeEnumId:{type:Number},//诉求类型 关联枚举
appeal:{type:String},//诉求描述
solutionType:{type:Number},//解决方式 SOLUTIONTYPE
state:{type:Number, index:true, default:SOLVESTATECLIENT.未解决},//解决状态
desc:String,//解决的备注
requestKeywords:[Number],//关键词
createTime:Number,//创建时间
processingTime:{type:Number, default:0},//处理时间
endTime:{type:Number, default:0},//结束时间
promoterId:{type:String},//发起人(添加人)
});
var visitModel;
export function initModel(){
visitModel = baseDB.model('visit', visitSchema);
visitModel.selectOnceData = async function (paramater:object) {
let selectInfo = await visitModel.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 createData(param) {
let addInfo = Object.assign({createTime:new Date().valueOf()}, param);
await visitModel.create(addInfo);
}
export async function findData(param) {
return await visitModel.find(param);
}
export async function findDataToPage(param, pageNumber) {
return await visitModel.find(param).skip((pageNumber-1)*10).limit(10);
}
export async function selectData(param) {
return await visitModel.selectOnceData(param);
}
export async function findDataCount(param) {
return await visitModel.find(param).countDocuments();
}
export async function typeStatis(param) {
let statsList = await visitModel.aggregate([
{"$match":param},
{"$group":{_id:"$appealType", count:{"$sum":1}} }
]);
return statsList;
}
export async function selectCountByParam(param) {
return await visitModel.find(param).countDocuments();
}
export async function statisYearCount(param) {
let statisList = await visitModel.aggregate([
{"$match":param},
{
$group: {
_id: {
year: { $year: { $toDate: "$researchTime" } }, // 提取年份
month: { $month: { $toDate:"$researchTime" } } // 提取月份
},
count: { $sum: 1 } // 计算每月的记录数
}
},
{
$sort: { "_id.year": 1, "_id.month": 1 } // 按年月排序
}
]);
return statisList
}
/**
* 走访安排 走访计划
*/
import { Schema } from 'mongoose';
import { baseDB } from '../../db/mongo/dbInit';
const visitSchema = new Schema({
vpId:{type:String, index:true},//走访计划id
uscc:{type:String, index: true},//关联企业
name:{type:String},//关联企业名称
visitTime:{type:Number},//走访时间
attendee:String,//走访人员 谁创建的就是谁
accompany:{type:[String], default:[]},//陪同人员
desc:String,//备注
promoterId:{type:String},//发起人(添加人)
createTime:Number,//创建时间
});
var visitPlanModel;
export function initModel(){
visitPlanModel = baseDB.model('visitplan', visitSchema);
visitPlanModel.selectOnceData = async function (paramater:object) {
let selectInfo = await visitPlanModel.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 createData(param) {
let addInfo = Object.assign({createTime:new Date().valueOf()}, param);
await visitPlanModel.create(addInfo);
}
export async function findData(param) {
return await visitPlanModel.find(param);
}
export async function findDataToPage(param, pageNumber) {
return await visitPlanModel.find(param).skip((pageNumber-1)*10).limit(10);
}
export async function selectData(param) {
return await visitPlanModel.selectOnceData(param);
}
export async function findDataCount(param) {
return await visitPlanModel.find(param).countDocuments();
}
/**
* 用户表
*/
import { Schema } from 'mongoose';
import { baseDB } from '../db/mongo/dbInit';
const userSchema = new Schema({
name:String,//名称
loginId: {type:String, index:true},//登录账号
userId:{type:String, index:true},
pwd:String,//密码
phone:String,//登录手机号
token:String,
tokenMs:Number,
adminToken:String,
adminTokenMs:Number,
userType:Number,//用户类型
followEnterprise:{type:[String], default:[]} //关注企业
});
var userModel;
export function initModel(){
userModel = baseDB.model('user', userSchema);
userModel.selectOnceData = async function (paramater:object) {
let selectInfo = await userModel.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 findUserInfoByLoginId(loginId:string) {
return await userModel.selectOnceData({loginId});
}
export async function findUserInfoByUserId(userId:string) {
return await userModel.selectOnceData({userId});
}
export async function findUserMap() {
let map = {};
let userList = await userModel.find({});
userList.forEach(info => {
map[info.userId] = info.name;
});
return map;
}
export async function createUser(addInfo) {
await userModel.create(addInfo);
}
export async function createManyUser(addList) {
await userModel.insertMany(addList);
}
export async function findUserFollowEnterpriseMap(userId:string) {
let map = {};
let userItem = await userModel.findOne({userId});
userItem.followEnterprise.forEach(enterpriseId => {
map[enterpriseId] = 1;
});
return map;
}
export async function findUserByParam(param) {
let userList = await userModel.find(param);
return userList;
}
import mongoose = require('mongoose');
let defaultOptions = {
useNewUrlParser:true,
auto_reconnect:true,
// reconnectTries:1000,
// reconnectInterval:3000,
keepAlive: 1,
connectTimeoutMS: 3000,
useCreateIndex: true,
useUnifiedTopology: true
};
export async function createDbConnect(connectUrl:string, options?:object) {
if (!options) options = defaultOptions;
return await mongoose.createConnection(connectUrl, options).catch(
(err)=>{
throw err
});
}
import { systemConfig } from "../../config/serverConfig";
import { BizError } from "../../util/bizError";
import { createDbConnect } from "./dbConnect";
import { initTable } from "./tableInit";
var baseDB;
export async function initDB() {
//如果配置了mongoServerConstVal 才会连接mongo
if (systemConfig.mongodbStr) {
console.log(systemConfig.mongodbStr);
baseDB = await createDbConnect(systemConfig.mongodbStr).catch(err => {
throw err
});
await initTable();
console.log('mongodb init success');
} else {
throw new BizError("xml中未配置mongo连接字符串 无法连接到mongodb");
}
}
export { baseDB };
import * as businessdataModel from "../../data/enterprise/businessdata";
import * as enterpriseModel from "../../data/enterprise/enterprise";
import * as labelModel from "../../data/label";
import * as enterpriseLabelLogModel from "../../data/log/enterpriseLabelLog";
import * as enterpriseLogModel from "../../data/log/enterpriseLog";
import * as activityModel from "../../data/policy/activity";
import * as policyModel from "../../data/policy/policy";
import * as policyImplementationModel from "../../data/service/policyImplementation";
import * as serviceModel from "../../data/service/service";
import * as visitModel from "../../data/service/visit";
import * as userModel from "../../data/user";
import * as dynamicModel from "../../data/service/dynamic";
import * as appealsModel from "../../data/service/appeals";
import * as visitPlanModel from "../../data/service/visitPlan";
import * as overallOperationModel from "../../data/overallOperation"
export async function initTable() {
enterpriseModel.initModel();
enterpriseLogModel.initModel();
activityModel.initModel();
policyModel.initModel();
policyImplementationModel.initModel();
serviceModel.initModel();
visitModel.initModel();
userModel.initModel();
businessdataModel.initModel();
labelModel.initModel();
enterpriseLabelLogModel.initModel();
dynamicModel.initModel();
appealsModel.initModel();
visitPlanModel.initModel();
overallOperationModel.initModel();
}
\ No newline at end of file
import { dataOut } from "./biz/dataOut";
import { initData } from "./biz/dataSync/dataInit";
import { initEnterpriseData } from "./biz/dataSync/newDataInit";
import { initQueue } from "./biz/labelEnterpriseList";
import { initConfig, systemConfig} from "./config/serverConfig";
import { initDB } from "./db/mongo/dbInit";
import { httpServer } from "./net/http_server";
async function lanuch() {
/**初始化配置解析 */
await initConfig();
/**初始化数据库 */
await initDB();
/**创建http服务 */
httpServer.createServer(systemConfig.port);
console.log('This indicates that the server is started successfully.');
// await initEnterpriseData();
// await dataOut();
}
lanuch();
\ No newline at end of file
import { ERRORENUM } from "../config/errorEnum";
import { BizError } from "../util/bizError";
var formidable = require("formidable");
const path = require('path');
export async function parseFormParam(req, res, next) {
var form = new formidable.IncomingForm();
form.uploadDir = path.join(__dirname.substring(0,__dirname.indexOf("out")), 'files');
form.parse(req, (err, fields, files)=>{
if (err) {
next(err)
}
else {
req.fields = fields;
req.files = files;
if (!files.file) {
return next(new BizError(ERRORENUM.文件上传失败) )
}
if ( files.file.type == 'image/png') {
req.fileType = '.png';
next();
} else if (files.file.type == 'image/jpg' || files.file.type == 'image/jpeg') {
req.fileType = '.jpg';
next();
} else {
return next(new BizError(ERRORENUM.只能上传pngjpg图片) )
}
}
})
}
import { bizlive } from "tencentcloud-sdk-nodejs";
import { ERRORCODEENUM } from "../config/errorEnum";
/**
* 中间件 错误返回
* @param err
* @param req
* @param res
* @param next
*/
export function httpErrorHandler(err, req, res, next) {
console.log("in httpErrorHandler");
console.log(err);
//todo 自定义错误编码
if (err) {
if ( ERRORCODEENUM[err.message] ) {
res.success({success:false, msg:err.message, code:ERRORCODEENUM[err.message]});
next();
}
else {
res.success({success:false, msg:err.message, code:500});
next();
}
}
}
\ No newline at end of file
import { ERRORENUM } from "../config/errorEnum";
import { findEnterpriseByUscc } from "../data/enterprise/enterprise";
import { findUserInfoByLoginId, findUserInfoByUserId } from "../data/user";
import { BizError } from "../util/bizError";
/**
* 中间件
* @param req
* @param res
* @param next
* @returns
*/
export async function checkToken(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 findUserInfoByUserId(userId);
if (!userInfo) return next(new BizError(ERRORENUM.非法登录, `userId:${userId} token:${reqToken}`));
if (userInfo.token != reqToken ) return next(new BizError(ERRORENUM.身份验证过期, `userId:${userId} token:${reqToken}`));
req.userInfo = {
userId:userInfo.userId,
name:userInfo.name,
userType:userInfo.userType
}
next();
}
/**
* 中间件
* @param req
* @param res
* @param next
* @returns
*/
export async function checkAdminToken(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 findUserInfoByUserId(userId);
if (!userInfo) return next(new BizError(ERRORENUM.非法登录, `userId:${userId} token:${reqToken}`));
if (userInfo.adminToken != reqToken ) return next(new BizError(ERRORENUM.身份验证过期, `userId:${userId} token:${reqToken}`));
req.userInfo = {
userId:userInfo.userId,
name:userInfo.name,
userType:userInfo.userType
}
next();
}
export function watch(req, res, next) {
res.success = success.bind({res:res, req:req});
return next();
}
/**
* 中间件正确返回方法
* @param data
*/
function success(data) {
let resultPack;
if (data ) {
if ( data.success === undefined || data.success === true ) {
resultPack = {data, success:true, code:200};
}
else {
resultPack = data;
}
}else {
resultPack = {code:500, success:false, msg:'result is null'};
}
this.res.send(resultPack);
}
import express = require('express');
import bodyParser = require('body-parser');
import routers = require('../routers/router');
import compression = require('compression');
import { watch } from '../middleware/watch';
import { httpErrorHandler } from '../middleware/httpErrorHandler';
import * as path from "path";
import * as fallback from 'express-history-api-fallback';
export class httpServer {
static createServer(port:number) {
var httpServer = express();
httpServer.all('*', (req, res, next) => {
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header('Access-Control-Allow-Headers', 'Content-Type,request-origin,userid,token');
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header('Access-Control-Allow-Credentials', true);
res.header("X-Powered-By", ' 3.2.1');
next();
// if(req.method === 'OPTIONS'){
// res.statusCode = 200;
// res.end();
// }else{
// next();
// }
});
// httpServer.use(bodyParser.json({limit:'5mb'}));
// httpServer.use(bodyParser.urlencoded({limit:'5mb', extends:true}));
httpServer.use(express.static('img') );
httpServer.use(express.static("./static") );
httpServer.use(express.static("./files") );
const root = path.join(__dirname, "../../public");
httpServer.use(express.static(root));
httpServer.use(fallback('index.html', { root }));
httpServer.use(compression());
httpServer.use(watch);
httpServer.use(bodyParser.json({limit:"5000kb"}));
routers.setRouter(httpServer);
httpServer.use(httpErrorHandler);
httpServer.listen(port);
console.log('server listen on port:'+port);
}
}
\ No newline at end of file
/**
* 管理后台
*/
import * as asyncHandler from 'express-async-handler';
import * as adminBiz from '../../biz/admin';
import { eccReqParamater } from '../../util/verificationParam';
import { checkAdminToken } from '../../middleware/user';
import * as appealsBiz from '../../biz/service/appeals';
import * as enterpriseBiz from '../../biz/enterprise'
export function setRouter(httpServer) {
httpServer.post('/zj/admin/home/base', checkAdminToken, asyncHandler(home_base));//
httpServer.post('/zj/admin/home/change', checkAdminToken, asyncHandler(home_enterprise_change));//
httpServer.post('/zj/admin/home/business', checkAdminToken, asyncHandler(home_business));//
httpServer.post('/zj/admin/home/activity', checkAdminToken, asyncHandler(home_activity));//
httpServer.post('/zj/admin/home/policy', checkAdminToken, asyncHandler(home_policy));//
httpServer.post('/zj/admin/home/visit', checkAdminToken, asyncHandler(home_visit));//
httpServer.post('/zj/admin/home/business/info', checkAdminToken, asyncHandler(home_business_info));//
httpServer.post('/zj/admin/home/business/update', checkAdminToken, asyncHandler(home_business_update));//
httpServer.post('/zj/admin/jiandang/add', checkAdminToken, asyncHandler(jiandang_add_one));//企业服务 添加走访
httpServer.post('/zj/admin/enterprise/info/list', checkAdminToken, asyncHandler(enterprise_list));//企业信息列表
httpServer.post('/zj/admin/enterprise/info/attention', checkAdminToken, asyncHandler(enterprise_follow));//企业信息列表 关注
httpServer.post('/zj/admin/enterprise/info/outattention', checkAdminToken, asyncHandler(enterprise_out_follow));//企业信息列表 取消关注
httpServer.post('/zj/admin/enterprise/business/list', checkAdminToken, asyncHandler(enterprise_business_list));//企业经营数据列表
httpServer.post('/zj/admin/service/visit/list', checkAdminToken, asyncHandler(enterprise_visit_list));//领导走访
httpServer.post('/zj/admin/service/visit/add', checkAdminToken, asyncHandler(enterprise_visit_add));//添加领导走访
httpServer.post('/zj/admin/service/daily/list', checkAdminToken, asyncHandler(enterprise_daily_list));//日常服务列表
httpServer.post('/zj/admin/service/daily/add', checkAdminToken, asyncHandler(enterprise_daily_add));//添加日常服务
httpServer.post('/zj/admin/service/daily/resolvedynamics/add', checkAdminToken, asyncHandler(enterprise_daily_resolvedynamics_add));//添加日常服务追踪
httpServer.post('/zj/admin/service/daily/resolvedynamics/list', checkAdminToken, asyncHandler(enterprise_daily_resolvedynamics_list));//日常服务追踪记录
httpServer.post('/zj/admin/service/enterprise/select', checkAdminToken, asyncHandler(enterprise_select_list));//企业名称下拉框
//政策
httpServer.post('/zj/admin/service/policy/list',checkAdminToken, asyncHandler(policy_list));
httpServer.post('/zj/admin/service/policy/info',checkAdminToken, asyncHandler(policy_info));
httpServer.post('/zj/admin/service/policy/item',checkAdminToken, asyncHandler(policy_Item));
httpServer.post('/zj/admin/service/policy/update',checkAdminToken, asyncHandler(policy_update));
httpServer.post('/zj/admin/service/policy/add',checkAdminToken, asyncHandler(policy_add));
httpServer.post('/zj/admin/service/policy/del',checkAdminToken,asyncHandler(policy_del));
//政策落实
httpServer.post('/zj/admin/service/policyimplementation/list',checkAdminToken, asyncHandler(policy_policyimplementation_list));
httpServer.post('/zj/admin/service/policyimplementation/update',checkAdminToken, asyncHandler(policy_policyimplementation_update));
httpServer.post('/zj/admin/service/policyimplementation/add',checkAdminToken, asyncHandler(policy_policyimplementation_add));
httpServer.post('/zj/admin/service/policyimplementation/delete',checkAdminToken, asyncHandler(policy_policyimplementation_delete));
httpServer.post('/zj/admin/service/policyimplementation/info',checkAdminToken, asyncHandler(policy_policyimplementation_info));
httpServer.post('/zj/admin/service/policy/select',checkAdminToken, asyncHandler(policy_select_policy));
httpServer.post('/zj/admin/user/select',checkAdminToken, asyncHandler(user_select));
httpServer.post('/zj/admin/appeal/select',checkAdminToken, asyncHandler(appeal_select));
//政策匹配
httpServer.post('/zj/admin/service/match/list',checkAdminToken, asyncHandler(policy_match_list));
httpServer.post('/zj/admin/service/match/enterpriselist',checkAdminToken, asyncHandler(policy_match_enterprise_list));
//活动
httpServer.post('/zj/admin/service/activity/list',checkAdminToken, asyncHandler(activity_list));
httpServer.post('/zj/admin/service/activity/add',checkAdminToken, asyncHandler(activity_add));
httpServer.post('/zj/admin/service/activity/item',checkAdminToken, asyncHandler(activity_item));
httpServer.post('/zj/admin/service/activity/info',checkAdminToken, asyncHandler(activity_info));
httpServer.post('/zj/admin/service/activity/update',checkAdminToken, asyncHandler(activity_update));
httpServer.post('/zj/admin/service/activity/delete',checkAdminToken, asyncHandler(activity_del));
httpServer.post('/zj/admin/service/activity/preview',checkAdminToken, asyncHandler(activity_preview));
httpServer.post('/zj/admin/service/activity/out',checkAdminToken, asyncHandler(activity_out));
}
/**
* 企业名称下拉框
* @param req
* @param res
*/
async function enterprise_select_list(req, res) {
let reqConf = {name:'String'};
let { name } = eccReqParamater(reqConf, req.body);
let result = await adminBiz.enterprise_name_list(name);
res.success(result);
}
/**
* 建档
* @param req
* @param res
*/
async function jiandang_add_one(req, res) {
let reqConf = {param:'Object'};
let { param } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await adminBiz.addEnterprise(userInfo, param);
res.success(result);
}
/**
* 企业信息列表
* @param req
* @param res
*/
async function enterprise_list(req, res) {
let reqConf = {selectStr:"String", industry:"Number", isNaturalPersonHolding:"Number", inZJTime:"[Number]", attribute:"Number", type:"Number", page:"Number"};
let skipList = ["selectStr", "industry", "isNaturalPersonHolding", "inZJTime", "attribute", "type"];
let { selectStr, industry, isNaturalPersonHolding, inZJTime, attribute, type, page } = eccReqParamater(reqConf, req.body, skipList);
let userInfo = req.userInfo;
let result = await adminBiz.enterpriseList(userInfo, selectStr, industry, isNaturalPersonHolding, attribute, type, page);
res.success(result);
}
async function enterprise_follow(req, res) {
let reqConf = {uscc:'String'};
let { uscc } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await adminBiz.addEnterpriseFollow(userInfo, uscc);
res.success(result);
}
async function enterprise_out_follow(req, res) {
let reqConf = {uscc:'String'};
let { uscc } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await adminBiz.delEnterpriseFollow(userInfo, uscc);
res.success(result);
}
async function enterprise_business_list(req, res) {
let reqConf = {selectStr:"String", industry:"Number", year:"Number", attribute:"Number", type:"Number", page:"Number"};
let skipList = ["selectStr", "industry", "year", "attribute", "type"];
let { selectStr, industry, year, attribute, type, page } = eccReqParamater(reqConf, req.body, skipList);
let userInfo = req.userInfo;
let result = await adminBiz.enterpriseBusinessList(selectStr, industry, year, attribute, type, page);
res.success(result);
}
async function enterprise_visit_list(req, res) {
let reqConf = {selectStr:"String", researchTime:"Number", researchType:"Number", appealType:"Number", state:"Number", page:"Number"};
let skipList = ["selectStr", "researchTime", "researchType", "appealType", "state"];
let { selectStr, researchTime, researchType, appealType, state, page } = eccReqParamater(reqConf, req.body, skipList);
let userInfo = req.userInfo;
let result = await adminBiz.enterpriseVisitList(selectStr, researchTime, researchType, appealType, state, page);
res.success(result);
}
async function enterprise_visit_add(req, res) {
let reqConf = {param:'Object', uscc:"String" };
let skipList = [];
let { param, uscc } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await adminBiz.addEnterpriseVisit(userInfo, uscc, param);
res.success(result);
}
async function enterprise_daily_list(req, res) {
let reqConf = {selectStr:"String", serivceTime:"Number", enterpriseType:"Number", state:"Number", page:"Number"};
let skipList = ["selectStr", "industry", "enterpriseType", "serivceTime", "state"];
let { selectStr, serivceTime, enterpriseType, state, page } = eccReqParamater(reqConf, req.body, skipList);
let userInfo = req.userInfo;
let result = await adminBiz.enterpriseServiceList(selectStr, serivceTime, enterpriseType, state, page);
res.success(result);
}
/**
* 添加服务
* @param req
* @param res
*/
async function enterprise_daily_add(req, res) {
let reqConf = {param:'Object', uscc:'String'};
let { param, uscc } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await adminBiz.addEnterpriseService(userInfo, uscc, param);
res.success(result);
}
/**
* 述求跟踪 添加跟踪
* @param req
* @param res
*/
async function enterprise_daily_resolvedynamics_add(req, res) {
let reqConf = {param:'Object', uscc:'String', sId:'String'};
let { param, uscc, sId} = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await adminBiz.addEnterpriseServiceResolveDynamics(userInfo, uscc, sId, param);
res.success(result);
}
async function enterprise_daily_resolvedynamics_list(req, res) {
let reqConf = { sId:'String'};
let { parma, uscc, sId} = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await adminBiz.enterpriseServiceResolveDynamicsList(userInfo, sId);
res.success(result);
}
//政策
async function policy_list(req, res) {
let reqConf = {
page:"Number", createTime:"Number", type:"Number"
};
const NotMustHaveKeys = ["selectTitle", "createTime", "type"];
let { selectTitle, createTime, type, page } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.policyList(selectTitle, createTime, type, page);
res.success(data);
}
async function policy_select_policy(req, res) {
let reqConf = {
name:"String"
};
const NotMustHaveKeys = ["name"];
let { name } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.policySelectList(name);
res.success(data);
}
async function user_select(req, res) {
let reqConf = {name:'String'};
let { name } = eccReqParamater(reqConf, req.body, ["name"]);
let userInfo = req.userInfo;
let result = await enterpriseBiz.userNameSelectList(name);
res.success(result);
}
async function appeal_select(req, res) {
let reqConf = {uscc:'String' };
let { uscc } = eccReqParamater(reqConf, req.body);
let result = await appealsBiz.appealsSelect(uscc);
res.success(result);
}
async function policy_match_list(req, res) {
let reqConf = {
page:"Number", createTime:"Number", type:"Number"
};
const NotMustHaveKeys = ["selectTitle", "createTime", "type"];
let { selectTitle, createTime, type, page } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.policyMatchList(selectTitle, createTime, type, page);
res.success(data);;
}
async function policy_match_enterprise_list(req, res) {
let reqConf = {
pId:"String"
};
const NotMustHaveKeys = [];
let { pId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.policyMatchEnterpriseList(pId);
res.success(data);;
}
/**政策落实列表 */
async function policy_policyimplementation_list(req, res) {
let reqConf = {
page:"Number", status:"Number", type:"Number", selectTitle:"String"
};
const NotMustHaveKeys = ["selectTitle", "status", "type"];
let {selectTitle, status, type, page } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.policyPolicyimplementationList(selectTitle, status, type, page);
res.success(data);
}
async function policy_policyimplementation_add(req, res) {
let reqConf = {
param:"Object"
};
const NotMustHaveKeys = [];
let {param } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let userInfo = req.userInfo;
let data = await adminBiz.policyPolicyimplementationAdd(userInfo, param);
res.success(data);
}
async function policy_policyimplementation_info(req, res) {
let reqConf = {
piId:"String"
};
const NotMustHaveKeys = [];
let {piId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let userInfo = req.userInfo;
let data = await adminBiz.policyPolicyimplementationInfo(piId);
res.success(data);
}
async function policy_policyimplementation_delete(req, res) {
let reqConf = {
piId:"String"
};
const NotMustHaveKeys = [];
let {piId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let userInfo = req.userInfo;
let data = await adminBiz.policyPolicyimplementationDel(userInfo, piId);
res.success(data);
}
async function policy_policyimplementation_update(req, res) {
let reqConf = {
param:"Object",
piId:"String"
};
const NotMustHaveKeys = [];
let {param, piId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let userInfo = req.userInfo;
let data = await adminBiz.policyPolicyimplementationUpdate(userInfo, piId, param);
res.success(data);
}
async function policy_info(req, res) {
let reqConf = {
pId:"String"
};
const NotMustHaveKeys = [];
let { pId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.getPolicyInfo(pId);
res.success(data);
}
async function policy_Item(req, res) {
let reqConf = {
pId:"String"
};
const NotMustHaveKeys = [];
let { pId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.getPolicyItem(pId);
res.success(data);
}
async function policy_update(req, res) {
let reqConf = {
pId:"String",
param:"Object"
};
const NotMustHaveKeys = [""];
let { param, pId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let userInfo = req.userInfo;
let data = await adminBiz.updatePolicy(userInfo, pId, param);
res.success(data);
}
async function policy_add(req, res) {
let reqConf = {
param:"Object"
};
const NotMustHaveKeys = ["selectTitle", "createTime", "type"];
let { param } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.addPolicy(param);
res.success(data);
}
async function policy_del(req, res) {
let reqConf = {
pId:"String",
};
const NotMustHaveKeys = [];
let { pId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.deletePolicy(pId);
res.success(data);
}
//活动
async function activity_list(req, res) {
let reqConf = {
page:"Number", selectTitle:"String", startTime:"Number", endTime:"Number", type:"Number", state:"Number"
};
const NotMustHaveKeys = ["selectTitle", "startTime", "endTime", "type", "state"];
let { selectTitle, startTime, endTime, type, state, page } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.activityList(selectTitle, startTime, endTime, type,state, page);
res.success(data);
}
async function activity_info(req, res) {
let reqConf = {
aId:"String"
};
const NotMustHaveKeys = [];
let { aId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.getActivityInfo(aId);
res.success(data);
}
async function activity_item(req, res) {
let reqConf = {
aId:"String"
};
const NotMustHaveKeys = [];
let { aId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.activityItem(aId);
res.success(data);
}
async function activity_update(req, res) {
let reqConf = {
param:"Object", aId:"String"
};
const NotMustHaveKeys = [];
let { param, aId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let userInfo = req.userInfo;
let data = await adminBiz.updateActivity(userInfo, aId, param);
res.success(data);
}
async function activity_add(req, res) {
let reqConf = {
param:"Object"
};
const NotMustHaveKeys = [];
let { param } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let userInfo = req.userInfo;
let data = await adminBiz.addActivity(userInfo, param);
res.success(data);
}
async function activity_del(req, res) {
let reqConf = {
aId:"String"
};
const NotMustHaveKeys = [""];
let { aId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.deleteActivity(aId);
res.success(data);
}
async function activity_preview(req, res) {
let reqConf = {
page:"Number", selectTitle:"String", startTime:"Number", endTime:"Number", type:"Number"
};
const NotMustHaveKeys = ["selectTitle", "startTime", "endTime", "type"];
let { selectTitle, startTime, endTime, type, page } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.activityPreviewList(selectTitle, startTime, endTime, type, page);
res.success(data);
}
async function activity_out(req, res) {
let reqConf = {
page:"Number", selectTitle:"String", startTime:"Number", endTime:"Number", type:"Number"
};
const NotMustHaveKeys = ["selectTitle", "startTime", "endTime", "type"];
let { selectTitle, startTime, endTime, type, page } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.activityOutList(selectTitle, startTime, endTime, type, page);
res.success(data);
}
async function home_base(req, res) {
let data = await adminBiz.homeBase();
res.success(data);
}
async function home_enterprise_change(req, res) {
let reqConf = { year:"Number" };
let { year } = eccReqParamater(reqConf, req.body);
let data = await adminBiz.homeEnterpriseChange(year);
res.success(data);
}
async function home_business(req, res) {
let reqConf = { year:"Number" };
let { year } = eccReqParamater(reqConf, req.body);
let data = await adminBiz.enterpriseOperate(year);
res.success(data);
}
async function home_activity(req, res) {
let reqConf = {
type:"Number"
};
const NotMustHaveKeys = ["type"];
let { type } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
let data = await adminBiz.homeActivity(type);
res.success(data);
}
async function home_policy(req, res) {
let data = await adminBiz.homePolicy();
res.success(data);
}
async function home_visit(req, res) {
let reqConf = { year:"Number" };
let { year } = eccReqParamater(reqConf, req.body);
let data = await adminBiz.homeVisit(year);
res.success(data);
}
async function home_business_info(req, res) {
let reqConf = { year:"Number", operationType:"Number"};
let { year, operationType } = eccReqParamater(reqConf, req.body);
let data = await adminBiz.enterpriseOperateInfo(year, operationType);
res.success(data);
}
async function home_business_update(req, res) {
let reqConf = { id:"String", param:"Object"};
let { id, param } = eccReqParamater(reqConf, req.body);
let data = await adminBiz.updatEnterpriseOperateInfo(id, param);
res.success(data);
}
\ No newline at end of file
import * as asyncHandler from 'express-async-handler';
import * as userBiz from '../../biz/user';
import { eccReqParamater } from '../../util/verificationParam';
import { checkAdminToken, checkToken } from '../../middleware/user';
export function setRouter(httpServer) {
httpServer.post('/zj/admin/user/login', asyncHandler(admin_login));//登录
httpServer.post('/zj/admin/user/logout', checkAdminToken, asyncHandler(admin_logout));//登出
}
/**
* 登录
* @param req
* @param res
*/
async function admin_login(req, res) {
let reqConf = {loginId:'String', pwd:'String'};
let { loginId, pwd } = eccReqParamater(reqConf, req.body);
let result = await userBiz.adminUserLogin(loginId, pwd);
res.success(result);
}
/**
* 登出
* @param req
* @param res
*/
async function admin_logout(req, res) {
let userInfo = req.userInfo;
let result = await userBiz.adminUserLogout(userInfo);
res.success(result);
}
/**
* 企业活动
*/
import * as asyncHandler from 'express-async-handler';
import { eccReqParamater } from '../../util/verificationParam';
import { activityInfo, activityList, activityStatis } from '../../biz/activity';
import { checkToken } from '../../middleware/user';
export function setRouter(httpServer) {
httpServer.post('/zj/xcx/enterprisemanage/activity/list', checkToken, asyncHandler(activity_list));//企业活动列表
httpServer.post('/zj/xcx/enterprisemanage/activity/statis', checkToken, asyncHandler(activity_statis));//企业活动 统计
httpServer.post('/zj/xcx/enterprisemanage/activity/info', checkToken, asyncHandler(activity_info));//企业活动 详情
}
async function activity_list(req, res) {
let reqConf = {type:'Number', state:'Number' };
let { type, state } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await activityList(type, state);
res.success(result);
}
async function activity_statis(req, res) {
let reqConf = {type:'Number'};
let { type } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await activityStatis(type);
res.success(result);
}
async function activity_info(req, res) {
let reqConf = {aId:'String'};
let { aId } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await activityInfo(aId);
res.success(result);
}
\ No newline at end of file
/**
* 一企一档
*/
import * as asyncHandler from 'express-async-handler';
import { eccReqParamater } from '../../util/verificationParam';
import * as enterpriseBiz from '../../biz/enterprise';
import { addPolicyImplement, policyImplement, policyImplementStatis, policyRecommend } from '../../biz/policy';
import { checkToken } from '../../middleware/user';
export function setRouter(httpServer) {
//一企一档
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/list', checkToken, asyncHandler(enterprise_list));//企业列表
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/attention', checkToken, asyncHandler(enterprise_follow));//企业列表中的 关注
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/outattention', checkToken, asyncHandler(enterprise_out_follow));//企业列表中的 取消关注
//一企一档 => 企业信息
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/info', checkToken, asyncHandler(enterprise_base_info));//企业信息 显示
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/feedback', checkToken, asyncHandler(enterprise_info_show));//企业信息 回显
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/update', checkToken, asyncHandler(enterprise_update));//企业信息 修改
//一企一档 => 企业信息 => 经营数据
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/business/update', checkToken, asyncHandler(update_enterprise_business));//修改 经营数据
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/business/del', checkToken, asyncHandler(delete_enterprise_business));//删除 经营数据
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/business/add', checkToken, asyncHandler(add_enterprise_business));//添加 经营数据
// httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/servicelog/arrangeuserlist', asyncHandler());//服务记录 安排走访中的用户下拉
//一企一档 政策匹配
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/policiesmix/statis', checkToken, asyncHandler(enterprise_policiesmix_staits));//政策匹配统计
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/policiesmix/recommend', checkToken, asyncHandler(enterprise_policiesmix_recommend));//政策匹配 推荐
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/policiesmix/implement', checkToken, asyncHandler(enterprise_policiesmix_implement));//政策匹配 落实
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/policiesmix/implement/add', checkToken, asyncHandler(enterprise_policiesmix_implement_add));//政策匹配 添加落实
//风险
httpServer.post('/zj/xcx/enterprisemanage/archives/warn/list', checkToken, asyncHandler(enterprise_warn_list));//风险列表
}
async function enterprise_warn_list(req, res) {
let reqConf = { uscc:"String", typeList:"[Number]"};
let { uscc, typeList } = eccReqParamater(reqConf, req.body, ["typeList"]);
let userInfo = req.userInfo;
let result = await enterpriseBiz.enterpriseWarnList(uscc, typeList);
res.success(result);
}
async function enterprise_list(req, res) {
let reqConf = {selectStr:'String', labelIdList:'[Number]', page:"Number", industryList:'[Number]', isFoolow:"Boolean" };
let { selectStr, labelIdList, page, industryList , isFoolow } = eccReqParamater(reqConf, req.body, ["industryList", "labelIdList"]);
let userInfo = req.userInfo;
let result = await enterpriseBiz.enterpriseList(userInfo, selectStr, labelIdList, industryList, isFoolow, page);
res.success(result);
}
async function enterprise_base_info(req, res) {
let reqConf = {uscc:'String' };
let { uscc } = eccReqParamater(reqConf, req.body);
let result = await enterpriseBiz.enterpriseBaseInfo(uscc);
res.success(result);
}
async function enterprise_info_show(req, res) {
let reqConf = {uscc:'String' };
let { uscc } = eccReqParamater(reqConf, req.body);
let result = await enterpriseBiz.enterpriseInfo(uscc);
res.success(result);
}
async function enterprise_update(req, res) {
let reqConf = {uscc:'String', param:'Object'};
let { uscc, param} = eccReqParamater(reqConf, req.body);
let result = await enterpriseBiz.enterpriseUpdate(uscc, param);
res.success(result);
}
async function delete_enterprise_business(req, res) {
let reqConf = {uscc:'String', year:"Number"};
let { uscc , year} = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await enterpriseBiz.deleteEnterpriseBusinessData(uscc, year);
res.success(result);
}
async function add_enterprise_business(req, res) {
let reqConf = {uscc:'String', param:"Object"};
let { uscc , param} = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await enterpriseBiz.addEnterpriseBusinessData(uscc, param);
res.success(result);
}
async function update_enterprise_business(req, res) {
let reqConf = {uscc:'String', year:"Number", param:"Object"};
let { uscc , year, param} = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await enterpriseBiz.updateEnterpriseBusinessData(uscc, year, param);
res.success(result);
}
async function enterprise_follow(req, res) {
let reqConf = {uscc:'String'};
let { uscc } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await enterpriseBiz.addEnterpriseFollow(userInfo, uscc);
res.success(result);
}
async function enterprise_out_follow(req, res) {
let reqConf = {uscc:'String'};
let { uscc } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await enterpriseBiz.delEnterpriseFollow(userInfo, uscc);
res.success(result);
}
async function enterprise_policiesmix_recommend(req, res) {
let userInfo = req.userInfo;
let reqConf = {uscc:'String', degree:'Numbe'};
let { uscc, degree} = eccReqParamater(reqConf, req.body, ["degree"]);
let result = await policyRecommend(uscc, degree);
res.success(result);
}
async function enterprise_policiesmix_implement(req, res) {
let userInfo = req.userInfo;
let reqConf = {uscc:'String', implement:"Number"};
let { uscc, implement } = eccReqParamater(reqConf, req.body, ["implement"]);
let result = await policyImplement(uscc, implement);
res.success(result);
}
async function enterprise_policiesmix_implement_add(req, res) {
let userInfo = req.userInfo;
let reqConf = {uscc:'String', param:"Object"};
let { uscc, param } = eccReqParamater(reqConf, req.body, ["implement"]);
let result = await addPolicyImplement(userInfo, uscc, param);
res.success(result);
}
async function enterprise_policiesmix_staits(req, res) {
let userInfo = req.userInfo;
let reqConf = {uscc:'String'};
let { uscc } = eccReqParamater(reqConf, req.body);
let result = await policyImplementStatis(uscc);
res.success(result);
}
/**
* 建档
*/
import * as asyncHandler from 'express-async-handler';
import { createBase, createOperate, createService } from '../../biz/enterprise';
import { eccReqParamater } from '../../util/verificationParam';
import { checkToken } from '../../middleware/user';
export function setRouter(httpServer) {
httpServer.post('/zj/xcx/enterprisemanage/establish/create/base', checkToken, asyncHandler(add_base));//基础信息
httpServer.post('/zj/xcx/enterprisemanage/establish/create/operate', checkToken, asyncHandler(add_operate));//经营情况
httpServer.post('/zj/xcx/enterprisemanage/establish/create/service', checkToken, asyncHandler(add_service));//服务记录
}
async function add_base(req, res) {
let reqConf = {param: 'Object' };
let { param } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await createBase(userInfo, param);
res.success(result);
}
async function add_operate(req, res) {
// let reqConf = {paramList: '[Object]', uscc:"String" };
// let { paramList, uscc } = eccReqParamater(reqConf, req.body);
// let userInfo = req.userInfo;
// let result = await createOperate(userInfo, uscc, paramList);
// res.success(result);
let reqConf = {param: 'Object', uscc:"String" };
let { param, uscc } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await createOperate(userInfo, uscc, param);
res.success(result);
}
async function add_service(req, res) {
let reqConf = {param: 'Object', uscc:"String" };
let { param, uscc } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await createService(userInfo,uscc, param);
res.success(result);
}
/**
* 首页
*/
import * as asyncHandler from 'express-async-handler';
import { homePage, homePageTop } from '../../biz/user';
import { enterpriseChange, enterpriseOperate } from '../../biz/enterprise';
import { homePageActivity } from '../../biz/activity';
import { checkToken } from '../../middleware/user';
import * as enterpriseBiz from '../../biz/enterprise';
import { eccReqParamater } from '../../util/verificationParam';
export function setRouter(httpServer) {
httpServer.post('/zj/xcx/enterprisemanage/home/top',checkToken, asyncHandler(home_top));//统计 企业总数 产业领域
httpServer.post('/zj/xcx/enterprisemanage/home/statis',checkToken, asyncHandler(home_statis));//统计 企业总数 产业领域
httpServer.post('/zj/xcx/enterprisemanage/home/enterprisechange',checkToken, asyncHandler(enterprise_changes));//统计 企业变化
httpServer.post('/zj/xcx/enterprisemanage/home/operate',checkToken, asyncHandler(enterprise_operate));//经营情况
httpServer.post('/zj/xcx/enterprisemanage/home/activity',checkToken, asyncHandler(enterprise_activity));//企业活动
httpServer.post('/zj/xcx/enterprise/select', checkToken, asyncHandler(enterprise_select_list));//企业名称下拉框
httpServer.post('/zj/xcx/user/select', checkToken, asyncHandler(user_select_list));//用户名称下拉框
}
/**
* 首页 统计
*/
async function home_statis(req, res) {
let userInfo = req.userInfo;
let result = await homePage(userInfo);
res.success(result);
}
/**
* 首页 顶部
*/
async function home_top(req, res) {
let userInfo = req.userInfo;
let result = await homePageTop(userInfo);
res.success(result);
}
/**
* 首页 企业变化
*/
async function enterprise_changes(req, res) {
let userInfo = req.userInfo;
let result = await enterpriseChange();
res.success(result);
}
/**
* 首页 经营情况
*/
async function enterprise_operate(req, res) {
let userInfo = req.userInfo;
let result = await enterpriseOperate();
res.success(result);
}
/**
* 首页 经营情况
*/
async function enterprise_activity(req, res) {
let userInfo = req.userInfo;
let result = await homePageActivity();
res.success(result);
}
/**
* 企业名称下拉框
* @param req
* @param res
*/
async function enterprise_select_list(req, res) {
let reqConf = {name:'String'};
let { name } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await enterpriseBiz.enterpriseNameSelectList(name);
res.success(result);
}
async function user_select_list(req, res) {
let reqConf = {name:'String'};
let { name } = eccReqParamater(reqConf, req.body, ["name"]);
let userInfo = req.userInfo;
let result = await enterpriseBiz.userNameSelectList(name);
res.success(result);
}
/**
* 政策
*/
import * as asyncHandler from 'express-async-handler';
import { eccReqParamater } from '../../util/verificationParam';
import { policyImplementList, policyInfo, policyList, policyMatchEnterpriseList, policyMatchList } from '../../biz/policy';
import { checkToken } from '../../middleware/user';
export function setRouter(httpServer) {
httpServer.post('/zj/xcx/enterprisemanage/policy/recommend/list', checkToken, asyncHandler(policy_list));//政策速递 政策列表
httpServer.post('/zj/xcx/enterprisemanage/policy/recommend/info', checkToken, asyncHandler(policy_info));//政策速递 详情
httpServer.post('/zj/xcx/enterprisemanage/policy/recommend/enterprise/list', checkToken, asyncHandler(policy_info_enterprise_list));//政策速递 匹配列表
httpServer.post('/zj/xcx/enterprisemanage/policy/implement/list', checkToken, asyncHandler(policy_implement_list));//政策落实列表
httpServer.post('/zj/xcx/enterprisemanage/policy/match/list', checkToken, asyncHandler(policy_match_list));//政策落实列表
}
async function policy_list(req, res) {
let reqConf = {title:'String', type:'Number' };
let { title, type } = eccReqParamater(reqConf, req.body, ["title"]);
let userInfo = req.userInfo;
let result = await policyList(title, type);
res.success(result);
}
async function policy_info(req, res) {
let reqConf = {pId:'String' };
let { pId } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await policyInfo(pId);
res.success(result);
}
async function policy_info_enterprise_list(req, res) {
let reqConf = {pId:'String' };
let { pId } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await policyMatchEnterpriseList(pId);
res.success(result);
}
async function policy_implement_list(req, res) {
let reqConf = {year:'Number' };
let { year } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await policyImplementList(year);
res.success(result);
}
async function policy_match_list(req, res) {
let reqConf = {year:'Number' };
let { year } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await policyMatchList(year);
res.success(result);
}
\ No newline at end of file
/**
* 企业服务
*/
import * as asyncHandler from 'express-async-handler';
import * as serviceBiz from '../../biz/service/service';
import * as appealsBiz from '../../biz/service/appeals';
import * as visitBiz from '../../biz/service/visit';
import * as visitPlanBiz from '../../biz/service/visitPlan';
import * as enterpriseBiz from '../../biz/enterprise';
import { eccReqParamater } from '../../util/verificationParam';
import { checkToken } from '../../middleware/user';
export function setRouter(httpServer) {
/**========================== 一企一档 企业信息里面与服务相关的 */
//【一企一档】 => 企业信息 => 服务记录
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/servicelog/statis', checkToken, asyncHandler(archives_enterprise_service_statis));//服务记录统计
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/servicelog/leader', asyncHandler(archives_enterprise_service_visit_log));//服务记录 领导走访列表
httpServer.post('/zj/xcx/enterprisemanage/archives/enterprise/servicelog/daily', asyncHandler(archives_enterprise_service_daily_log));//服务记录 日常服务列表
//【一企一档】 => 企业服务 => 领导走访
httpServer.post('/zj/xcx/enterprisemanage/archives/visit/add', checkToken, asyncHandler(add_visit));//企业服务 添加领导走访
httpServer.post('/zj/xcx/enterprisemanage/archives/visit/appeals/add', checkToken, asyncHandler(add_visit_resolve_dynamics));//企业服务 领导走访 添加述求跟踪
httpServer.post('/zj/xcx/enterprisemanage/archives/visit/appeals/update', checkToken, asyncHandler(update_visit_resolve_dynamics));//企业服务 领导走访 修改述求跟踪
//【一企一档】 => 企业服务 => 日常服务
httpServer.post('/zj/xcx/enterprisemanage/archives/service/add', checkToken, asyncHandler(add_service));//企业服务 添加日常服务
httpServer.post('/zj/xcx/enterprisemanage/archives/service/appeals/add', checkToken, asyncHandler(add_service_resolve_dynamics));//企业服务 日常服务 添加述求跟踪
httpServer.post('/zj/xcx/enterprisemanage/archives/service/appeals/update', checkToken, asyncHandler(update_service_resolve_dynamics));//企业服务 日常服务 修改述求跟踪
//【一企一档】 述求记录
httpServer.post('/zj/xcx/enterprisemanage/archives/appeals/list', checkToken, asyncHandler(enterprise_appeals_list));//述求记录
httpServer.post('/zj/xcx/enterprisemanage/archives/appeals/add', checkToken, asyncHandler(enterprise_appeals_add));//添加诉求
/**========================== 首页 企业述求 */
//『企业述求』
httpServer.post('/zj/xcx/enterprisemanage/service/appeal/typestatis', checkToken, asyncHandler(enterprise_appeal_list));//企业述求列表(类型统计列表)一级
httpServer.post('/zj/xcx/enterprisemanage/service/appeal/appealtypelist', checkToken, asyncHandler(enterprise_appeal_type_list));//企业子述求列表(子类型列表)二级
httpServer.post('/zj/xcx/enterprisemanage/service/appeal/add', checkToken, asyncHandler(add_appeal));//添加企业述求
httpServer.post('/zj/xcx/appeal/select', checkToken, asyncHandler(appeal_select));//下拉框(用于 领导走访/日常服务 中的类别下拉)
/**========================== 首页 服务记录*/
//★企业服务★
httpServer.post('/zj/xcx/enterprisemanage/service/statis', checkToken, asyncHandler(enterprise_service_statis));//企业服务 统计
httpServer.post('/zj/xcx/enterprisemanage/service/daily/add', checkToken, asyncHandler(add_service));//企业服务 日常服务 添加
httpServer.post('/zj/xcx/enterprisemanage/service/daily/list', checkToken, asyncHandler(enterprise_service_daily_log));//企业服务 日常服务 列表
httpServer.post('/zj/xcx/enterprisemanage/service/visit/add', checkToken, asyncHandler(add_visit));//企业服务 领导走访 添加
httpServer.post('/zj/xcx/enterprisemanage/service/visit/list', checkToken, asyncHandler(enterprise_service_visit_log));//企业服务 领导走访 列表
httpServer.post('/zj/xcx/enterprisemanage/service/attention', checkToken, asyncHandler(enterprise_follow));//企业服务 关注
httpServer.post('/zj/xcx/enterprisemanage/service/outattention', checkToken, asyncHandler(enterprise_out_follow));//企业服务 取消关注
/**========================== 首页 顶部 安排走访 */
//◀安排走访▶
httpServer.post('/zj/xcx/enterprisemanage/service/visit/calendar/statis', checkToken, asyncHandler(enterprise_visit_calendar_statis));//走访安排统计
httpServer.post('/zj/xcx/enterprisemanage/service/visit/calendar/list', checkToken, asyncHandler(enterprise_visit_calendar_list));//走访安排-列表
httpServer.post('/zj/xcx/enterprisemanage/service/visit/calendar/add', checkToken, asyncHandler(enterprise_visit_calendar_add));//添加走访安排
httpServer.post('/zj/xcx/enterprisemanage/service/visit/log/list', checkToken, asyncHandler(enterprise_visit_log));//走访记录-列表
}
async function enterprise_appeals_list(req, res) {
let userInfo = req.userInfo;
let reqConf = {uscc:'String'};
let { uscc } = eccReqParamater(reqConf, req.body);
let result = await appealsBiz.enterpriseAppealList(userInfo, uscc);
res.success(result);
}
async function enterprise_appeals_add(req, res) {
let userInfo = req.userInfo;
let reqConf = {param:'Object'};
let { param } = eccReqParamater(reqConf, req.body);
let result = await appealsBiz.addEnterpriseAppeals(userInfo, param);
res.success(result);
}
async function archives_enterprise_service_statis(req, res) {
let userInfo = req.userInfo;
let reqConf = {uscc:'String'};
let { uscc } = eccReqParamater(reqConf, req.body);
let result = await serviceBiz.serviceStatis(userInfo, uscc);
res.success(result);
}
async function archives_enterprise_service_visit_log(req, res) {
let userInfo = req.userInfo;
let reqConf = {uscc:'String', state:'Number', appealType:'[Number]'};
let { uscc, appealType, state } = eccReqParamater(reqConf, req.body, ["appealType"]);
let result = await visitBiz.ladelVisitLog(userInfo, state, appealType, uscc);
res.success(result);
}
async function archives_enterprise_service_daily_log(req, res) {
let reqConf = {uscc:'String', state:'Number'};
let { uscc, state } = eccReqParamater(reqConf, req.body);
let result = await serviceBiz.dailyLog(state, uscc);
res.success(result);
}
/**
* 企业服务 统计
* @param req
* @param res
*/
async function enterprise_service_statis(req, res) {
let reqConf = {year:'Number' };
let { year } = eccReqParamater(reqConf, req.body);
let result = await serviceBiz.enterpriseServerStatis(year);
res.success(result);
}
/**
* 企业服务 领导走访列表
* @param req
* @param res
*/
async function enterprise_service_visit_log(req, res) {
let reqConf = {type:'Number', page:"Number" };
let { type, page } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await visitBiz.enterpriseLadelVisitLog(userInfo, type, page);
res.success(result);
}
/**
* 企业服务 日常服务列表
* @param req
* @param res
*/
async function enterprise_service_daily_log(req, res) {
let reqConf = {type:'Number', page:"Number" };
let { type, page } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await serviceBiz.enterpriseServiceLog(userInfo, type, page);
res.success(result);
}
/**
* 关注
* @param req
* @param res
*/
async function enterprise_follow(req, res) {
let reqConf = {uscc:'String'};
let { uscc } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await enterpriseBiz.addEnterpriseFollow(userInfo, uscc);
res.success(result);
}
/**
* 取消关注
* @param req
* @param res
*/
async function enterprise_out_follow(req, res) {
let reqConf = {uscc:'String'};
let { uscc } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await enterpriseBiz.delEnterpriseFollow(userInfo, uscc);
res.success(result);
}
/**
* 添加服务
* @param req
* @param res
*/
async function add_service(req, res) {
let reqConf = {param:'Object'};
let { param } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await serviceBiz.addService(userInfo, param);
res.success(result);
}
/**
* 添加走访
* @param req
* @param res
*/
async function add_visit(req, res) {
let reqConf = {param:'Object' };
let { param } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await visitBiz.addVisit(userInfo, param);
res.success(result);
}
/**
* 述求列表
* @param req
* @param res
*/
async function enterprise_appeal_list(req, res) {
let reqConf = {type:'Number' };
let { type } = eccReqParamater(reqConf, req.body);
let result = await appealsBiz.appealTypeList(type);
res.success(result);
}
/**
* 述求类型列表
* @param req
* @param res
*/
async function enterprise_appeal_type_list(req, res) {
let reqConf = {type:'Number', appealType:"Number" };
let { type, appealType } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await appealsBiz.appealList(type, appealType);
res.success(result);
}
/**
* 添加述求
* @param req
* @param res
*/
async function add_appeal(req, res) {
let reqConf = {param:'Object' };
let { param } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await appealsBiz.addAppeals(userInfo, param);
res.success(result);
}
async function appeal_select(req, res) {
let reqConf = {uscc:'String' };
let { uscc } = eccReqParamater(reqConf, req.body);
let result = await appealsBiz.appealsSelect(uscc);
res.success(result);
}
/**
* 个人走访安排页 走访安排统计
* @param req
* @param res
*/
async function enterprise_visit_calendar_statis(req, res) {
let reqConf = {year:'Number' };
let { year } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await visitPlanBiz.visitPlanStats(userInfo, year);
res.success(result);
}
/**
* 个人走访安排页 走访安排列表
* @param req
* @param res
*/
async function enterprise_visit_calendar_list(req, res) {
let userInfo = req.userInfo;
let result = await visitPlanBiz.visitCalendarList(userInfo);
res.success(result);
}
/**
* 个人走访安排页 添加走访安排
* @param req
* @param res
*/
async function enterprise_visit_calendar_add(req, res) {
let reqConf = {parma:'Object' };
let { parma } = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await visitPlanBiz.addArrangeVisitPlan(userInfo, parma);
res.success(result);
}
/**
* 个人走访安排页 走访记录列表
* @param req
* @param res
*/
async function enterprise_visit_log(req, res) {
let userInfo = req.userInfo;
let result = await visitPlanBiz.userVisitPlanLog(userInfo);
res.success(result);
}
/**
* 述求跟踪 添加跟踪
* @param req
* @param res
*/
async function add_service_resolve_dynamics(req, res) {
let reqConf = {parma:'Object', uscc:'String', sId:'String'};
let { parma, uscc, sId} = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await serviceBiz.addServiceResolveDynamics(userInfo, uscc, sId, parma);
res.success(result);
}
/**
* 服务 跟踪 修改
* @param req
* @param res
*/
async function update_service_resolve_dynamics(req, res) {
let reqConf = {parma:'Object', rId:'String'};
let { parma, rId} = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await serviceBiz.updateServiceResolveDynamics(userInfo, rId, parma);
res.success(result);
}
async function add_visit_resolve_dynamics(req, res) {
let reqConf = {parma:'Object', uscc:'String', vId:'String'};
let { parma, uscc, vId} = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await visitBiz.addVisitResolveDynamics(userInfo, uscc, vId, parma);
res.success(result);
}
async function update_visit_resolve_dynamics(req, res) {
let reqConf = {parma:'Object', rId:'String'};
let { parma, rId} = eccReqParamater(reqConf, req.body);
let userInfo = req.userInfo;
let result = await visitBiz.updateVisitResolveDynamics(userInfo, rId, parma);
res.success(result);
}
import * as asyncHandler from 'express-async-handler';
import { eccReqParamater } from '../../util/verificationParam';
import * as userBiz from '../../biz/user';
export function setRouter(httpServer) {
httpServer.post('/zj/xcx/user/enterprisebutler/login', asyncHandler(enterprise_butler_login));//登录
httpServer.post('/zj/xcx/user/enterprisebutler/logout', asyncHandler(enterprise_butler_logout));//登录
httpServer.post('/zj/xcx/user/leader/login', asyncHandler(leader_login));//登录
httpServer.post('/zj/xcx/user/leader/logout', asyncHandler(leader_logout));//登出
}
/**
* 企业管家登录
* @param req
* @param res
*/
async function enterprise_butler_login(req, res) {
let reqConf = {loginId:'String', pwd:'String'};
let { loginId, pwd } = eccReqParamater(reqConf, req.body);
let result = await userBiz.userLogin(loginId, pwd);
res.success(result);
}
/**
* 企业管家登出
* @param req
* @param res
*/
async function enterprise_butler_logout(req, res) {
let userInfo = req.userInfo;
let result = await userBiz.userLogout(userInfo);
res.success(result);
}
/**
* 领导登录
* @param req
* @param res
*/
async function leader_login(req, res) {
let reqConf = {loginId:'String', pwd:'String'};
let { loginId, pwd } = eccReqParamater(reqConf, req.body);
let result = await userBiz.userLogin(loginId, pwd);
res.success(result);
}
/**
* 领导登出
* @param req
* @param res
*/
async function leader_logout(req, res) {
let userInfo = req.userInfo;
let result = await userBiz.userLogout(userInfo);
res.success(result);
}
/**
* 公共资源路由
*/
import * as asyncHandler from 'express-async-handler';
import * as enumConfig from '../config/enum';
const config = {
"/zj/xcx/public/industry":enumConfig.INDUSTRY,//行业领域
"/zj/xcx/public/appealtype":enumConfig.APPEALTYPE,//述求类型
"/zj/xcx/public/activitytype":enumConfig.ACTIVITYTYPECLIENT,//活动类型
"/zj/xcx/public/policytype":enumConfig.POLICYTYPE,//政策类型
"/zj/xcx/public/researchtype":enumConfig.RESEARCHTYPE,//调研类型
"/zj/xcx/public/solutiontype":enumConfig.SOLUTIONTYPE,//解决方式
"/zj/xcx/public/requestkeywords":enumConfig.REQUESTKEYWORDS,//关键词
"/zj/xcx/public/solvestate":enumConfig.SOLVESTATECLIENT,//解决状态
"/zj/xcx/public/servicestate":enumConfig.SERVICESTATE,//日常服务状态
"/zj/xcx/public/enterprisecategory":enumConfig.ENTERPRISECATEGORY,//企业类型
"/zj/xcx/public/degree":enumConfig.DEGREE,//企业类型
"/zj/xcx/public/implement":enumConfig.IMPLEMENT,
"/zj/xcx/public/enterpriselabel":enumConfig.ENTERPRISELABEL,
"/zj/xcx/public/servicelogtype":enumConfig.SERVERLOGTYPE,
"/zj/xcx/public/warntype":enumConfig.WARNTYPE,
"/zj/admin/public/industry":enumConfig.INDUSTRY,//行业领域
"/zj/admin/public/appealtype":enumConfig.APPEALTYPE,//述求类型
"/zj/admin/public/activitytype":enumConfig.ACTIVITYTYPECLIENT,//活动类型
"/zj/admin/public/policytype":enumConfig.POLICYTYPE,//政策类型
"/zj/admin/public/researchtype":enumConfig.RESEARCHTYPE,//调研类型
"/zj/admin/public/solutiontype":enumConfig.SOLUTIONTYPE,//解决方式
"/zj/admin/public/requestkeywords":enumConfig.REQUESTKEYWORDS,//关键词
"/zj/admin/public/solvestate":enumConfig.SOLVESTATECLIENT,//解决状态
"/zj/admin/public/servicestate":enumConfig.SERVICESTATE,//日常服务状态
"/zj/admin/public/enterprisecategory":enumConfig.ENTERPRISECATEGORY,//企业类型
"/zj/admin/public/degree":enumConfig.DEGREE,//企业类型
"/zj/admin/public/implement":enumConfig.IMPLEMENT,
"/zj/admin/public/enterpriselabel":enumConfig.ENTERPRISELABEL,
"/zj/admin/public/activitystatus":enumConfig.ACTIVITYSTATUS,
"/zj/admin/public/activitystatistype":enumConfig.ACTIVITYTYPESTATISCLIENT,
"/zj/admin/public/implementclient":enumConfig.IMPLEMENTCLIENT,
}
export function setRouter(httpServer) {
for (let modelKey in config) {
httpServer.post(modelKey, asyncHandler(getEnumItf(config[modelKey])));
}
}
/**
*
* @param req
* @param res
*/
function getEnumItf(enumCof) {
return async function (req, res) {
let dataList = [];
for (let key in enumCof) {
let anyKey:any = key;
if (isNaN(anyKey)) {
dataList.push({key, value:enumCof[key]});
}
}
res.success({dataList});
}
}
\ No newline at end of file
/**
* 总路由入口
*/
import * as publicRouters from './public';
import * as activityRouters from './enterpriseButler/activity';
import * as archivesRouters from './enterpriseButler/archives';
import * as establishRouters from './enterpriseButler/establish';
import * as homeRouters from './enterpriseButler/home';
import * as policyRouters from './enterpriseButler/policy';
import * as serviceRouters from './enterpriseButler/service';
import * as userRouters from './enterpriseButler/user';
import * as adminUserRouters from './admin/user';
import * as adminRouters from './admin/admin';
export function setRouter(httpServer){
/**下拉框等公用 路由 */
publicRouters.setRouter(httpServer);
/**小程序端 孵化器入口路由 */
activityRouters.setRouter(httpServer);
archivesRouters.setRouter(httpServer);
establishRouters.setRouter(httpServer);
homeRouters.setRouter(httpServer);
policyRouters.setRouter(httpServer);
serviceRouters.setRouter(httpServer);
userRouters.setRouter(httpServer);
adminUserRouters.setRouter(httpServer);
adminRouters.setRouter(httpServer);
}
\ No newline at end of file
/**
* 系统中使用的工具
* 包括 草稿箱id生成规则
* 包括 密码加密规则
*/
import moment = require("moment");
const md5 = require("md5");
/**
* 生成任务草稿箱Id
* @param uscc
* @returns
*/
export function getDraftId(uscc:string) {
return md5(`${uscc}${new Date().valueOf()}${Math.ceil(Math.random()*1000)}`);
}
/**
* 密码加密
* @param uscc 信用代码
* @param pwd 密码
* @returns md5后的密码
*/
export function getPwdMd5(uscc:string, pwd:string) {
return md5(uscc+pwd);
}
/**
* md5加密
* @param pwd
* @returns pwd 加密后密码
*/
export function md5PwdStr(pwd:string) {
return md5(pwd);
}
/**
* 获取token
* @param uscc 统一信用代码
*/
export function getToken(uscc:string) {
return md5(`${uscc}${new Date().valueOf()}${Math.ceil(Math.random() *100)}`);
}
/**
* 校验uscc是否合法
* @param uscc
* @returns true/false
*/
export function eccUscc(uscc:string) {
let isSuccess = false;
if (uscc.search(/^[A-Za-z0-9]{16}$/) > -1) isSuccess = true;
else if (uscc.search(/^[A-Za-z0-9]{18}$/) > -1) isSuccess = true;
return isSuccess;
}
/**
* 获取绑定id
* @param uscc 孵化器统一信用代码
* @param bindUscc 被绑定的孵化器统一信用代码
* @returns
*/
export function getBindId(uscc:string, bindUscc:string) {
return md5(`${uscc}${bindUscc}${Math.ceil(Math.random() *100)}`);
}
/**
* 获取今天开始时刻的时间戳 0时0分
* @returns
*/
export function getTodayMs() {
let t =`${ moment().format("YYYY-MM-DD")} 00:00:00`;
return new Date(t).valueOf();
}
/**
* 获取这个月的开始时刻的时间戳 0时0分
* @returns
*/
export function getThisMonthMs() {
let t =`${ moment().format("YYYY-MM")}-01 00:00:00`;
return new Date(t).valueOf();
}
/**
* 获取code的id
* @param uscc 发送人的uscc
* @param todaySendCount 今日发送次数
* @returns ''
*/
export function getSMSCodeId(uscc:string, todaySendCount:number) {
return md5(`${uscc}${todaySendCount}${new Date().valueOf()}`);
}
/**
* 获取一个随机6位数的验证码
* @returns
*/
export function getSMSCode() {
let code = ``;
for (let i =0; i < 6; i++) {
code += Math.floor(Math.random() * 10)
}
return code;
}
/**
* 生成融资id
* @param uscc
* @returns
*/
export function getFinancingId(uscc) {
return md5(`${uscc}${new Date().valueOf()}${Math.ceil(Math.random() * 1000)}`);
}
/**
* 生成创始团队成员id
* @param uscc
* @param name
* @returns
*/
export function getInitialTeamMemberId(uscc:string, name:string) {
return md5(`${uscc}${name}${Math.ceil(Math.ceil(Math.random() * 1000000))}`);
}
/**
* 生成 资讯id
* @returns
*/
export function getInformationId() {
return md5(`${Math.ceil(Math.ceil(Math.random() * 1000000))}${new Date().valueOf() }${Math.ceil(Math.ceil(Math.random() * 1000000))}`);
}
/**
* 获取上一个季度 年和季度
* @returns declarationYear:数据填报年 declarationQuarter:数据填报季度
*/
export function getLastQuarter() {
let thisYear = new Date().getFullYear();
let thisQuarter = moment().quarter();//当月填报季度
if ( (thisQuarter - 1) < 1 ) {
thisYear = moment().subtract(1, 'years').year();
thisQuarter = 4;
} else thisQuarter = thisQuarter - 1;
return {year:thisYear, quarter:thisQuarter};
}
export function getI18nRegisterId(uscc:string) {
return md5(`${uscc}${new Date().valueOf() }${Math.ceil(Math.ceil(Math.random() * 1000000))}`);
}
export function getPolicyBGImgId() {
return `bgImg_${md5(`bgImg${new Date().valueOf()}${Math.ceil(Math.ceil(Math.random() * 1000000))}`)}`
}
/**
* 获取随机id
* @param uscc
*/
export function getRandomId(uscc:string) {
return md5(`${uscc}${new Date().valueOf() }${Math.ceil(Math.ceil(Math.random() * 1000000))}`);
}
export function changeAddToString(address) {
if (!address) return "";
let str = "";
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))}`)}`
}
export function successResult() {
return {success:true}
}
export function changeAddressListToStr(addressList) {
let str = "";
addressList.forEach(item => {
str += item
});
return str;
}
\ No newline at end of file
/**
* 孵化器 任务相关工具
* 只允许被孵化器任务相关逻辑使用
*
*/
import moment = require("moment");
const md5 = require("md5");
/**----------------------------------------------月度任务 */
/**
* 获取日期的key
* @param timeMs 指定时间, 如果不传就是当前数据
* @returns YYYYM
*/
export function getTimeKey(timeMs?) {
if (timeMs) return parseInt(`${new Date(timeMs).getFullYear()}${new Date(timeMs).getMonth() + 1 }`);
return parseInt(`${new Date().getFullYear()}${new Date().getMonth() + 1 }`);
}
/**
* 生成月度任务id
* @param uscc 企业统一信用代码
* @returns uscc+YYYYM
*/
export function generateMonthTaskId(uscc:string) {
return `${uscc}${getTimeKey()}`;
}
/**
* 获取当前时间月度任务id
* @param uscc 企业标识
* @returns uscc+YYYYM
*/
export function getTaskId(uscc:string) {
return `${uscc}${getTimeKey()}`;
}
/**
* 根据时间获取任务id
* @param uscc 企业标识
* @param timeMs 时间戳
* @returns uscc+YYYYM
*/
export function getMonthTaskIdByTime(uscc:string, timeMs:number) {
return `${uscc}${getTimeKey(timeMs) }`;
}
/**
* 获取上一个月的日期标识
* @returns YYYYM(当前月的上一个月)
*/
export function getLastMonthTimeKey() {
return moment().subtract(1,'months').format('YYYYM');
}
/** ----------------------------------------------- 季度任务 */
/**
* 生成季度任务id
* 生成时所在季度
* @param uscc 企业标识
* @returns uscc+YYYY+0+Quarter
*/
export function generateQuarterTaskId(uscc:string) {
let thisQuarter = moment().quarter();//当月填报季度
return `${uscc}${new Date().getFullYear()}0${thisQuarter}`;
}
/**
* 获取当前季度任务id
* 季度是以填报季度,也就是当前季度当前季度
* @param uscc 企业标识
* @returns uscc+YYYY+0+Quarter
*/
export function getQuarterTaskId(uscc:string) {
let thisQuarter = moment().quarter();//当月填报季度
return `${uscc}${new Date().getFullYear()}0${thisQuarter}`;
}
/**
* 获取当前季度的时间标识
* @returns YYYY+0+Quarter
*/
export function getQuarterTimeKey() {
return parseInt(`${new Date().getFullYear()}0${moment().quarter()}`);
}
/**
* 获取指定时间戳的任务id
* @param uscc 孵化器统一信用代码
* @param timeMs 时间标识
* @returns uscc+YYYY+0+Quarter
*/
export function getQuarterTaskIdByTime(uscc:string, timeMs:number) {
return `${uscc}${new Date(timeMs).getFullYear()}0${moment(timeMs).quarter() }`;
}
/**
* 根据指定年和季度生成任务id
* @param uscc 孵化器统一信用代码
* @param year 年
* @param quarter 季度
* @returns uscc+YYYY+0+Quarter
*/
export function getQuarterTaskIdByYearAndQuarter(uscc:string, year:number, quarter:number) {
return `${uscc}${year}0${quarter }`;
}
\ No newline at end of file
const xlsx = require('node-xlsx');
const path = require('path');
/**
* onceSheetBecomeOfblockData 将excel文件的指定sheet解析成数据块数据
* @param fileName 文件名称
* @param sheetName 表名称
* @returns [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
export function onceSheetBecomeOfblockData(fileName, sheetName) {
let {sheetMap} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", fileName ));
// return sheetMap;
let thisBlockData = getBlockData(sheetMap[sheetName]);
return thisBlockData;
}
/**
* excelBecomeOfBlockData 将excel所有的sheet解析成数据块
* @param fileName 文件名称
* @returns {"sheetName1":[ {blockData:数据块(二维数组), blockTitle:"数据标题"}], ...}
*/
export function excelBecomeOfBlockData(fileName) {
let {sheetMap} = getExcel( path.join(__dirname.substring(0,__dirname.indexOf("out")), "res", fileName ));
let result = {};
for (let sheetName in sheetMap) {
result[sheetName] = getBlockData(sheetMap[sheetName]);
}
return result;
}
/**
* planaryArrayBecomeOfBlockData 将符合excel规则的sheet二维数组转为 数据块
* @param dataList excel解出来的数据
* @returns thisBlockData 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
export function planaryArrayBecomeOfBlockData(planaryArray) {
return getBlockData(planaryArray);
}
//===
/**
* getBlockData 数据分块
* @param dataList 解析出来的excel二维数组
* @returns 返回数据块集合 格式:blockList = [ {blockData:数据块(二维数组), blockTitle:"数据标题"}]
*/
function getBlockData(dataList) {
let blockList = [];
for (let i = 0; i < 999; i++) {
let {blockData, blockTitle, notItem, delDataList} = checkBlock(dataList);
if (notItem) break;
dataList = delDataList;
if (blockTitle) blockList.push({blockData, blockTitle});
}
return blockList;
}
function getListFristNotNullItemIndex(list) { //获取起始坐标
if (!list.length) return null;
for (let i = 0; i < list.length; i++) {
if (list[i]) return i;
}
}
function getListFirstNullItemIndex(startX, list) { //获取第一个为空的坐标
if (!list.length) return null;
let checkItem = false;
let firstItemIndex = 0;
for (let i = startX; i <= list.length; i++) {
let item = list[i];
if (!checkItem && item) checkItem = true;
if (checkItem && !item) {
firstItemIndex = i;
break;
}
}
return firstItemIndex;
}
function listRegionIsNull(list, startX, endX) { //指定区间内数据是否未空
let isNull = true;
if ( !list.length ) return isNull;
for (let i = startX; i < endX; i++) {
let item = list[i];
if (item) {
isNull = false;
break;
}
}
return isNull;
}
function thisListNotItem(list) {
for (let i = 0; i < list.length; i++) {
if (list[i]) return false;
}
return true
}
function checkBlock(dataList) {
//纵向有效起始点
let startY = 0;
let startX = 0;
let isNotBlockTitle = false; //没有块标题
let isLook = false;
let endX = 0;//x轴最长结束下标 【包括下标】
let blockTitle = ''; //标题块名称
let notItem = true;
for (let i = 0; i < dataList.length; i++) {
let childList = dataList[i] || [];
if (!thisListNotItem(childList)) {
if ( !isLook ) {
let thisRoowStartX = getListFristNotNullItemIndex(childList);
let thisRoowLastItem = childList[thisRoowStartX + 1];
let LastList = dataList[i+1] || [];
// let lastRoowStartX = getListFristNotNullItemIndex(LastList);
let lastRoowHaveItem = LastList[thisRoowStartX];
if ( thisRoowLastItem || (LastList.length && lastRoowHaveItem) ) {
if (lastRoowHaveItem && thisRoowLastItem ) {
isNotBlockTitle = true; //不存在标题块
blockTitle = `${thisRoowStartX}_${i}`;
startY = i;
startX = thisRoowStartX;
}
else {
blockTitle = dataList[i][thisRoowStartX];
dataList[i][thisRoowStartX] = null;
if ( thisRoowLastItem ) { // 同行存在元素 标题在y轴上
startY = i;
startX = thisRoowStartX + 1;
} else { // 同行存在元素 标题在x轴上
startY = i + 1;
startX = thisRoowStartX;
}
}
isLook = true;
} else { //只有标题 无内容
console.log(dataList[i][thisRoowStartX]);
dataList[i][thisRoowStartX] = null;
}
} else {
//测量最大连续长度
let firstNullX = getListFirstNullItemIndex(startX, childList);
if (firstNullX) endX = Math.max(endX, firstNullX-1);
break;
}
notItem = false;
}
}
let endY = 0;//y轴连续下标 【包括下标】
let yInfoStart = false;
let yInfoEnd = false;
for (let y = startY; y < dataList.length; y++) {
//纵向找连续性
let thisRoow = dataList[y];
let regionIsNull = listRegionIsNull(thisRoow, startX, endX);
if (!regionIsNull) {
endY = y;
if (!yInfoStart) yInfoStart = true;
}
if (yInfoStart && regionIsNull) yInfoEnd = true;
if (yInfoEnd) break;
}
let blockData = [];
for (let y = startY; y <= endY; y++) {
let onceList = [];
for (let x = startX; x <= endX; x++) {
onceList.push(dataList[y][x]);
dataList[y][x] = null;
}
blockData.push(onceList);
}
return {blockData, blockTitle, delDataList:dataList,notItem};
}
//获取单个excel文件的数据
function getExcel(filePath) {
const workSheetsFromFile = xlsx.parse(filePath);
let sheetMap = {};
let sheetList = [];
for (let i = 0; i < workSheetsFromFile.length; i++) {
let sheetInfo = workSheetsFromFile[i];
sheetMap[sheetInfo.name] = sheetInfo.data;
sheetList.push(sheetInfo);
}
return {sheetMap, sheetList}
}
\ No newline at end of file
/**
* 异常类
* 需要和log4js共同使用
*/
import { getBizMsg } from "../config/errorEnum";
import { logError } from "./log";
export class BizError extends Error {
constructor(...msgs) {
let reqErrorMsg = '';
let logErrorMsg = '';
for (let i = 0; i <msgs.length; i++) {
if (!i) {
let msg = getBizMsg(msgs[i]);
reqErrorMsg = msg;
logErrorMsg = msg;
} else {
logErrorMsg += ` | ${msgs[i]} `;
}
}
logError(logErrorMsg);
super(reqErrorMsg);
}
}
/**
* 日志类
* 包括错误日志 普通日志
* 日志存放在根目录的logs内
*/
let log4js = require('log4js');
let path = require('path');
//log路径
export const systemLogPath = {
errorLogFile:"error",
errorLogDir:"error",
handleLogFile:"handle",
handleLogDir:"handle"
}
//日志根目录
// let baseLogPath = path.resolve(__dirname.substring(0, __dirname.indexOf("out")), 'logs');
let baseLogPath = path.resolve('./', 'logs');
let errFile = path.resolve(baseLogPath, systemLogPath.errorLogDir, systemLogPath.errorLogFile);
let handFile =path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile);
let config = {
appenders:
{
"rule-console": {"type": "console"},
"errorLogger": {
"type": "dateFile", // 日志类型
"filename": errFile, // 输出文件名
"pattern": "yyyy-MM-dd.log", // 后缀
"alwaysIncludePattern": true, // 上面两个参数是否合并
"encoding": "utf-8", // 编码格式
"maxLogSize": 1000, // 最大存储内容
"numBackups": 3, // 当文件内容超过文件存储空间时,备份文件的数量
"path": `/${systemLogPath.errorLogDir}`
},
"handleLogger": {
"type": "dateFile",
"filename": handFile,
"pattern": "yyyy-MM-dd.log",
"alwaysIncludePattern": true,
"encoding": "utf-8",
"maxLogSize": 1000,
"numBackups": 3,
"path": `/${systemLogPath.handleLogDir}`
}
},
categories: {
"default": {"appenders": ["rule-console"], "level": "all"}, //这个配置一定要有
"errorLogger": {"appenders": ["errorLogger"], "level": "error"},
"handleLogger": {"appenders": ["handleLogger"], "level": "all"}
},
"baseLogPath": path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile)
};
log4js.configure(config); //加载配置文件
//调用预先定义的日志名称
let errorLogger = log4js.getLogger("errorLogger");
let handleLogger = log4js.getLogger("handleLogger");
let consoleLogger = log4js.getLogger("rule-console");
//错误日志
export function logError(...errStrs) {
let str = "";
errStrs.forEach(item => {
str += item + " | ";
});
errorLogger.error(`errorInfo => ${str}`);
}
//普通日志
export function logHandle(msgStr:string) {
handleLogger.info(`logInfo => ${msgStr}`);
}
//输出日志
export function logConsole(logStr:string) {
consoleLogger.info(`logInfo => ${logStr}`);
}
/**
* 解析xml
*/
var xml2js = require("xml2js");
/**
*
* @param str 需要解析的xml文本
* @returns 解析好的对象
*/
export function analysisXml(str) {
return new Promise( (resolve, reject) => {
xml2js.parseString(str, (err, result) => {
if (err) return reject(err);
return resolve(result);
});
});
}
\ No newline at end of file
/**
* 零碎的通用工具
*/
import moment = require("moment");
/**
* 匹配新旧对象变化
* 将newObj 与 oldObj 比对,将newObj中发生变化的key返回
* 使用前需要校验对象中的内容
* @param newObj 新对象
* @param oldObj 旧对象
* @returns [key] 发生变化的key
*/
export function checkChange(newObj, oldObj) {
let changeKeyList = [];
for (let newKey in newObj) {
if (`${newObj[newKey]}` != `${oldObj[newKey]}`) changeKeyList.push(newKey);
}
return changeKeyList;
}
/**
* 根据conf截取data中的数据
* @param conf
* @param data
* @returns
*/
export function extractData(conf, data, isAdmin) {
let result = {};
for (let key in conf) {
let confInfo = conf[key];
if (confInfo.changeDate) {
if (isAdmin) result[key] = data[key] ? moment(data[key]).format("YYYY-MM-DD") : '-';
else result[key] = data[key] || 0;
} else if (confInfo.isAdd && isAdmin) {
let addStr = "";
data[key].forEach(str => {
addStr += str;
});
result[key] = addStr;
}
else {
result[key] = data[key];
if (typeof result[key] == 'string' && !result[key]) result[key] = '';
}
}
return result;
}
/**
* 校验数据对象是否有空
* @param data
* @param sensitive 敏感校验 true时 0 和 ""会校验失败 false时 校验成功
* @returns true/false true = 有空值 false=无空值
*/
export function checkDataHaveNull(data:object, sensitive:boolean) {
if (Array.isArray(data)) return data.length == 0;
if (Object.keys(data).length == 0) return true;
let success = false;
for (let key in data) {
if (data[key] == null || data[key] == undefined) success = true;
if (sensitive) {
if (data[key] === 0 || data[key] === "" ) success = true;
}
}
return success;
}
\ No newline at end of file
/**
* 请求工具
*/
import * as request from 'request';
import { BizError } from './bizError';
/**
* 请求接口(get)
* @param url 路由
* @param query 请求参数
* @param headers 请求头
* @returns
*/
export function get(url:string, query?, headers?) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
return new Promise((resolve, reject)=>{
let paramater:any = { url, json:true };
if (query) paramater.qs = query;
if (headers) paramater.headers = headers;
request.get(paramater, function (err, r, body) {
if (err) return reject(err);
if (body) {
if (body.Status == 200) return resolve(body.Result);
else if (body.Status == 201) return resolve({});
}
return reject(new Error('httpError:'+r.statusCode));
});
})
}
export function post(url, body, headers) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
let header = {"content-type": "application/json"};
return new Promise((resolve, reject)=>{
request({
url: url,
method: "POST",
json: true,
headers: Object.assign(header, headers),
body: body
}, function(error, response, resBody) {
if (!error && response.statusCode == 200) {
resolve(resBody);
}
else {
// reject(error)
}
});
})
}
export function postForm(url, body, headers) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
return new Promise((resolve, reject)=>{
request({
url: url,
method: "POST",
json: true,
form:body
}, function(error, response, res) {
if (!error) {
resolve(res);
}
else {
reject(error)
}
});
})
}
export function cozePost(url, body, headers) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
let header = {"content-type": "application/json"};
return new Promise((resolve, reject)=>{
request({
url: url,
method: "POST",
json: true,
headers: Object.assign(header, headers),
body: body
}, function(error, response, resBody) {
if (!error) {
resolve(resBody);
}
else {
resolve(error);
}
});
})
}
export function cozeGet(url:string, query?, headers?) {
if (!url || (url.search(/http:/) && url.search(/https:/)) ) throw new BizError(!url ? "请求地址为空" : "请求地址错误");
return new Promise((resolve, reject)=>{
let paramater:any = { url, json:true };
if (query) paramater.qs = query;
if (headers) paramater.headers = headers;
request.get(paramater, function (err, r, body) {
if (!err) {
resolve(body);
}
else {
resolve(err);
}
});
})
}
/**
* 校验枚举工具
*
*/
import { ERRORENUM } from "../config/errorEnum";
import { BizError } from "./bizError";
/**
* 校验value是否符合传入的枚举
* @param name 被掉用名称 用于输出异常日志
* @param key 目标字段 用于输出异常日志
* @param enumConf 目标枚举
* @param value 目标值
* 无返回 有异常直接报错
*/
export function eccEnumValue(name:string, key:string, enumConf, value:any) {
let eccSuccess = true;
if ( typeof value == 'number' ) {
if (!enumConf[value] ) eccSuccess = false;
} else if (Array.isArray(value)) {
value.forEach(item => {
if ( !enumConf[item] ) eccSuccess = false;
});
}
if (!eccSuccess) throw new BizError(ERRORENUM.请完善信息, `${name} 下的 ${key} 字段值为 ${value} 不满足枚举范围`);
}
/**
* 将枚举值转换成对应的枚举名(key)
* @param enumConf 目标枚举
* @param value 目标值
* @returns string 返回字符串 如果传入多个枚举值,就拼接字符串
*/
export function changeEnumValue(enumConf, value:any) {
if (!value) return '';
if ( typeof value == 'number' ) {
let str = enumConf[value];
/** 特化处理 中文引号在枚举中不适用*/
if (str == "_投资__孵化_类型") {
str = str.replace("__","+");
str = str.replace("_","“");
str = str.replace("_","”");
}
if (str == "经营成本过高_场地成本或人员成本_" || str == "办公空间拓展_无合适办公空间_") {
str = str.replace("_","(");
str = str.replace("_",")");
}
if (str == "迁出孵化器_仍在张江" || str == "迁出张江_仍在浦东" || str == "迁出浦东_仍在上海") {
str = str.replace("_",",");
}
if (str == "科技金融_风险投资_" || str == "科技金融_其他_" || str == "技术专家_法律专家_") {
str = str.replace("_","(");
str = str.replace("_",")");
}
return str
}
let str = "";
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("_",")");
}
str += subStr;
if (index == value.length-1) str+="";
else str += ","
});
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
/**
* 校验参数工具
*
*/
import { ERRORENUM } from "../config/errorEnum";
import { BizError } from "./bizError";
/**
* 通过config校验表单参数param
* 包括类型 String, Number, Boolean, [Number], [Object]
* 参数是必填
* 方法会校验表单中存在的多余字段
* @param name 被调用的方法名
* @param config 校验配置
* @param param 需要校验的参数
* @returns true 无需关注返回
*/
export function eccFormParam(name:string, keyTypeConf:object, param:object) {
/**校验多余字段 */
for (let key in param) {
if (!keyTypeConf[key]) throw new BizError(ERRORENUM.参数错误, name, `多余${key}字段`);
}
/**校验已填参数 */
for (let key in keyTypeConf ) {
let {type, notMustHave} = keyTypeConf[key];
let isError = false; //校验是否异常
let errorStr = "";//异常说明
let value = param[key];
let valueType = typeof value;
if ( value == null || value == undefined ) {
if (!notMustHave) throw new BizError(ERRORENUM.参数错误, name, `缺失${key}字段`);
} else {
switch(type) {
case 'Number':
if ( type.toLowerCase() != valueType ) {
isError = true;
} else {
if ((""+param[key]).indexOf('.') > -1) {
param[key] = parseInt(`${param[key] *1000}`)/1000;
}
}
break;
case 'String':
case 'Boolean':
if ( type.toLowerCase() != valueType ) isError = true;
break;
case '[Number]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'number' ) {
isError = true;
errorStr = `${key}应是number型数组其中下标${i}${typeof item}`;
}
}
break;
case '[Object]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'object' ) {
isError = true;
errorStr = `${key}应是object型数组其中下标${i}${typeof item}`;
}
}
break;
case 'Address':
/**地址类型 基本数据类型为数组字符串但是要判断层级关系 */
if ( !Array.isArray(param[key]) ) {
isError = true;
errorStr = `${key}应是数组形`;
}
if ( param[key].length != 4) {
isError = true;
errorStr = `${key}超过特定长度4 目前长度 ${param[key].length}`;
}
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'string' ) {
isError = true;
errorStr = `${key}应是string型数组其中下标${i}${typeof item}`;
}
}
/** 不符合规则的 */
let nullIndex = -1;
for (let i = 0; i < param[key].length; i++) {
if (nullIndex != -1) {//出现过空 第一次出现后的位置 都不能有值
if (param[key]) {
//做一个特化
throw new BizError(ERRORENUM.地址数据不完整, name, `${key} 下标 ${nullIndex} 为空 `);
}
}
if (nullIndex == -1 && !param[key][i]) {
/**按顺序第一次赋值 */
nullIndex = i;
}
}
break;
}
errorStr = isError && errorStr == "" ? `${key}应该是${type}型 而不是${valueType}`: errorStr;
if ( isError ) throw new BizError(ERRORENUM.请完善信息, name, errorStr);
}
}
return true;
}
/**
* 根据conf配置校验请求参数
* @param conf 配置
* @param param 表单
* @param skipKeys []不必填的字段
*/
export function eccReqParamater(conf:object, param, skipKeys?) {
skipKeys = skipKeys || [];
let skipMap = {};
skipKeys.forEach(keyName => {
skipMap[keyName] = 1;
});
/**校验多余字段 */
for (let key in param) {
if (!conf[key]) throw new BizError(ERRORENUM.参数错误, `多余${key}字段`);
}
/**校验必填和缺失字段 */
for (let key in conf) {
let confType = conf[key];
let value = param[key];
let valueType = typeof value;
if ( value == null || value == undefined ) {
if (!skipMap[key]) throw new BizError(ERRORENUM.参数错误, `缺失${key}字段`);
} else {
let isError = false;
let errorStr = "";
switch(confType) {
case 'Number':
if ( confType.toLowerCase() != valueType ) isError = true;
else {
if ((""+param[key]).indexOf('.') > -1) {
param[key] = parseInt(`${param[key] *100}`)/100;
}
}
break;
case 'String':
case 'Boolean':
if ( confType.toLowerCase() != valueType ) isError = true;
break;
case '[Number]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'number' ) {
isError = true;
errorStr = `${key}应是number型数组其中下标${i}${typeof item}`;
}
}
break;
case '[Object]':
if ( !Array.isArray(param[key]) ) isError = true;
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'object' ) {
isError = true;
errorStr = `${key}应是object型数组其中下标${i}${typeof item}`;
}
}
break;
case 'Address':
/**地址类型 基本数据类型为数组字符串但是要判断层级关系 */
if ( !Array.isArray(param[key]) ) {
isError = true;
errorStr = `${key}应是数组形`;
}
if ( param[key].length != 4) {
isError = true;
errorStr = `${key}超过特定长度4 目前长度 ${param[key].length}`;
}
for (let i =0; i < param[key].length; i++) {
let item = param[key][i];
if ( typeof item != 'string' ) {
isError = true;
errorStr = `${key}应是string型数组其中下标${i}${typeof item}`;
}
}
/** 不符合规则的 */
let nullIndex = -1;
for (let i = 0; i < param[key].length; i++) {
if (nullIndex != -1) {//出现过空 第一次出现后的位置 都不能有值
if (param[key]) {
//做一个特化
throw new BizError(ERRORENUM.地址数据不完整, `${key} 下标 ${nullIndex} 为空 `);
}
}
if (nullIndex == -1 && !param[key][i]) {
/**按顺序第一次赋值 */
nullIndex = i;
}
}
break;
}
errorStr = isError && errorStr == "" ? `${key}应该是${confType}型 而不是${valueType}`: errorStr;
if (isError) throw new BizError(ERRORENUM.参数错误, errorStr);
}
}
return param;
}
\ No newline at end of file
{
"compilerOptions": {
"module": "commonjs",
"target": "es2017",
"sourceMap": true,
"rootDir":"./src",
"outDir":"./out"
},
"exclude": [
"node_modules",
"public"
]
}
\ 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