Commit 567e1a92 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/debug": {
"version": "4.1.12",
"resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz",
"integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
"requires": {
"@types/ms": "*"
}
},
"@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/ms": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz",
"integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="
},
"@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="
},
"@types/validator": {
"version": "13.12.2",
"resolved": "https://registry.npmmirror.com/@types/validator/-/validator-13.12.2.tgz",
"integrity": "sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA=="
},
"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="
},
"aws-ssl-profiles": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz",
"integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g=="
},
"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="
},
"dottie": {
"version": "2.0.6",
"resolved": "https://registry.npmmirror.com/dottie/-/dottie-2.0.6.tgz",
"integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA=="
},
"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=="
},
"generate-function": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/generate-function/-/generate-function-2.3.1.tgz",
"integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
"requires": {
"is-property": "^1.0.2"
}
},
"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=="
},
"inflection": {
"version": "1.13.4",
"resolved": "https://registry.npmmirror.com/inflection/-/inflection-1.13.4.tgz",
"integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw=="
},
"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-property": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/is-property/-/is-property-1.0.2.tgz",
"integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
},
"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=="
}
}
},
"long": {
"version": "5.3.1",
"resolved": "https://registry.npmmirror.com/long/-/long-5.3.1.tgz",
"integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng=="
},
"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"
}
},
"lru.min": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/lru.min/-/lru.min-1.1.1.tgz",
"integrity": "sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q=="
},
"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="
},
"moment-timezone": {
"version": "0.5.47",
"resolved": "https://registry.npmmirror.com/moment-timezone/-/moment-timezone-0.5.47.tgz",
"integrity": "sha512-UbNt/JAWS0m/NJOebR0QMRHBk0hu03r5dx9GK8Cs0AS3I81yDcOc9k+DytPItgVvBP7J6Mf6U2n3BPAacAV9oA==",
"requires": {
"moment": "^2.29.4"
},
"dependencies": {
"moment": {
"version": "2.30.1",
"resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
}
}
},
"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=="
}
}
},
"mysql2": {
"version": "3.13.0",
"resolved": "https://registry.npmmirror.com/mysql2/-/mysql2-3.13.0.tgz",
"integrity": "sha512-M6DIQjTqKeqXH5HLbLMxwcK5XfXHw30u5ap6EZmu7QVmcF/gnh2wS/EOiQ4MTbXz/vQeoXrmycPlVRM00WSslg==",
"requires": {
"aws-ssl-profiles": "^1.1.1",
"denque": "^2.1.0",
"generate-function": "^2.3.1",
"iconv-lite": "^0.6.3",
"long": "^5.2.1",
"lru.min": "^1.0.0",
"named-placeholders": "^1.1.3",
"seq-queue": "^0.0.5",
"sqlstring": "^2.3.2"
},
"dependencies": {
"denque": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/denque/-/denque-2.1.0.tgz",
"integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="
},
"iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
}
},
"sqlstring": {
"version": "2.3.3",
"resolved": "https://registry.npmmirror.com/sqlstring/-/sqlstring-2.3.3.tgz",
"integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="
}
}
},
"named-placeholders": {
"version": "1.1.3",
"resolved": "https://registry.npmmirror.com/named-placeholders/-/named-placeholders-1.1.3.tgz",
"integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
"requires": {
"lru-cache": "^7.14.1"
},
"dependencies": {
"lru-cache": {
"version": "7.18.3",
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-7.18.3.tgz",
"integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="
}
}
},
"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="
},
"pg-connection-string": {
"version": "2.7.0",
"resolved": "https://registry.npmmirror.com/pg-connection-string/-/pg-connection-string-2.7.0.tgz",
"integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA=="
},
"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="
},
"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="
},
"retry-as-promised": {
"version": "7.1.1",
"resolved": "https://registry.npmmirror.com/retry-as-promised/-/retry-as-promised-7.1.1.tgz",
"integrity": "sha512-hMD7odLOt3LkTjcif8aRZqi/hybjpLNgSk5oF5FCowfCjok6LukpN2bDX7R5wDmbgBQFn7YoBxSagmtXHaJYJw=="
},
"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=="
}
}
},
"seq-queue": {
"version": "0.0.5",
"resolved": "https://registry.npmmirror.com/seq-queue/-/seq-queue-0.0.5.tgz",
"integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
},
"sequelize": {
"version": "6.37.5",
"resolved": "https://registry.npmmirror.com/sequelize/-/sequelize-6.37.5.tgz",
"integrity": "sha512-10WA4poUb3XWnUROThqL2Apq9C2NhyV1xHPMZuybNMCucDsbbFuKg51jhmyvvAUyUqCiimwTZamc3AHhMoBr2Q==",
"requires": {
"@types/debug": "^4.1.8",
"@types/validator": "^13.7.17",
"debug": "^4.3.4",
"dottie": "^2.0.6",
"inflection": "^1.13.4",
"lodash": "^4.17.21",
"moment": "^2.29.4",
"moment-timezone": "^0.5.43",
"pg-connection-string": "^2.6.1",
"retry-as-promised": "^7.0.4",
"semver": "^7.5.4",
"sequelize-pool": "^7.1.0",
"toposort-class": "^1.0.1",
"uuid": "^8.3.2",
"validator": "^13.9.0",
"wkx": "^0.5.0"
},
"dependencies": {
"debug": {
"version": "4.4.0",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz",
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"requires": {
"ms": "^2.1.3"
}
},
"moment": {
"version": "2.30.1",
"resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"semver": {
"version": "7.7.1",
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz",
"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
}
}
},
"sequelize-pool": {
"version": "7.1.0",
"resolved": "https://registry.npmmirror.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz",
"integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg=="
},
"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=="
},
"toposort-class": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/toposort-class/-/toposort-class-1.0.1.tgz",
"integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg=="
},
"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="
},
"validator": {
"version": "13.12.0",
"resolved": "https://registry.npmmirror.com/validator/-/validator-13.12.0.tgz",
"integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg=="
},
"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"
}
},
"wkx": {
"version": "0.5.0",
"resolved": "https://registry.npmmirror.com/wkx/-/wkx-0.5.0.tgz",
"integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==",
"requires": {
"@types/node": "*"
}
},
"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",
"mysql2": "^3.13.0",
"node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1",
"officegen": "^0.6.5",
"qs": "^6.11.0",
"request": "^2.88.0",
"sequelize": "^6.37.5",
"svg-captcha": "^1.3.12",
"tencentcloud-sdk-nodejs": "^4.0.562",
"ws": "^5.2.2",
"xml2js": "^0.4.23"
},
"devDependencies": {},
"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>13281</port>
<mongodb>
<path>127.0.0.1</path>
<port>27017</port>
<w>1</w>
<!-- <dataBase>baseDB</dataBase> -->
<dataBase>zjnt</dataBase>
<wtimeoutMS>30000</wtimeoutMS>
</mongodb>
</config>
/**
* 采收逻辑
*/
import { TABLENAME } from "../config/dbEnum";
import { CaiShouConfig } from "../config/eccParam";
import { PLANTTYPE, ZHONGYANGTYPE } from "../config/enum";
import * as caishouData from "../data/caishou";
import * as dikuaiData from "../data/dikuai";
import * as zhongzhiData from "../data/zhongzhi";
import { randomId, successResult } from "../tools/system";
import { changeEnumValue, eccEnumValue } from "../util/verificationEnum";
import { eccFormParam } from "../util/verificationParam";
import moment = require("moment");
/**
* 添加采收
* @param reqUser
* @param param
* @returns
*/
export async function addCaiShou(reqUser, param) {
let funName = `添加采收`;
eccFormParam(funName, CaiShouConfig, param );
eccEnumValue(funName, "plantType", PLANTTYPE, param.plantType);
//修改种养
let zhongyangParam = {isEnd:0, plantType:param.plantType, dId:param.dId};
let zhongzhiList = await zhongzhiData.selectToParam(zhongyangParam);
let sizeCount = 0;
for (let i = 0; i < zhongzhiList.length; i++) {
let {dId, size} = zhongzhiList[i];
sizeCount += size;
}
//释放地块
let diKuaiInfo = await dikuaiData.selectOne({dId:param.dId});
diKuaiInfo.nullSize = diKuaiInfo.nullSize + sizeCount;
diKuaiInfo.useSize = diKuaiInfo.useSize - sizeCount;
await diKuaiInfo.save();
let csId = randomId(TABLENAME.采收);
//改变种植面积
await zhongzhiData.updateManyToParam({isEnd:0, plantType:param.plantType}, {isEnd:1, csId});
//添加采收记录
let addInfo = {
csId,
dIdList:param.dIdList,
plantType:param.plantType,
operationTime:param.operationTime,
weight:param.weight,
ct:new Date().valueOf(),
createUser:reqUser.userId
};
await caishouData.addData(addInfo)
return successResult();
}
/**
* 采收列表
* @param selectStr
* @param dId
* @param zhongYangType
* @param plantType
* @param operationTime
* @returns
*/
export async function caiShouList(zhongYangType:number, selectStr:string, dId:string, plantType:number, operationTime:number) {
let funName = "采收列表";
eccEnumValue(funName, "zhongYangType", ZHONGYANGTYPE, zhongYangType);
let param:any = { plantType : {"$gte":zhongYangType, "$lt":zhongYangType+99} };
if (plantType) {
eccEnumValue(funName, "plantType", PLANTTYPE, plantType);
param.plantType = plantType;
}
if (dId) {
param.dIdList = {"$in":dId};
}
if (operationTime) {
let startMs = moment(operationTime).startOf("month").valueOf();
let endMs = moment(operationTime).endOf("month").valueOf();
param.useTime = {"$gt":startMs, "$lt":endMs};
}
let dikuaiList = await dikuaiData.selectToParam({});
let diKuaiMap = {};
dikuaiList.forEach(info => {
let {dId, code} = info;
diKuaiMap[dId] = code;
});
let nongShiList = await caishouData.selectToParam(param);
let dataList = [];
nongShiList.forEach(item => {
let {plantType, dIdList, operationTime, weight } = item;
let dIds = dIdList;
let didStr = "";
dIds.forEach(dId => {
didStr += `${diKuaiMap[dId]} `;
})
dataList.push({
plantType:changeEnumValue(PLANTTYPE, plantType),
dIdList:didStr,
operationTime:moment(operationTime).format("YYYY-MM-DD"),
weight
});
});
return {dataList}
}
\ No newline at end of file
import moment = require("moment");
import { TABLENAME } from "../config/dbEnum";
import { NONGSHITYPE, NONGZITYPE, PLANTTYPE, PLOTTYPE, PURPOSE, SHUCAI, XIAOSHOUQUXIANG } from "../config/enum";
import * as dikuaiData from "../data/dikuai";
import * as usersData from "../data/users";
import { getPwdMd5, md5PwdStr, randomId } from "../tools/system";
import { onceSheetBecomeOfblockData } from "../util/analysisExcel";
import { info } from "console";
import * as zhongzhiData from "../data/zhongzhi";
import * as caishouData from "../data/caishou";
import * as xiaoshouData from "../data/xiaoshou";
import * as nongshiData from "../data/nongshi";
import * as nongziData from "../data/nongzi";
import { changeEnumValue } from "../util/verificationEnum";
const md5 = require("md5");
export async function dataInit() {
// let list = [
// {name:"孙伟锋", loginId:"13501917073", userId:randomId("13501917073"), pwd:getPwdMd5("13501917073", md5PwdStr("917073")), position:"总经理、支部书记", phone:"13501917073" },
// {name:"奚准", loginId:"13681774690", userId:randomId("13681774690"), pwd:getPwdMd5("13681774690", md5PwdStr("774690")), position:"委员、副总经理", phone:"13681774690" },
// {name:"张新华", loginId:"18917398240", userId:randomId("18917398240"), pwd:getPwdMd5("18917398240", md5PwdStr("398240")), position:"副总经理", phone:"18917398240" },
// {name:"奚芬", loginId:"13482539885", userId:randomId("13482539885"), pwd:getPwdMd5("13482539885", md5PwdStr("539885")), position:"会计", phone:"13482539885" },
// {name:"周礼斌", loginId:"13916920611", userId:randomId("13916920611"), pwd:getPwdMd5("13916920611", md5PwdStr("920611")), position:"党务、办公室", phone:"13916920611" },
// {name:"王庵丽", loginId:"13817016377", userId:randomId("13817016377"), pwd:getPwdMd5("13817016377", md5PwdStr("016377")), position:"办公室、出纳", phone:"13817016377" },
// {name:"郭忠", loginId:"13817085310", userId:randomId("13817085310"), pwd:getPwdMd5("13817085310", md5PwdStr("085310")), position:"园区管理、水产队", phone:"13817085310" },
// {name:"俞晓璐", loginId:"13651822368", userId:randomId("13651822368"), pwd:getPwdMd5("13651822368", md5PwdStr("822368")), position:"园区管理", phone:"13651822368" },
// {name:"顾晓云", loginId:"13918083136", userId:randomId("13918083136"), pwd:getPwdMd5("13918083136", md5PwdStr("083136")), position:"网格、办公室", phone:"13918083136" },
// {name:"唐秀英", loginId:"13817682215", userId:randomId("13817682215"), pwd:getPwdMd5("13817682215", md5PwdStr("682215")), position:"园区管理、水产队", phone:"13817682215" },
// {name:"赵华", loginId:"13601603073", userId:randomId("13601603073"), pwd:getPwdMd5("13601603073", md5PwdStr("603073")), position:"园区管理", phone:"13601603073" },
// {name:"郭晓军", loginId:"13917808059", userId:randomId("13917808059"), pwd:getPwdMd5("13917808059", md5PwdStr("808059")), position:"园区管理", phone:"13917808059" },
// {name:"王奇勇", loginId:"13681878706", userId:randomId("13681878706"), pwd:getPwdMd5("13681878706", md5PwdStr("878706")), position:"园区管理", phone:"13681878706" },
// {name:"乔燕苗", loginId:"13917181512", userId:randomId("13917181512"), pwd:getPwdMd5("13917181512", md5PwdStr("181512")), position:"河道管理", phone:"13917181512" },
// {name:"陆雨薇", loginId:"13816303956", userId:randomId("13816303956"), pwd:getPwdMd5("13816303956", md5PwdStr("303956")), position:"林业管理", phone:"13816303956" },
// {name:"黄蔓茜", loginId:"18217229710", userId:randomId("18217229710"), pwd:getPwdMd5("18217229710", md5PwdStr("229710")), position:"林业管理", phone:"18217229710" },
// {name:"吴昊", loginId:"13761401296", userId:randomId("13761401296"), pwd:getPwdMd5("13761401296", md5PwdStr("401296")), position:"林业养护", phone:"13761401296" },
// {name:"赵志俊", loginId:"18516205482", userId:randomId("18516205482"), pwd:getPwdMd5("18516205482", md5PwdStr("205482")), position:"林业养护", phone:"18516205482" },
// {name:"奚晓萍", loginId:"13816746319", userId:randomId("13816746319"), pwd:getPwdMd5("13816746319", md5PwdStr("746319")), position:"林业养护", phone:"13816746319" },
// ];
// await usersData.createManyUser(list);
const Now = new Date().valueOf();
//导入地块数据
let diKuaiList =[
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:8.5, useSize:0, size:8.5, area:"A区域", name:"A-11#", code:"A-11#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:11.3, useSize:0, size:11.3, area:"A区域", name:"A-9#", code:"A-9#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:13.3, useSize:0, size:13.3, area:"A区域", name:"A-10#", code:"A-10#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:10.4, useSize:0, size:10.4, area:"A区域", name:"A-8#", code:"A-8#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:8.3, useSize:0, size:8.3, area:"A区域", name:"A-7#", code:"A-7#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:9.5, useSize:0, size:9.5, area:"A区域", name:"A-6#", code:"A-6#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:11.9, useSize:0, size:11.9, area:"A区域", name:"A-5#", code:"A-5#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:22, useSize:0, size:22, area:"A区域", name:"A-1#", code:"A-1#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:14.9, useSize:0, size:14.9, area:"A区域", name:"A-2#", code:"A-2#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:22.7, useSize:0, size:22.7, area:"A区域", name:"A-3#", code:"A-3#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:26.9, useSize:0, size:26.9, area:"A区域", name:"A-4#", code:"A-4#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:8.2, useSize:0, size:8.2, area:"B区域", name:"B-1#", code:"B-1#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:5.8, useSize:0, size:5.8, area:"B区域", name:"B-2#", code:"B-2#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:5.2, useSize:0, size:5.2, area:"B区域", name:"B-3#", code:"B-3#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:2.8, useSize:0, size:2.8, area:"B区域", name:"B-14#", code:"B-14#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:6.5, useSize:0, size:6.5, area:"B区域", name:"B-10#", code:"B-10#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:10, useSize:0, size:10, area:"B区域", name:"B-4#", code:"B-4#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:10, useSize:0, size:10, area:"B区域", name:"B-5#", code:"B-5#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:3.4, useSize:0, size:3.4, area:"B区域", name:"B-9#", code:"B-9#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:3.4, useSize:0, size:3.4, area:"B区域", name:"B-8#", code:"B-8#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:3, useSize:0, size:3, area:"B区域", name:"B-7#", code:"B-7#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:3, useSize:0, size:3, area:"B区域", name:"B-6#", code:"B-6#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:4.1, useSize:0, size:4.15, area:"B区域", name:"B-11#", code:"B-11#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:4.1, useSize:0, size:4.1, area:"B区域", name:"B-12#", code:"B-12#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:8.1, useSize:0, size:8.1, area:"B区域", name:"B-13#", code:"B-13#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:3.6, useSize:0, size:3.6, area:"B区域", name:"B-15#", code:"B-15#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:2.5, useSize:0, size:2.5, area:"B区域", name:"B-16#", code:"B-16#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:13.6, useSize:0, size:13.6, area:"C区域", name:"C-3#", code:"C-3#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:8.2, useSize:0, size:8.2, area:"C区域", name:"C-2#", code:"C-2#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:8.5, useSize:0, size:8.5, area:"C区域", name:"C-1#", code:"C-1#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:10.4, useSize:0, size:10.4, area:"D区域", name:"D-1#", code:"D-1#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:8.7, useSize:0, size:8.7, area:"D区域", name:"D-2#", code:"D-2#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, createUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:6.2, useSize:0, size:6.2, area:"D区域", name:"D-A-02#", code:"D-A-02#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, createUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:5.2, useSize:0, size:5.2, area:"D区域", name:"D-A-03#", code:"D-A-03#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, createUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:10.4, useSize:0, size:10.4, area:"D区域", name:"D-B-01#", code:"D-B-01#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, createUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:3.4, useSize:0, size:3.4, area:"D区域", name:"D-B-02#", code:"D-B-02#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, createUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:6.2, useSize:0, size:6.2, area:"D区域", name:"D-C-01#", code:"D-C-01#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, createUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:6.2, useSize:0, size:6.2, area:"D区域", name:"D-C-02#", code:"D-C-02#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, createUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:6.6, useSize:0, size:6.6, area:"D区域", name:"D-C-03#", code:"D-C-03#"},
{ dId:randomId(TABLENAME.地块表), ct : Now, createUser:"admin", purpose:PURPOSE.菜田, plotType:PLOTTYPE.地块, nullSize:6.6, useSize:0, size:6.6, area:"D区域", name:"D-C-04#", code:"D-C-04#"},
//养殖池
{ dId:randomId(TABLENAME.地块表), ct : Now, creatUser:"admin", purpose:PURPOSE.养殖, plotType:PLOTTYPE.养殖池, nullSize:100, useSize:0, size:100, area:"A区域", name:"A-01#", code:"A-01#"},
];
let 校验面积Map = {};
let diKuaiMap = {}
diKuaiList.forEach(info => {
diKuaiMap[info.name] = info.dId;
校验面积Map[info.name] = info.size;
});
await dikuaiData.addManyData(diKuaiList);
//导入地块成功
// 导入种植数据
let zhongzhiDataList = [
{dId:diKuaiMap["A-10#"], plantType:SHUCAI.黄瓜, zId:randomId(TABLENAME.种植表), code:"A-10#", size:2, plantTime:new Date("2024-12-5 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["A-3#"], plantType:SHUCAI.草莓, zId:randomId(TABLENAME.种植表), code:"A-3#", size:0.5, plantTime:new Date("2024-9-4 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["A-10#"], plantType:SHUCAI.莴笋, zId:randomId(TABLENAME.种植表), code:"A-10#", size:3.5, plantTime:new Date("2024-11-30 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["A-10#"], plantType:SHUCAI.小番茄, zId:randomId(TABLENAME.种植表), code:"A-10#", size:5, plantTime:new Date("2024-12-5 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-6#"], plantType:SHUCAI.萝卜, zId:randomId(TABLENAME.种植表), code:"B-6#", size:2, plantTime:new Date("2024-10-28 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-4#"], plantType:SHUCAI.青菜, zId:randomId(TABLENAME.种植表), code:"B-4#", size:10, plantTime:new Date("2025-1-21 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-3#"], plantType:SHUCAI.大白菜, zId:randomId(TABLENAME.种植表), code:"B-3#", size:2, plantTime:new Date("2024-10-27 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-10#"], plantType:SHUCAI.红菜苔, zId:randomId(TABLENAME.种植表), code:"B-10#", size:1, plantTime:new Date("2024-10-10 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-11#"], plantType:SHUCAI.杭白菜, zId:randomId(TABLENAME.种植表), code:"B-11#", size:1, plantTime:new Date("2025-1-19 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["A-8#"], plantType:SHUCAI.球生菜, zId:randomId(TABLENAME.种植表), code:"A-8#", size:10, plantTime:new Date("2024-11-15 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["A-9#"], plantType:SHUCAI.球生菜, zId:randomId(TABLENAME.种植表), code:"A-9#", size:5, plantTime:new Date("2024-11-15 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["A-11#"], plantType:SHUCAI.球生菜, zId:randomId(TABLENAME.种植表), code:"A-11#", size:5, plantTime:new Date("2024-11-15 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-2#"], plantType:SHUCAI.球生菜, zId:randomId(TABLENAME.种植表), code:"B-2#", size:5, plantTime:new Date("2024-11-21 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-5#"], plantType:SHUCAI.球生菜, zId:randomId(TABLENAME.种植表), code:"B-5#", size:5, plantTime:new Date("2024-11-21 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-4#"], plantType:SHUCAI.黄心菜, zId:randomId(TABLENAME.种植表), code:"B-4#", size:1, plantTime:new Date("2024-11-7 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-2#"], plantType:SHUCAI.米苋, zId:randomId(TABLENAME.种植表), code:"B-2#", size:1, plantTime:new Date("2025-4-12 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-2#"], plantType:SHUCAI.鸡毛菜, zId:randomId(TABLENAME.种植表), code:"B-2#", size:0.5, plantTime:new Date("2025-4-12 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-2#"], plantType:SHUCAI.青菜, zId:randomId(TABLENAME.种植表), code:"B-2#", size:2, plantTime:new Date("2025-4-12 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-2#"], plantType:SHUCAI.杭白菜, zId:randomId(TABLENAME.种植表), code:"B-2#", size:0.5, plantTime:new Date("2025-4-12 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-4#"], plantType:SHUCAI.杭白菜, zId:randomId(TABLENAME.种植表), code:"B-4#", size:0.5, plantTime:new Date("2025-4-12 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-4#"], plantType:SHUCAI.青菜, zId:randomId(TABLENAME.种植表), code:"B-4#", size:1.5, plantTime:new Date("2025-4-12 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-2#"], plantType:SHUCAI.玉米, zId:randomId(TABLENAME.种植表), code:"B-2#", size:1, plantTime:new Date("2025-4-12 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["B-6#"], plantType:SHUCAI.玉米, zId:randomId(TABLENAME.种植表), code:"B-6#", size:0.5, plantTime:new Date("2025-4-13 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["D-A-02#"], plantType:SHUCAI.番茄, zId:randomId(TABLENAME.种植表), code:"D-A-02#", size:6.2, plantTime:new Date("2024-10-8 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["D-A-03#"], plantType:SHUCAI.番茄, zId:randomId(TABLENAME.种植表), code:"D-A-03#", size:5.2, plantTime:new Date("2024-9-26 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["D-B-01#"], plantType:SHUCAI.番茄, zId:randomId(TABLENAME.种植表), code:"D-B-01#", size:10.4, plantTime:new Date("2024-10-11 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["D-B-02#"], plantType:SHUCAI.番茄, zId:randomId(TABLENAME.种植表), code:"D-B-02#", size:3.4, plantTime:new Date("2024-10-13 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["D-C-01#"], plantType:SHUCAI.番茄, zId:randomId(TABLENAME.种植表), code:"D-C-01#", size:6.2, plantTime:new Date("2024-10-15 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["D-C-02#"], plantType:SHUCAI.番茄, zId:randomId(TABLENAME.种植表), code:"D-C-02#", size:6.2, plantTime:new Date("2024-10-8 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["D-C-03#"], plantType:SHUCAI.番茄, zId:randomId(TABLENAME.种植表), code:"D-C-03#", size:6.6, plantTime:new Date("2024-10-9 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["D-C-04#"], plantType:SHUCAI.番茄, zId:randomId(TABLENAME.种植表), code:"D-C-04#", size:6.6, plantTime:new Date("2024-10-9 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["D-1#"], plantType:SHUCAI.番茄, zId:randomId(TABLENAME.种植表), code:"D-1#", size:6.9, plantTime:new Date("2024-10-20 00:00:00").valueOf(), uId:"admin", isEnd:0},
{dId:diKuaiMap["D-2#"], plantType:SHUCAI.番茄, zId:randomId(TABLENAME.种植表), code:"D-2#", size:5.7, plantTime:new Date("2024-10-19 00:00:00").valueOf(), uId:"admin", isEnd:0},
];
for (let i= 0; i < zhongzhiDataList.length; i++) {
let {dId, size, code} = zhongzhiDataList[i];
let diKuaiInfo = await dikuaiData.selectOne({dId});
if (!diKuaiInfo) {
console.log("锚点1 地块不存在", dId, code);
}
else {
diKuaiInfo.nullSize = diKuaiInfo.size - size;
diKuaiInfo.useSize = diKuaiInfo.useSize + size;
}
await diKuaiInfo.save();
await zhongzhiData.addData(zhongzhiDataList[i]);
}
//校验种植面积
let 校验种养map = {};
let 种养面积 = {};
let countMap= {};
for (let i= 0; i < zhongzhiDataList.length; i++) {
let {code, size, plantType} = zhongzhiDataList[i];
if (!种养面积[code]) 种养面积[code] = 0;
种养面积[code] += size;
if (!countMap[`${code}_${plantType}`]) countMap[`${code}_${plantType}`] = 0;
countMap[`${code}_${plantType}`] += 1;
}
for (let code in 种养面积) {
let size = 种养面积[code];
if (校验面积Map[code].size < size) console.log(code, "种植面积", size ,"大于", 校验面积Map[code].size);
}
for (let i= 0; i < zhongzhiDataList.length; i++) {
let {code, size, zId, plantType} = zhongzhiDataList[i];
if (!校验面积Map[code]) console.log("codeId不对", code);
校验种养map[`${code}_${plantType}`] = zId;
}
let caiShouList = [
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.黄瓜, code:"A-10#", dIdList:["A-10#"], weight:3780, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.草莓, code:"A-3#", dIdList:["A-3#"], weight:125, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.莴笋, code:"A-10#", dIdList:["A-10#"], weight:1220, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.小番茄, code:"A-10#", dIdList:["A-10#"], weight:465, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.萝卜, code:"B-6#", dIdList:["B-6#"], weight:1370, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.青菜, code:"B-4#", dIdList:["B-4#"], weight:21420, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.大白菜, code:"B-3#", dIdList:["B-3#"], weight:4200, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.红菜苔, code:"B-10#", dIdList:["B-10#"], weight:110, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.杭白菜, code:"B-11#", dIdList:["B-11#"], weight:800, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.球生菜, code:"A-8#", dIdList:["A-8#"], weight:15000, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.球生菜, code:"A-9#", dIdList:["A-9#"], weight:7500, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.球生菜, code:"A-11#", dIdList:["A-11#"], weight:7500, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.球生菜, code:"B-5#", dIdList:["B-5#"], weight:15065, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.球生菜, code:"B-2#", dIdList:["B-2#"], weight:15065, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.黄心菜, code:"B-4#", dIdList:["B-4#"], weight:240, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"A-02#", dIdList:["A-02#"], weight:8000, operationTime:new Date("2024-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"D-A-02#", dIdList:["D-A-02#"], weight:2500, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"D-A-03#", dIdList:["D-A-03#"], weight:1200, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"D-B-01#", dIdList:["D-B-01#"], weight:5000, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"D-B-02#", dIdList:["D-B-02#"], weight:1200, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"D-C-01#", dIdList:["D-C-01#"], weight:3000, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"D-C-02#", dIdList:["D-C-02#"], weight:3000, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"D-C-03#", dIdList:["D-C-03#"], weight:4500, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"D-C-04#", dIdList:["D-C-04#"], weight:4000, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"D-1#", dIdList:["D-1#"], weight:3000, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"D-2#", dIdList:["D-2#"], weight:2000, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.牛心菜, code:"B-12#", dIdList:["B-12#"], weight:250, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.青菜, code:"B-4#", dIdList:["B-4#"], weight: 755, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.青菜, code:"B-1#", dIdList:["B-1#"], weight:1510, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.鸡毛菜, code:"B-6#", dIdList:["B-6#"], weight: 215, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.鸡毛菜, code:"B-1#", dIdList:["B-1#"], weight:215, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.鸡毛菜, code:"A-8#", dIdList:["A-8#"], weight:60, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.草莓, code:"A-3#", dIdList:["A-3#"], weight:200, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"A-10#", dIdList:["A-10#"], weight:1700, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.番茄, code:"B-8#", dIdList:["B-8#"], weight:1700, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.生菜, code:"B-11#", dIdList:["B-11#"], weight:620, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.杭白菜, code:"B-4#", dIdList:["B-4#"], weight: 365, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.杭白菜, code:"B-1#", dIdList:["B-1#"], weight:365, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.茼蒿, code:"A-8#", dIdList:["A-8#"], weight:60, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{csId:randomId(TABLENAME.采收), plantType:SHUCAI.茼蒿, code:"B-12#", dIdList:["B-12#"], weight:380, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
];
let addCaiShouList = [];
let 映射Map = {};
for (let i= 0; i < caiShouList.length; i++) {
let {code, plantType} = caiShouList[i];
if (!校验种养map[`${code}_${plantType}`]) console.log(code, "种类:", changeEnumValue(SHUCAI, plantType) ,"无效");
else {
addCaiShouList.push(caiShouList[i]);
映射Map[`${code}_${plantType}`] = 校验种养map[`${code}_${plantType}`];
}
}
for (let i= 0; i < addCaiShouList.length; i++) {
let {dIdList, size, code, plantType, csId} = addCaiShouList[i];
let zId = 映射Map[`${code}_${plantType}`];
let zhongzhiInfo = await zhongzhiData.selectOne({zId, isEnd:0});
if (zhongzhiInfo) {
zhongzhiInfo.csId = csId;
countMap[`${code}_${plantType}`] -= 1;
if (countMap[`${code}_${plantType}`] <= 0) {
zhongzhiInfo.isEnd = 1;
}
await zhongzhiInfo.save();
let diKuaiInfo = await dikuaiData.selectOne({code});
if (!diKuaiInfo) console.log("锚点2 地块不存在", code);
else {
diKuaiInfo.nullSize = diKuaiInfo.nullSize + zhongzhiInfo.size;
diKuaiInfo.useSize = diKuaiInfo.useSize - zhongzhiInfo.size;
}
await diKuaiInfo.save();
}
await caishouData.addData(addCaiShouList[i]);
}
let xiaoshouList = [
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.黄瓜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:3780, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.草莓, quXiang:XIAOSHOUQUXIANG.田头销售, weight:125, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.莴笋, quXiang:XIAOSHOUQUXIANG.田头销售, weight:1220, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.小番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:465, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.萝卜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:1370, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.青菜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:21420, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.大白菜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:4200, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.红菜苔, quXiang:XIAOSHOUQUXIANG.田头销售, weight:110, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.杭白菜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:800, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.球生菜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:30000, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.球生菜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:15065, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.黄心菜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:240, operationTime:new Date("2024-2-1 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:8000, operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:2500, operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:1200, operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:5000, operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:1200, operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:3000, operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:3000, operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:4500, operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:4000, operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:3000, operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:2000, operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.牛心菜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:250, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.青菜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:1510, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.鸡毛菜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:490, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.草莓, quXiang:XIAOSHOUQUXIANG.田头销售, weight:200, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.番茄, quXiang:XIAOSHOUQUXIANG.田头销售, weight:3400, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.生菜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:620, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.杭白菜, quXiang:XIAOSHOUQUXIANG.田头销售, weight:730, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
{xsId:randomId(TABLENAME.销售), plantType:SHUCAI.茼蒿, quXiang:XIAOSHOUQUXIANG.田头销售, weight:440, operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now, createUser:"admin"},
]
await xiaoshouData.addManyData(xiaoshouList);
let nongshi = [
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-2#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-2#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-2#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-2#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-2#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-2#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-2#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-2#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-4#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-4#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-4#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-4#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-2#"]], operationTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["B-6#"]], operationTime:new Date("2025-4-13 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["A-1#"]], operationTime:new Date("2025-1-5 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["A-2#"]], operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["D-A-02#"]], operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["D-A-03#"]], operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["D-B-01#"]], operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["D-B-02#"]], operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["D-C-01#"]], operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["D-C-02#"]], operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["D-C-03#"]], operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["D-C-04#"]], operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["D-1#"]], operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nsId:randomId(TABLENAME.农事), nsType:NONGSHITYPE.灌溉, dIdList:[diKuaiMap["D-2#"]], operationTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
];
await nongshiData.addManyData(nongshi);
let nongziList = [
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.水溶肥,dIdList:[diKuaiMap["A-2#"]], plantType:SHUCAI.番茄, count:30, useTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.水溶肥,dIdList:[diKuaiMap["D-A-2#"]], plantType:SHUCAI.番茄, count:20, useTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.水溶肥,dIdList:[diKuaiMap["D-A-3#"]], plantType:SHUCAI.番茄, count:20, useTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.水溶肥,dIdList:[diKuaiMap["D-B-1#"]], plantType:SHUCAI.番茄, count:40, useTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.水溶肥,dIdList:[diKuaiMap["D-C-2#"]], plantType:SHUCAI.番茄, count:15, useTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.水溶肥,dIdList:[diKuaiMap["D-C-1#"]], plantType:SHUCAI.番茄, count:20, useTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.水溶肥,dIdList:[diKuaiMap["D-C-2#"]], plantType:SHUCAI.番茄, count:20, useTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.水溶肥,dIdList:[diKuaiMap["D-C-3#"]], plantType:SHUCAI.番茄, count:20, useTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.水溶肥,dIdList:[diKuaiMap["D-C-4#"]], plantType:SHUCAI.番茄, count:20, useTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.水溶肥,dIdList:[diKuaiMap["D-1#"]], plantType:SHUCAI.番茄, count:35, useTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.水溶肥,dIdList:[diKuaiMap["D-2#"]], plantType:SHUCAI.番茄, count:30, useTime:new Date("2025-4-7 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.复合肥,dIdList:[diKuaiMap["B-4#"]], plantType:SHUCAI.杭白菜, count:10, useTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.复合肥,dIdList:[diKuaiMap["B-4#"]], plantType:SHUCAI.青菜, count:30, useTime:new Date("2025-4-12 00:00:00").valueOf(),ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.追肥保果素,dIdList:[diKuaiMap["B-7#"]], plantType:SHUCAI.番茄, count:2, useTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.银法利,dIdList:[diKuaiMap["B-1#"]], plantType:SHUCAI.番茄, count:150, useTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.银法利,dIdList:[diKuaiMap["B-5#"]], plantType:SHUCAI.番茄, count:150, useTime:new Date("2025-4-12 00:00:00").valueOf(), ct:Now},
{nzId:randomId(TABLENAME.农资), nzType:NONGZITYPE.农药,dIdList:[diKuaiMap["A-10#"]], plantType:SHUCAI.小番茄, count:108, useTime:new Date("2025-2-23 00:00:00").valueOf(), ct:Now}
]
await nongziData.addManyData(nongziList);
console.log("数据导入成功");
}
/**
* 数据接口输出
*/
import moment = require("moment");
import { LIANGSHI, NONGZITYPE, PLANTTYPE, PLOTTYPE } from "../config/enum";
import { diKuaiSizeCountByParam } from "../data/dikuai";
import { statisNongZiType, statisNongZiTypeCountByTime } from "../data/nongzi";
import { selectToParam, zhongZhiTongJiCount } from "../data/zhongzhi"
import * as nongshiData from "../data/nongshi"
import * as xiaoshouData from "../data/xiaoshou"
import { changeEnumValue } from "../util/verificationEnum";
import { selectChanLiangOfMonth } from "../data/caishou";
export async function getDataOut() {
let 种植总面积 = 0;
let 粮田面积 = 0;
let 菜田面积 = 0;
let 作物数量 = 0;
let zhongZhiList = await zhongZhiTongJiCount();
let zhongZhiZuoWuList = []; //结果
zhongZhiList.forEach(info => {
let {_id, sizeCount} = info;
种植总面积 += sizeCount;
if (_id == LIANGSHI.水稻 || _id == LIANGSHI.蚕豆) {
粮田面积 += sizeCount;
} else if (_id < 100) {
菜田面积 += sizeCount;
}
if ( !(_id > 100 && _id < 200)) {
作物数量 += 1;
zhongZhiZuoWuList.push({key:changeEnumValue(PLANTTYPE, _id), value:sizeCount});
}
});
let diKuaiInfo = await diKuaiSizeCountByParam({plotType:PLOTTYPE.地块});
let 地块使用率 = 0;
if (diKuaiInfo.totalSize && diKuaiInfo.totalUseSize) {
地块使用率 = Math.round(diKuaiInfo.totalUseSize/diKuaiInfo.totalSize * 100);
}
let zhongZhiTypeList = [
{key:"种植总面积", value:种植总面积},
{key:"菜田面积", value:菜田面积},
{key:"粮田面积", value:粮田面积},
{key:"作物数量", value:作物数量},
{key:"地块使用率", value:地块使用率},
]; //结果
let 农资类型 = await statisNongZiType();
let 农资情况Map = {};
农资情况Map[NONGZITYPE.肥料] = {key:changeEnumValue(NONGZITYPE, NONGZITYPE.肥料), value:0};
农资情况Map[NONGZITYPE.农药] = {key:changeEnumValue(NONGZITYPE, NONGZITYPE.农药), value:0};
农资情况Map[NONGZITYPE.其他] = {key:changeEnumValue(NONGZITYPE, NONGZITYPE.其他), value:0};
农资类型.forEach(info => {
let {_id, count} = info;
if (农资情况Map[_id]) 农资情况Map[_id].value = count;
});
let nongZiList = Object.values(农资情况Map); //结果
let nongZiAllMonthList = await statisNongZiTypeCountByTime();
let nongZiCountInfo = {};//肥料用药情况
nongZiCountInfo[NONGZITYPE.农药] = {};
nongZiCountInfo[NONGZITYPE.肥料] = {};
// nongZiAllMonthList = [
// { "totalWeight" : 15, "year" : 2025, "month" : 1, "nzType" : 2 },
// { "totalWeight" : 23, "year" : 2025, "month" : 2, "nzType" : 1 },
// { "totalWeight" : 10, "year" : 2025, "month" : 3, "nzType" : 1 },
// ]
nongZiAllMonthList.forEach(info => {
let {year, month, nzType, totalWeight} = info;
if (nongZiCountInfo[nzType]) {
nongZiCountInfo[nzType][`${year}-${month}`] = totalWeight;
};
});
let 肥料 = [];
let 用药 = [];
for (let i = 9; i >= 0; i--) {
let key = moment().subtract(i, 'months').format("YYYY-M");
肥料.push({
key,
value:nongZiCountInfo[NONGZITYPE.肥料][key] || 0
});
用药.push({
key,
value:nongZiCountInfo[NONGZITYPE.农药][key] || 0
});
}
let feiliaoyongyaoqingkuang = [ //结果
{name:"肥料", data:肥料},
{name:"用药", data:用药},
];
let nongShiCount = await nongshiData.selectCountByParam({}); //结果
let nongshiTyptList = await nongshiData.statisNongShiType();
let 操作趋势 = {};
let nongShiList = [];//结果
nongshiTyptList.forEach(info => {
let {year, month, count} = info;
操作趋势[`${year}-${month}`] = count;
});
for (let i = 9; i >= 0; i--) {
let key = moment().subtract(i, 'months').format("YYYY-M");
nongShiList.push({
key,
value:操作趋势[key] || 0
});
}
let monthDBList = await selectChanLiangOfMonth();
let 作物产量Map = {};
monthDBList.forEach(info => {
let {year, month, totalWeight} = info;
let key = `${year}-${month}`;
if (!作物产量Map[key]) 作物产量Map[key] = 0;
作物产量Map[key] += totalWeight;
});
let 今年 = [];
let 去年 = [];
let thisYear = new Date().getFullYear();
let lastYear = thisYear - 1;
let 今年产量总数 = 0;
let 去年产量总数 = 0;
for (let i =1; i <=12; i++) {
let thisYearItem = 作物产量Map[`${thisYear}-${i}`] || 0;
let lastYearItem = 作物产量Map[`${lastYear}-${i}`] || 0;
今年.push({key: `${thisYear}-${i}`, value:thisYearItem });
去年.push({key: `${lastYear}-${i}`, value:lastYearItem });
今年产量总数 += thisYearItem;
去年产量总数 += lastYearItem;
}
let chanLiangList = [ //结果
{name:"今年", data:今年},
{name:"去年", data:去年},
];
let 产量年同比 = 0;
if (今年产量总数 && 去年产量总数) {
产量年同比 = Math.round((今年产量总数 - 去年产量总数)/ 去年产量总数*10000)/100
}
let chanLiangStatisList = [//结果
{key:"作物产量", value:今年产量总数},
{key:"同比", value:产量年同比}
];
let xiaoshouStartMs = moment().subtract(1, "months").startOf('month').valueOf();
let xiaoshouEndMs = moment().startOf('month').valueOf();
let xiaoshouDBList = await xiaoshouData.selectToParam({operationTime:{"$gt":xiaoshouStartMs, "$lt":xiaoshouEndMs }});
let lastMonthXiaoShou = 0;
let lastMonthXiaoShouMap = {};
xiaoshouDBList.forEach(info => {
let {operationTime, weight} = info;
lastMonthXiaoShou += weight;
let key = moment(operationTime).format("MM-DD");
let dayKey = moment(operationTime).format("DD");
if (!lastMonthXiaoShouMap[key]) lastMonthXiaoShouMap[key] = {key:dayKey, value:0};
lastMonthXiaoShouMap[key].value += weight;
});
let lastMonthXiaoShouList = Object.values(lastMonthXiaoShouMap);//结果
return {
zhongZhiZuoWuList,
zhongZhiTypeList,
nongZiList,
feiliaoyongyaoqingkuang,
nongShiList,
nongShiCount,
chanLiangList,
chanLiangStatisList,
lastMonthXiaoShou,
lastMonthXiaoShouList
}
}
/**
* 地块
*/
import { TABLENAME } from "../config/dbEnum";
import { DiKuaiConfig, YangZhiChiConfig } from "../config/eccParam";
import { AREARANGE, PLANTTYPE, PLOTTYPE, PURPOSE, ZHONGYANGTYPE } from "../config/enum";
import { ERRORENUM } from "../config/errorEnum";
import * as dikuaiData from "../data/dikuai";
import { randomId, successResult } from "../tools/system";
import { BizError } from "../util/bizError";
import { changeEnumValue, eccEnumValue } from "../util/verificationEnum";
import { eccFormParam } from "../util/verificationParam";
/**
* 添加地块
* @param reqUser
* @param plotType
* @param param
* @returns
*/
export async function addDiKuai(reqUser, plotType, param) {
let funName = `添加地块`;
eccEnumValue(funName, "plottype", PLOTTYPE, plotType);
let purpose = PURPOSE.养殖;
if (plotType == PLOTTYPE.地块) {
eccFormParam(funName+changeEnumValue(PLOTTYPE, plotType), DiKuaiConfig, param);
eccEnumValue(funName, "param=>type", PURPOSE, param.type);
purpose = param.type;
} else {
eccFormParam(funName+changeEnumValue(PLOTTYPE, plotType), YangZhiChiConfig, param);
}
let addInfo = {
dId:randomId(TABLENAME.地块表),
size:param.size,
useSize:0,//使用大小默认0
nullSize:param.size,//初始可使用大小为大小
code:param.code,
name:param.code, //地块名称
plotType,
purpose,//用途 【枚举】 PURPOSE
createUser:reqUser.userId,
ct:new Date().valueOf()
};
await dikuaiData.addData(addInfo);
return successResult();
}
/**
* 地块信息
* @param plotType
* @param selectStr
* @param code
* @param purpose
* @param area
* @returns
*/
export async function diKuaiInfo(dId:String ) {
let funName = "地块信息";
let dikuaiInfo = await dikuaiData.selectOne({dId});
let dataInfo = {
size:dikuaiInfo.size,
dId:dikuaiInfo.dId,
type:dikuaiInfo.purpose,
purpose:changeEnumValue(PURPOSE, dikuaiInfo.purpose),
code:dikuaiInfo.code
};
return {dataInfo}
}
/**
* 地块列表
* @param plotType
* @param selectStr
* @param code
* @param purpose
* @param area
* @returns
*/
export async function diKuaiList(plotType:number, selectStr:string, code:string, purpose:number, area:number ) {
let funName = "地块列表";
eccEnumValue(funName, "plottype", PLOTTYPE, plotType);
let param:any = {plotType};
if (code) {
param.code = { "$regex":code };
}
if (purpose) {
eccEnumValue(funName, "purpose", PURPOSE, purpose);
param.purpose = purpose;
}
if (area) {
eccEnumValue(funName, "area", AREARANGE, area);
param.size = {"$lte": parseInt(AREARANGE[area].replace("<=", "")) };
}
let diKuaiList = await dikuaiData.selectToParam(param);
let dataList = [];
diKuaiList.forEach(item => {
let { size, dId, purpose, code } = item;
dataList.push({size,dId,type:changeEnumValue(PURPOSE, purpose),code});
});
return {dataList}
}
/**
* 修改地块信息
* @param reqUser
* @param plotType
* @param dId
* @param param
* @returns
*/
export async function updateDiKuai(reqUser, plotType, dId, param) {
let funName = `修改地块`;
eccEnumValue(funName, "plottype", PLOTTYPE, plotType);
let purpose = PURPOSE.养殖;
if (plotType == PLOTTYPE.地块) {
eccFormParam(funName+changeEnumValue(PLOTTYPE, plotType), DiKuaiConfig, param);
eccEnumValue(funName, "param=>type", PURPOSE, param.type);
purpose = param.type;
} else {
eccFormParam(funName+changeEnumValue(PLOTTYPE, plotType), YangZhiChiConfig, param);
}
let dInfo = await dikuaiData.selectOne({dId});
if (!dInfo || !dInfo.dId) throw new BizError(ERRORENUM.地块不存在);
dInfo.code = param.code,
dInfo.size = param.size,
dInfo.purpose = purpose;
await dInfo.save();
return successResult();
}
/**
* 当前可种植地块
* @returns
*/
export async function keXuanDiKuaiList(zhongYangType:number) {
let param:any = {};
if (zhongYangType) {
let purpose = 1;
if (zhongYangType == ZHONGYANGTYPE.水产) purpose = PURPOSE.养殖;
else if (zhongYangType == ZHONGYANGTYPE.花卉 ||zhongYangType == ZHONGYANGTYPE.蔬菜 ) purpose = PURPOSE.菜田;
else if (zhongYangType == ZHONGYANGTYPE.粮食) purpose = PURPOSE.粮田;
param.nullSize = {"$gt":0};
param.purpose = purpose;
}
console.log("------>", JSON.stringify(param));
let dbList = await dikuaiData.selectToParam(param);
let dataList = [];
dbList.forEach(info => {
let {code, purpose, dId, size} = info;
dataList.push( {code, purpose:changeEnumValue(PURPOSE, purpose), dId, size});
});
return {dataList};
}
/**
* 当前采收地块列表
* @returns
*/
export async function keCaiShouList(zhongYangType:number) {
let purpose = 1;
if (zhongYangType == ZHONGYANGTYPE.水产) purpose = PURPOSE.养殖;
else if (zhongYangType == ZHONGYANGTYPE.花卉 ||zhongYangType == ZHONGYANGTYPE.蔬菜 ) purpose = PURPOSE.菜田;
else if (zhongYangType == ZHONGYANGTYPE.粮食) purpose = PURPOSE.粮田;
let param = {useSize:{"$gt":0}, purpose:purpose};
let dbList = await dikuaiData.selectToParam(param);
let dataList = [];
dbList.forEach(info => {
let {code, purpose, dId, size} = info;
dataList.push( {code, purpose:changeEnumValue(PURPOSE, purpose), dId, size});
});
return {dataList}
}
/**
* 全部地块列表
* @param plotType
* @param selectStr
* @param code
* @param purpose
* @param area
* @returns
*/
export async function allDiKuaiList(plotType:number ) {
let funName = "地块列表";
eccEnumValue(funName, "plottype", PLOTTYPE, plotType);
let param:any = {plotType};
let diKuaiList = await dikuaiData.selectToParam(param);
let dataList = [];
diKuaiList.forEach(item => {
let { size, dId, purpose, code } = item;
dataList.push({dId, code});
});
return {dataList}
}
\ No newline at end of file
import { TABLENAME } from "../config/dbEnum";
import { CaiShouConfig, NongShiConfig } from "../config/eccParam";
import { NONGSHITYPE, PLANTTYPE } from "../config/enum";
import * as nongshiData from "../data/nongshi";
import * as dikuaiData from "../data/dikuai";
import { getMySqlMs, randomId, successResult } from "../tools/system";
import { changeEnumValue, eccEnumValue } from "../util/verificationEnum";
import { eccFormParam } from "../util/verificationParam";
import moment = require("moment");
import { BizError } from "../util/bizError";
import { ERRORENUM } from "../config/errorEnum";
/**
* 添加农事
* @param reqUser
* @param param
* @returns
*/
export async function addNongShi(reqUser, param) {
let funName = `添加农事`;
eccFormParam(funName, NongShiConfig, param );
eccEnumValue(funName, "nsType", NONGSHITYPE, param.nsType);
//确保添加时地块还在
let dikuaiList = await dikuaiData.selectToParam({});
let diKuaiMap = {};
dikuaiList.forEach(info => {
let {dId, code} = info;
diKuaiMap[dId] = code;
});
if (!diKuaiMap[param.dIdList]) throw new BizError(ERRORENUM.地块不存在, param.dIdList);
let addInfo = {
nsId:randomId(TABLENAME.农事),
nsType:param.nsType,
dIdList:[param.dIdList],
operationTime:param.operationTime,
ct:new Date().valueOf()
};
await nongshiData.addData(addInfo)
return successResult();
}
/**
* 农事列表
* @param selectStr
* @param dId
* @param nsType
* @param operationTime
* @returns
*/
export async function nongShiList(selectStr:string, dId:string, nsType:number, operationTime:number) {
let funName = "农事列表";
let param:any = {};
if (nsType) {
eccEnumValue(funName, "nsType", NONGSHITYPE, nsType);
param.nsType = nsType;
}
if (dId) {
param.dIdList = {"$in":dId};
}
if (operationTime) {
let startMs = moment(operationTime).startOf("month").valueOf();
let endMs = moment(operationTime).endOf("month").valueOf();
param.operationTime = {"$gt":startMs, "$lt":endMs};
}
let dikuaiList = await dikuaiData.selectToParam({});
let diKuaiMap = {};
dikuaiList.forEach(info => {
let {dId, code} = info;
diKuaiMap[dId] = code;
});
let nongShiList = await nongshiData.selectToParam(param);
let dataList = [];
nongShiList.forEach(item => {
let {nsType, dIdList, operationTime } = item;
let didStr = "";
dIdList.forEach(dId => {
didStr += `${diKuaiMap[dId]} `;
});
dataList.push({
nsType:changeEnumValue(NONGSHITYPE, nsType),
dIdList:didStr,
operationTime:moment(operationTime).format("YYYY-MM-DD")
});
});
return {dataList}
}
\ No newline at end of file
/**
* 农资
*/
import moment = require("moment");
import { TABLENAME } from "../config/dbEnum";
import { NongZiConfig } from "../config/eccParam";
import { NONGZITYPE, PLANTTYPE } from "../config/enum";
import * as nongziData from "../data/nongzi";
import * as dikuaiData from "../data/dikuai";
import { randomId, successResult } from "../tools/system";
import { changeEnumValue, eccEnumValue } from "../util/verificationEnum";
import { eccFormParam } from "../util/verificationParam";
import { BizError } from "../util/bizError";
import { ERRORENUM } from "../config/errorEnum";
/**
* 添加农资
* @param reqUser
* @param param
* @returns
*/
export async function addNongZi(reqUser, param) {
let funName = `添加农资`;
eccFormParam(funName, NongZiConfig, param );
eccEnumValue(funName, "nzType", NONGZITYPE, param.nzType);
eccEnumValue(funName, "plantType", PLANTTYPE, param.plantType);
//确保添加时地块还在
let dikuaiList = await dikuaiData.selectToParam({});
let diKuaiMap = {};
dikuaiList.forEach(info => {
let {dId, code} = info;
diKuaiMap[dId] = code;
});
if (!diKuaiMap[param.dIdList]) throw new BizError(ERRORENUM.地块不存在, param.dIdList);
let addInfo = {
nzId:randomId(TABLENAME.农资),
nzType:param.nzType,
dIdList:[param.dIdList],
plantType:param.plantType,
count:param.count,
useTime:param.useTime,
ct:new Date().valueOf()
};
await nongziData.addData(addInfo)
return successResult();
}
/**
* 农资列表
* @param selectStr
* @param dId
* @param nzType
* @param useTime
* @returns
*/
export async function nongZiList(selectStr:string, dId:string, nzType:number, useTime:number) {
let funName = "农资列表";
let param:any = {};
if (nzType) {
eccEnumValue(funName, "nzType", NONGZITYPE, nzType);
param.nzType = nzType;
}
if (dId) {
param.dIdList = {"$in":dId};
}
if (useTime) {
let startMs = moment(useTime).startOf("month").valueOf();
let endMs = moment(useTime).endOf("month").valueOf();
param.useTime = {"$gt":startMs, "$lt":endMs};
}
let dikuaiList = await dikuaiData.selectToParam({});
let diKuaiMap = {};
dikuaiList.forEach(info => {
let {dId, code} = info;
diKuaiMap[dId] = code;
});
let diKuaiList = await nongziData.selectToParam( param );
let dataList = [];
diKuaiList.forEach(item => {
let {nzType, dIdList, plantType, count, useTime } = item;
let didStr = "";
dIdList.forEach(dId => {
didStr += `${diKuaiMap[dId]} `;
})
dataList.push({
nzType:changeEnumValue(NONGZITYPE, nzType),
dIdList:didStr,
plantType:changeEnumValue(PLANTTYPE, plantType),
count,
useTime:moment(useTime).format("YYYY-MM-DD")
});
});
return {dataList};
}
\ No newline at end of file
/**
* 用户
*/
import { ERRORENUM } from "../config/errorEnum";
import { findUserInfoByLoginId, findUserInfoByUserId } from "../data/users";
import { getPwdMd5, getToken, successResult } from "../tools/system";
import { BizError } from "../util/bizError";
import * as diKuaiData from "../data/dikuai";
import * as zhongZhiData from "../data/zhongzhi";
import { selectChanLiangOfMonth, selectChanLiangOfzuoWu } from "../data/caishou";
import { changeEnumValue } from "../util/verificationEnum";
import { PLANTTYPE } from "../config/enum";
import { selectXiaoShouOfMonth, selectXiaoShouOfzuoWu } from "../data/xiaoshou";
/**
* 登录
* @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();
}
/**
* 首页
* @param userInfo
* @returns
*/
export async function homePageChongHai(userInfo) {
// let param = {
// state:SOLVESTATE.待解决,//待解决
// };
// let visitCount = await visitData.findDataCount(param);
// let enterpriseCount = await findEnterpriseCountByParam({RAS:RAS.续存});
// let industryCount = await statisIndustryEnterprise();
return {dataInfo:{title:"当前无虫害预警", state:0}};
}
/**
* 首页 顶部
* @param userInfo
* @returns
*/
export async function homePageTop(userInfo) {
return {dataInfo:{
name:userInfo.name,
title:userInfo.position
}};
}
/**
* 首页-统计页 顶部
* @param userInfo
* @returns
*/
export async function homePageStatisTop(userInfo) {
//面积
let {totalSize, totalUseSize} = await diKuaiData.diKuaiSizeCount();
let rate = 0;
if (totalSize && totalUseSize) {
Math.round(totalUseSize/totalSize*100);
}
//品种
let zhongZhiTypeList = await zhongZhiData.pingZhongCount();
let dataInfo = {
diKuaiCount : totalSize,
zhongYangCount : totalUseSize,
zhongYangPinZhong : zhongZhiTypeList.length,
shiYongLv:rate,
};
return {dataInfo};
}
/**
* 首页-统计页 底部
* @param userInfo
* @returns
*/
export async function homePageStatisBottom(userInfo) {
let dataInfo = {
congYe : 0,
zhuanYe : 0,
chanYeZhuTi : 0,
};
return {dataInfo};
}
/**
* 统计页产量统计
* @param type
* @returns
*/
export async function homePageStatisChanLiang(type:number) {
//产量 时间分
let monthDBList = await selectChanLiangOfMonth();
let distinctMap = {};
let count = 0;
monthDBList.forEach(info => {
let {year, month, totalWeight} = info;
let strKey = "";
if (type == 1) {//年
strKey = year;
} else if (type == 2) {//季度
let quarter = 1;
if (month >= 10) quarter = 4;
else if (month >= 7) quarter = 3;
else if (month >= 4) quarter = 2;
strKey = `${year}_${quarter}`;
} else {//月
strKey = `${year}_${month}`;
}
if (!distinctMap[strKey]) distinctMap[strKey] = {key:strKey, value:0};
distinctMap[strKey].value += totalWeight;
count += totalWeight;
});
let nongChanPin = Object.values(distinctMap);
//农作物产量
let zuoWuDBList = await selectChanLiangOfzuoWu();
let zuoWu = [];
zuoWuDBList.forEach(info => {
let {_id, totalWeight} = info;
zuoWu.push({
key:changeEnumValue(PLANTTYPE, _id),
value:totalWeight
});
});
let dataInfo = {
count,
nongChanPin,
zuoWu:zuoWu,
};
return {dataInfo};
}
/**
* 统计页销售量统计
* @param type
* @returns
*/
export async function homePageStatisXiaoShou() {
let thisYear = new Date().getFullYear();
//产量
let monthDBList = await selectXiaoShouOfMonth();
let distinctMap = {};
let count = 0;
let lastYearCount = 0;
monthDBList.forEach(info => {
let {year, month, totalWeight} = info;
let strKey = `${year}_${month}`;
if (!distinctMap[strKey]) distinctMap[strKey] = {key:strKey, value:0};
distinctMap[strKey].value += totalWeight;
if (thisYear == year) count += totalWeight;
else if (year == (thisYear-1)) lastYearCount += totalWeight;
});
let xiaoShouList = Object.values(distinctMap);
let xiaoShouDBList = await selectXiaoShouOfzuoWu();
let xiaoShou = [];
xiaoShouDBList.forEach(info => {
let {_id, totalWeight} = info;
xiaoShou.push({
key:changeEnumValue(PLANTTYPE, _id),
value:totalWeight
});
});
let dataInfo = {
count,//
mom:Math.round( (count-lastYearCount)/lastYearCount * 1000 )/10,
xiaoShou:xiaoShouList,
zuoWu:xiaoShou
};
return {dataInfo};
}
/**
* 销售
*/
import { TABLENAME } from "../config/dbEnum";
import { XiaoShouConfig } from "../config/eccParam";
import { PLANTTYPE, XIAOSHOUQUXIANG } from "../config/enum";
import * as xiaoshouData from "../data/xiaoshou";
import { randomId, successResult } from "../tools/system";
import { changeEnumValue, eccEnumValue } from "../util/verificationEnum";
import { eccFormParam } from "../util/verificationParam";
import moment = require("moment");
/**
* 添加销售
* @param reqUser
* @param param
* @returns
*/
export async function addXiaoShou(reqUser, param) {
let funName = `添加销售`;
eccFormParam(funName, XiaoShouConfig, param );
eccEnumValue(funName, "quXiang", XIAOSHOUQUXIANG, param.quXiang);
eccEnumValue(funName, "plantType", PLANTTYPE, param.plantType);
let addInfo = {
xsId:randomId(TABLENAME.销售),
quXiang:param.quXiang,
plantType:param.plantType,
operationTime:param.operationTime,
weight:param.weight,
ct:new Date().valueOf(),
createUser:reqUser.userId
};
await xiaoshouData.addData(addInfo)
return successResult();
}
/**
* 销售列表
* @param selectStr
* @param quXiang
* @param plantType
* @param operationTime
* @returns
*/
export async function xiaoShouList(selectStr:string, quXiang:string, plantType:number, operationTime:number) {
let funName = "销售列表";
let param:any = {};
if (plantType) {
eccEnumValue(funName, "plantType", PLANTTYPE, plantType);
param.plantType = plantType;
}
if (quXiang) {
eccEnumValue(funName, "quXiang", XIAOSHOUQUXIANG, quXiang);
param.quXiang = quXiang;
}
if (operationTime) {
let startMs = moment(operationTime).startOf("month").valueOf();
let endMs = moment(operationTime).endOf("month").valueOf();
param.useTime = {"$gt":startMs, "$lt":endMs};
}
let nongShiList = await xiaoshouData.selectToParam(param);
let dataList = [];
nongShiList.forEach(item => {
let {plantType, quXiang, operationTime, weight } = item;
dataList.push({
plantType:changeEnumValue(PLANTTYPE, plantType),
quXiang:changeEnumValue(XIAOSHOUQUXIANG, quXiang),
operationTime:moment(operationTime).format("YYYY-MM-DD"),
weight
});
});
return {dataList}
}
\ No newline at end of file
/**
* 种养
*/
import moment = require("moment");
import { TABLENAME } from "../config/dbEnum";
import { DiKuaiConfig, ZhongYangConfig } from "../config/eccParam";
import { PLANTTYPE, PLOTTYPE, ZHONGYANGTYPE } from "../config/enum";
import * as zhongzhiData from "../data/zhongzhi";
import * as dikuaiData from "../data/dikuai";
import { randomId, successResult } from "../tools/system";
import { changeEnumValue, eccEnumValue } from "../util/verificationEnum";
import { eccFormParam } from "../util/verificationParam";
import { BizError } from "../util/bizError";
import { ERRORENUM } from "../config/errorEnum";
/**
* 种养列表
* @param plantType 种养类型
* @param selectStr
* @returns
*/
export async function zhongYangDangQianList(zhongYangType:number, selectStr:string) {
let funName = `当前种养列表`;
eccEnumValue(funName, 'zhongYangType', ZHONGYANGTYPE, zhongYangType);
let param = {
plantType:{"$gte":zhongYangType, "$lt":zhongYangType+99},
isEnd:0
};
let zyList = await zhongzhiData.selectToParam( param );
let typeMap = {};
zyList.forEach(info => {
let {plantType} = info;
typeMap[plantType] = {value:plantType, key:changeEnumValue(PLANTTYPE, plantType)};
});
let dataList = Object.values(typeMap);
return {dataList};
}
/**
* 添加种养
* @param reqUser
* @param param
* @returns
*/
export async function addZhongYang(reqUser, param) {
let funName = `添加种养`;
eccFormParam(funName, ZhongYangConfig, param);
eccEnumValue(funName, "plantType", PLANTTYPE, param.plantType);
//校验地块大小是否符合扣除
let dkInfo = await dikuaiData.selectOne({dId:param.dId});
if (!dkInfo || !dkInfo.dId) throw new BizError(ERRORENUM.地块不存在);
if (dkInfo.nullSize < param.size) throw new BizError(ERRORENUM.地块大小不足);
let addInfo = {
zId:randomId(TABLENAME.种植表),
size:param.size,//种植大小
plantType:param.plantType,//
dId:param.dId,//地块id
plantTime:param.plantTime,//种植时间
uId:reqUser.userId,
isEnd:0,
ct:new Date().valueOf()
};
await zhongzhiData.addData(addInfo);
dkInfo.nullSize = dkInfo.size - param.size;
dkInfo.useSize = dkInfo.useSize + param.size;
await dkInfo.save();
return successResult();
}
/**
* 种养记录
* @param zhongYangType
* @param selectStr
* @param plantType
* @param plantTime
* @param dId
* @returns
*/
export async function zhongYangJiLu(zhongYangType:number, selectStr:string, plantType:number, plantTime:number, dId:string) {
let funName = `种养记录`;
let param:any = { plantType:{"$gte":zhongYangType, "$lt":zhongYangType+99} };
if (plantType) {
eccEnumValue(funName, "plantType", PLANTTYPE, plantType);
param.plantType = plantType;
}
if (dId) {
param.dId = dId;
}
if (plantTime) {
let selectStartTime = moment(plantTime).startOf('month').valueOf();
let selectEndTime = moment(plantTime).endOf("month").valueOf();
param.plantTime = {"$gt":selectStartTime, "$lt":selectEndTime};
}
/**获取地块名称 */
let dikuaiList = await dikuaiData.selectToParam({});
let diKuaiMap = {};
dikuaiList.forEach(info => {
let {dId, code} = info;
diKuaiMap[dId] = code;
});
let dbList = await zhongzhiData.selectToParam(param);
let dataList = [];
dbList.forEach(info => {
dataList.push({
plantType:changeEnumValue(PLANTTYPE, info.plantType),
size:info.size,
code:diKuaiMap[info.dId],
plantTime:moment(info.plantTime).format("YYYY-MM-DD")
})
});
return {dataList};
}
\ No newline at end of file
export enum TABLENAME {
地块表='dikuai',
用户表='users',
种植表='zhongzhi',
农资='nongzi',
农事='nongshi',
采收='caishou',
销售='xiaoshou'
}
\ No newline at end of file
export const DiKuaiConfig = {
code:{type:"String" },//编号
size:{type:"Number" },//地块大小
type:{type:"Number" },//地块类型 PLOTTYPE
};
export const YangZhiChiConfig = {
code:{type:"String" },//编号
size:{type:"Number" },//地块大小
};
export const ZhongYangConfig = {
plantType:{type:"Number" },//编号
dId:{type:"String" },//地块id
size:{type:"Number" },//地块大小
plantTime:{type:"Number" },//种植时间
}
export const NongZiConfig = {
nzType:{type:"Number" },//农资类型
dIdList:{type:"[String]" },//地块id
plantType:{type:"Number"}, //种植种类【枚举】 PLANTTYPE
count:{type:"Numbe", allowNull:false},//用量
useTime:{type:"Number"},//使用时间
}
export const NongShiConfig = {
nsType:{type:"Number" },//农事类型
dIdList:{type:"[String]" },//地块id
operationTime:{type:"Number"},//使用时间
}
export const CaiShouConfig = {
plantType:{type:"Number"}, //种植种类【枚举】 PLANTTYPE
dId:{type:"String" },//地块id
weight:{type:"Number"},//采收重量
operationTime:{type:"Number"},//使用时间
}
export const XiaoShouConfig = {
plantType:{type:"Number"}, //种植种类【枚举】 PLANTTYPE
quXiang:{type:"Number" },//销售去向
weight:{type:"Number"},//采收重量
operationTime:{type:"Number"},//使用时间
}
\ No newline at end of file
/**
* 地块类型
*/
export enum PLOTTYPE {
地块 = 1,
养殖池 = 2,
}
/**
* 用途
*/
export enum PURPOSE {
菜田 = 1,
粮田 = 2,
养殖 = 1000
}
/**
* 种养类型
*/
export enum ZHONGYANGTYPE {
蔬菜 = 1,
水产 = 100,
粮食 = 200,
花卉 = 300
}
/**
* 蔬菜
*/
export enum SHUCAI {
黄瓜 = 1,
罗马生菜,
大白菜,
西红柿,
茄子,
生菜,
菜用玉米,
马铃薯,
辣椒,
花椰菜,
萝卜,
青菜,
草莓,
莴笋,
小番茄,
球生菜,
黄心菜,
红菜苔,
杭白菜,
玉米,
米苋,
鸡毛菜,
番茄,
牛心菜,
茼蒿
}
/**
* 水产
*/
export enum SHUICHAN {
鲈鱼 = 101,
鳜鱼,
鲢鱼,
胭脂鱼,
青鱼,
鲤鱼,
鲫鱼,
鲫花,
细鳞鯝,
草鱼,
黄颡鱼,
鳊鱼,
翘嘴鲌,
暗纹东方鲀,
鳙鱼
}
/**
* 粮食
*/
export enum LIANGSHI {
水稻 = 201,
蚕豆 = 202
}
/**
* 花卉
*/
export enum HUAHUITYPE {
鲜切花 = 301,
盆栽植物,
盆景,
苗树
}
/**
* 种植种类
*/
export enum PLANTTYPE {
黄瓜 = 1,
罗马生菜,
大白菜,
西红柿,
茄子,
生菜,
菜用玉米,
马铃薯,
辣椒,
花椰菜,
萝卜,
青菜,
草莓,
莴笋,
小番茄,
球生菜,
黄心菜,
红菜苔,
杭白菜,
玉米,
米苋,
鸡毛菜,
番茄,
牛心菜,
茼蒿,
鲈鱼 = 101,
鳜鱼,
鲢鱼,
胭脂鱼,
青鱼,
鲤鱼,
鲫鱼,
鲫花,
细鳞鯝,
草鱼,
黄颡鱼,
鳊鱼,
翘嘴鲌,
暗纹东方鲀,
鳙鱼,
水稻 = 201,
蚕豆 = 202,
鲜切花 = 301,
盆栽植物,
盆景,
苗树
}
export enum AREARANGE {
'<=50' = 1,
'<=100' = 2,
'<=200'
}
/**
* 农资类型
*/
export enum NONGZITYPE {
肥料 = 1,
有机肥,
水溶肥,
复合肥,
追肥保果素,
银法利,
农药,
其他,
}
/**
* 农事类型
*/
export enum NONGSHITYPE {
绿色防控 = 1,
水肥一体,
土壤保育,
施肥,
翻羽耕井,
起垄,
用药,
灌溉,
追肥,
除草,
修剪,
移栽,
药水浸种,
高温闷棚,
种植结束
}
export enum XIAOSHOUQUXIANG {
田头销售 = 1,
}
\ No newline at end of file
export enum ERRORENUM {
不存在表 = 1,
身份验证失败,
缺少必要参数_表名,
数据表不存在,
参数错误,
添加时数据对象为空,
修改时数据对象为空,
请完善信息,
地址数据不完整,
只能上传pngjpg图片,
文件上传失败,
地块不存在,
账号不存在,
密码错误,
非法登录,
身份验证过期,
地块大小不足
}
/**
* 只用做code码定义
*/
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
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, getOpenIdUrl, appId, sms, baidumap } = configInfo.config;
systemConfig.port = parseInt(port[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);
}
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
}
\ No newline at end of file
const Sequelize = require('sequelize');
export const TablesConfig = [
{
tableNameCn:'地块表',
tableName:'dikuai',
schema:{
dId: {
type:Sequelize.STRING(255), //表示属性的数据类型
allowNull:false, //表示当前列是否允许为空, false表示该列不能为空
primaryKey:true, //表示主键
unique:true //表示该列的值必须唯一
},
size: {type:Sequelize.DECIMAL, allowNull:false}, //地块大小
useSize: {type:Sequelize.DECIMAL, allowNull:false}, //使用大小
code:{type:Sequelize.STRING(255)}, //编号
name: {type:Sequelize.STRING(255)}, //地块名称
plotType:{type:Sequelize.INTEGER}, //地块类型 【枚举】 PLOTTYPE
purpose:{type:Sequelize.STRING(255)},//用途 【枚举】 PURPOSE
createUser:{type:Sequelize.STRING(255)}, //创建人
},
association: []
},
{
tableNameCn:'用户表',
tableName:'users',
schema:{
uId: {
type:Sequelize.STRING(255), //表示属性的数据类型
allowNull:false, //表示当前列是否允许为空, false表示该列不能为空
primaryKey:true, //表示主键
unique:true //表示该列的值必须唯一
},
},
association: []
},
{
tableNameCn:'种植表',
tableName:'zhongzhi',
schema:{
zId: {
type:Sequelize.STRING(255), //表示属性的数据类型
allowNull:false, //表示当前列是否允许为空, false表示该列不能为空
primaryKey:true, //表示主键
unique:true //表示该列的值必须唯一
},
size:{type:Sequelize.DECIMAL, allowNull:false}, //种植面积
plantType:{type:Sequelize.INTEGER}, //种植种类【枚举】 PLANTTYPE
dId:{type:Sequelize.STRING(255)}, //地块id
plantTime:{type:Sequelize.DATE}, //种植时间
uId:{ype:Sequelize.STRING(255)},//用户id
isEnd:{type:Sequelize.INTEGER}//是否结束 0=否 1=是
},
association: []
},
{
tableNameCn:'农资',
tableName:'nongzi',
schema:{
nzId: {
type:Sequelize.STRING(255), //表示属性的数据类型
allowNull:false, //表示当前列是否允许为空, false表示该列不能为空
primaryKey:true, //表示主键
unique:true //表示该列的值必须唯一
},
nzType:{type:Sequelize.INTEGER}, //农资类型
dIdList:{type:Sequelize.STRING(255)}, //地块id
plantType:{type:Sequelize.INTEGER}, //作物名称【枚举】 PLANTTYPE
count:{type:Sequelize.DECIMAL, allowNull:false},//用量
useTime:{type:Sequelize.DATE},//使用时间
ct:{type:Sequelize.DATE},//创建时间
},
association: []
},
{
tableNameCn:'农事',
tableName:'nongshi',
schema:{
nsId: {
type:Sequelize.STRING(255), //表示属性的数据类型
allowNull:false, //表示当前列是否允许为空, false表示该列不能为空
primaryKey:true, //表示主键
unique:true //表示该列的值必须唯一
},
nsType:{type:Sequelize.INTEGER}, //农事类型
dIdList:{type:Sequelize.STRING(255)}, //地块id
operationTime:{type:Sequelize.DATE},//操作时间
ct:{type:Sequelize.DATE},//创建时间
},
association: []
},
{
tableNameCn:'采收',
tableName:'caishou',
schema:{
csId: {
type:Sequelize.STRING(255), //表示属性的数据类型
allowNull:false, //表示当前列是否允许为空, false表示该列不能为空
primaryKey:true, //表示主键
unique:true //表示该列的值必须唯一
},
dIdList:{type:Sequelize.STRING(255)}, //地块id
plantType:{type:Sequelize.INTEGER}, //种植种类【枚举】 PLANTTYPE
weight:{type:Sequelize.DECIMAL},//采收重量
operationTime:{type:Sequelize.DATE},//采收时间
ct:{type:Sequelize.DATE},//创建时间
},
association: []
},
{
tableNameCn:'销售',
tableName:'xiaoshou',
schema:{
xsId: {
type:Sequelize.STRING(255), //表示属性的数据类型
allowNull:false, //表示当前列是否允许为空, false表示该列不能为空
primaryKey:true, //表示主键
unique:true //表示该列的值必须唯一
},
plantType:{type:Sequelize.INTEGER}, //种植种类【枚举】 PLANTTYPE
quXiang:{type:Sequelize.INTEGER},//销售去向
weight:{type:Sequelize.DECIMAL},//重量
operationTime:{type:Sequelize.DATE},//销售时间
ct:{type:Sequelize.DATE},//创建时间
},
association: []
},
];
\ No newline at end of file
import { mysqlModelMap} from "../db/sqlModelBind";
/**
* 添加数据
* @param tableModel
* @param data
* @returns
*/
export async function addData(tableEnumValue:string, data:any) {
let dataArray = [];
if (!Array.isArray(data)) {
dataArray.push(data);
} else dataArray = data;
await mysqlModelMap[tableEnumValue].bulkCreate(dataArray);
}
\ No newline at end of file
import {Schema} from 'mongoose';
import { baseDB } from '../db/dbInit';
const caishouSchema = new Schema({
csId:{type:String, index:true},//
dIdList:{type:[String]}, //地块id
plantType:Number, //种植种类【枚举】 PLANTTYPE
weight:Number,//采收重量
operationTime:Number,//采收时间 时间戳
ct:Number,//创建时间
createUser:String,//创建人
});
var caishouModel;
export function initModel(){
caishouModel = baseDB.model('caishou', caishouSchema);
caishouModel.selectOnceData = async function (paramater:object) {
let selectInfo = await caishouModel.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 addData(param) {
return await caishouModel.create(param);
}
export async function findOne(param) {
return await caishouModel.selectOnceData(param);
}
export async function selectToParam(param) {
return await caishouModel.find(param);
}
export async function selectChanLiangOfMonth() {
return await caishouModel.aggregate([
{
$group: {
_id: {
year: { $year: { date: { $toDate: "$operationTime" }, timezone: "UTC" } },
month: { $month: { date: { $toDate: "$operationTime" }, timezone: "UTC" } }
},
totalWeight: { $sum: "$weight" }
}
},
{
$project: {
_id: 0,
year: "$_id.year",
month: "$_id.month",
totalWeight: 1
}
},
{
$sort: { year: 1, month: 1 }
}
]);
}
export async function selectChanLiangOfzuoWu() {
return await caishouModel.aggregate([
{
$group: {
_id:"$plantType",
totalWeight: { $sum: "$weight" }
}
}]);
}
/**
* 删除
*/
import { mysqlModelMap} from "../db/sqlModelBind";
export async function delData(tableEnumValue:string, param) {
await mysqlModelMap[tableEnumValue].destroy({where:param});
}
\ No newline at end of file
/**
* 企业经营数据 数据层
*
*/
import {Schema} from 'mongoose';
import { baseDB } from '../db/dbInit';
import { PLOTTYPE } from '../config/enum';
const dikuaiSchema = new Schema({
dId: {type:String, index:true},//
size: Number, //地块大小
useSize: Number, //使用大小
nullSize:Number,//可使用大小
code:String, //编号
name:String, //地块名称 同code
area:String,//地块区域
plotType:Number, //地块类型 【枚举】 PLOTTYPE
purpose:Number,//用途 【枚举】 PURPOSE
createUser:String, //创建人
ct:Number,//创建时间
});
var dikuaiModel;
export function initModel(){
dikuaiModel = baseDB.model('dikuai', dikuaiSchema);
dikuaiModel.selectOnceData = async function (paramater:object) {
let selectInfo = await dikuaiModel.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 addData(param) {
return await dikuaiModel.create(param);
}
export async function addManyData(param) {
return await dikuaiModel.insertMany(param);
}
export async function selectOne(param) {
return await dikuaiModel.selectOnceData(param);
}
export async function selectToParam(param) {
return await dikuaiModel.find(param);
}
export async function diKuaiSizeCount() {
let list = await dikuaiModel.aggregate([
{
"$group":{
_id:null,
totalSize:{"$sum":"$size"},
totalUseSize:{"$sum":"$useSize"}
}
}
]);
return list[0];
}
export async function diKuaiSizeCountByParam(param) {
let list = await dikuaiModel.aggregate([
{ $match: param },
{
"$group":{
_id:null,
totalSize:{"$sum":"$size"},
totalUseSize:{"$sum":"$useSize"}
}
}
]);
return list[0];
}
/**
* 企业经营数据 数据层
*
*/
import {Schema} from 'mongoose';
import { baseDB } from '../db/dbInit';
const nongshiSchema = new Schema({
nsId: {type:String, index:true},//,
nsType:Number, //农事类型
dIdList:{type:[String], default:[]}, //地块id
operationTime:Number,//操作时间
ct:Number,//创建时间
});
var nongshiModel;
export function initModel(){
nongshiModel = baseDB.model('nongshi', nongshiSchema);
nongshiModel.selectOnceData = async function (paramater:object) {
let selectInfo = await nongshiModel.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 addData(param) {
return await nongshiModel.create(param);
}
export async function addManyData(param) {
return await nongshiModel.insertMany(param);
}
export async function findOne(param) {
return await nongshiModel.selectOnceData(param);
}
export async function selectToParam(param) {
return await nongshiModel.find(param);
}
export async function selectCountByParam(param) {
return await nongshiModel.find(param).countDocuments();
}
export async function statisNongShiType() {
let list = await nongshiModel.aggregate([
{
$group: {
_id: {
year: { $year: { date: { $toDate: "$operationTime" }, timezone: "UTC" } },
month: { $month: { date: { $toDate: "$operationTime" }, timezone: "UTC" } }
},
count: { $sum: 1 }
}
},
{
$project: {
_id: 0,
year: "$_id.year",
month: "$_id.month",
count: 1
}
},
{
$sort: { year: 1, month: 1 }
}
]);
return list;
}
\ No newline at end of file
/**
* 企业经营数据 数据层
*
*/
import {Schema} from 'mongoose';
import { baseDB } from '../db/dbInit';
const nongziSchema = new Schema({
nzId: {type:String, index:true},//,
nzType:Number, //农资类型
dIdList:{type:[String], default:[]}, //地块id
plantType:Number, //作物名称【枚举】 PLANTTYPE
count:Number,//用量
useTime:Number,//使用时间
ct:Number,//创建时间
});
var nongziModel;
export function initModel(){
nongziModel = baseDB.model('nongzi', nongziSchema);
nongziModel.selectOnceData = async function (paramater:object) {
let selectInfo = await nongziModel.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 addData(param) {
return await nongziModel.create(param);
}
export async function addManyData(param) {
return await nongziModel.insertMany(param);
}
export async function findOne(param) {
return await nongziModel.selectOnceData(param);
}
export async function selectToParam(param) {
return await nongziModel.find(param);
}
export async function statisNongZiType() {
let list = await nongziModel.aggregate([
{
"$group":{
_id:"$nzType",
count:{"$sum":1}
}
}
]);
return list;
}
export async function statisNongZiTypeCountByTime() {
let list = await nongziModel.aggregate([
{
$group: {
_id: {
year: { $year: { date: { $toDate: "$useTime" }, timezone: "UTC" } },
month: { $month: { date: { $toDate: "$useTime" }, timezone: "UTC" } },
nzType:"$nzType"
},
totalWeight: { $sum: "$count" }
}
},
{
$project: {
_id: 0,
year: "$_id.year",
month: "$_id.month",
nzType:"$_id.nzType",
totalWeight: 1
}
},
{
$sort: { year: 1, month: 1 }
}
]);
return list;
}
\ No newline at end of file
import { Op, Sequelize } from "sequelize";
import { ERRORENUM } from "../config/errorEnum";
import { mysqlModelMap} from "../db/sqlModelBind";
import { BizError } from "../util/bizError";
/**
* where条件查询参数
* @param param
* %like%:模糊查询 {列名: {"%like%": }}
* %gt%:大于 {列名: {"%gt%": }}
* %gte%:大于等于 {列名: {"%gte%": }}
* %lt%:小于 {列名: {"%lt%": }}
* %lte%:小于等于 {列名: {"%lte%": }}
* %between%:查询范围内数据 {列名: {"%between%": ["开始参数", "结束参数"]}} ---BETWEEN 开始参数 AND 结束参数 列>开始参数 and 列<结束参数
* %notBetween%:查询不在范围内数据 {列名: {"%notBetween%": ["开始参数", "结束参数"]}} ---NOT BETWEEN 开始参数 AND 结束参数
* %orderDesc%: order by DESC {"%orderDesc%": "列名"}
* %limit%: {"%limit%": 数量}
* @param column
* @returns
*/
function analysisParamToWhere(param, column) {
let where = {};
let order = [];
let group = "";
let limit = 0;
for (let key in param) {
if (typeof param[key] == "object") {
where[key] = {};
for (let whereKey in param[key]){
switch(whereKey) {
case "%like%":
where[key][Op.like] = `%${param[key]["%like%"]}%`;
break;
case "%gt%":
where[key][Op.gt] = param[key]["%gt%"];
break;
case "%gte%":
where[key][Op.gte] = param[key]["%gte%"];
break;
case "%lt%":
where[key][Op.lt] = param[key]["%lt%"];
break;
case "%lte%":
where[key][Op.lte] = param[key]["%lte%"];
break;
case "%between%":
where[key][Op.between] = param[key]["%between%"];
break;
case "%notBetween%":
where[key][Op.notBetween] = param[key]["%notBetween%"];
break;
case "%in%":
where[key][Op.in] = param[key]["%in%"];
break;
case "%notIn%":
where[key][Op.notIn] = param[key]["%notIn%"];
break;
case "%ne%":
where[key][Op.ne] = param[key]["%ne%"];
break;
}
}
}else {
switch (key) {
case "%orderDesc%":
order = [[Sequelize.col(param[key]), "DESC"]];
break;
case "%orderAsc%":
order = [[Sequelize.col(param[key]), "ASC"]];
break;
case "%limit%":
limit = param[key];
break;
case "%group%":
group = param[key];
break;
default: where[key] = param[key];
}
}
}
let selectParam:any = {where};
if (column && column.length) selectParam.attributes = column;
if (order && order.length) selectParam.order = order;
if (limit) selectParam.limit = limit;
if (group) selectParam.group = group;
return selectParam;
}
/**
* 查询单个数据
* @param tableEnumValue
* @param param
* @param column
* @returns
*/
export async function selectOne(tableEnumValue, param, column) {
let selectParam = analysisParamToWhere(param, column);
return await mysqlModelMap[tableEnumValue].findOne(selectParam);
}
/**
* 查询多个数据
* @param tableEnumValue
* @param param
* @param column
* @returns
*/
export async function selectToParam(tableEnumValue, param, column) {
let selectParam = analysisParamToWhere(param, column);
return await mysqlModelMap[tableEnumValue].findAll(selectParam);
}
/**
* 分页查询
* @param tableEnumValue
* @param param
* @param column
* @param pageNumber
* @param pageSize
* @returns
*/
export async function selectToPage(tableEnumValue, param, column, pageNumber:number, pageSize:number) {
let selectParam:any = analysisParamToWhere(param, column);
selectParam.limit = pageSize || 10;
selectParam.offset = (pageNumber-1)*10;
return await mysqlModelMap[tableEnumValue].findAll(selectParam);
}
/**
* 查询数量
* @param tableModel
* @param param
* @returns
*/
export async function selectCountByParam(tableEnumValue, param) {
let selectParam:any = analysisParamToWhere(param, []);
return await mysqlModelMap[tableEnumValue].count(selectParam);
}
/**
* 多表联查 列表
* @param tableEnumValue
* @param includeConf {"表名":["",""] }
* @param param
* @param column
* @returns
*/
export async function selectManyTableToParam(tableEnumValue, includeConf, param, column) {
let include = [];
for (let tableName in includeConf) {
if (!mysqlModelMap[tableName]) throw new BizError(ERRORENUM.不存在表, `尝试进行多表联查,但是不存在${tableName}`);
let {where, column} = includeConf[tableName];
let includeInfomation = analysisParamToWhere(where, column);
includeInfomation.model = mysqlModelMap[tableName];
include.push(includeInfomation);
}
let selectParam:any = analysisParamToWhere(param, column);
selectParam.include = include;
return await mysqlModelMap[tableEnumValue].findAll(selectParam);
}
/**
* 多表联查 分页
* @param tableEnumValue
* @param includeConf {"表名":["",""] }
* @param param
* @param column
* @returns
*/
export async function selectManyTableToParamToPage(tableEnumValue, includeConf, param, column, pageNumber:number, pageSize:number) {
let include = [];
for (let tableName in includeConf) {
if (!mysqlModelMap[tableName]) throw new BizError(ERRORENUM.不存在表, `尝试进行多表联查,但是不存在${tableName}`);
let {where, column, required} = includeConf[tableName];
let includeInfomation = analysisParamToWhere(where, column);
includeInfomation.model = mysqlModelMap[tableName];
// if (required != undefined) {
// includeInfomation.required = required;
// }
include.push(includeInfomation);
}
let selectParam:any = analysisParamToWhere(param, column);
selectParam.include = include;
selectParam.limit = pageSize || 10;
selectParam.offset = (pageNumber-1)*10;
return await mysqlModelMap[tableEnumValue].findAll(selectParam);
}
/**
* 多表查询单个
* @param tableModel
* @param includeConf
* @param param
* @param column
* @returns
*/
export async function selectOnceDataForManyTableToParam(tableEnumValue, includeConf, param, column) {
let include = [];
for (let tableName in includeConf) {
if (!mysqlModelMap[tableName]) throw new BizError(ERRORENUM.不存在表, `尝试进行多表联查,但是不存在${tableName}`);
let {where, column} = includeConf[tableName];
let includeInfomation = analysisParamToWhere(where, column);
includeInfomation.model = mysqlModelMap[tableName];
include.push(includeInfomation);
}
let selectParam:any = analysisParamToWhere(param, column);
selectParam.include = include;
return await mysqlModelMap[tableEnumValue].findOne(selectParam);
}
import { Op, Sequelize } from "sequelize";
import { mysqlModelMap} from "../db/sqlModelBind";
/**
* where条件查询参数
* @param param
* %like%:模糊查询 {列名: {"%like%": }}
* %gt%:大于 {列名: {"%gt%": }}
* %gte%:大于等于 {列名: {"%gte%": }}
* %lt%:小于 {列名: {"%lt%": }}
* %lte%:小于等于 {列名: {"%lte%": }}
* %between%:查询范围内数据 {列名: {"%between%": ["开始参数", "结束参数"]}} ---BETWEEN 开始参数 AND 结束参数
* %notBetween%:查询不在范围内数据 {列名: {"%notBetween%": ["开始参数", "结束参数"]}} ---NOT BETWEEN 开始参数 AND 结束参数
* %orderDesc%: order by DESC {"%orderDesc%": "列名"}
* %limit%: {"%limit%": 数量}
* @returns
*/
function analysisParamToWhere(param) {
let where = {};
let order = [];
let limit = 0;
for (let key in param) {
if (typeof param[key] == "object") {
where[key] = {};
for (let whereKey in param[key]){
switch(whereKey) {
case "%like%":
where[key][Op.like] = `%${param[key]["%like%"]}%`;
break;
case "%gt%":
where[key][Op.gt] = param[key]["%gt%"];
break;
case "%gte%":
where[key][Op.gte] = param[key]["%gte%"];
break;
case "%lt%":
where[key][Op.lt] = param[key]["%lt%"];
break;
case "%lte%":
where[key][Op.lte] = param[key]["%lte%"];
break;
case "%between%":
where[key][Op.between] = param[key]["%between%"];
break;
case "%notBetween%":
where[key][Op.notBetween] = param[key]["%notBetween%"];
break;
case "%in%":
where[key][Op.in] = param[key]["%in%"];
break;
case "%notIn%":
where[key][Op.notIn] = param[key]["%notIn%"];
break;
}
}
}else {
switch (key) {
case "%orderDesc%":
order = [[Sequelize.col(param[key]), "DESC"]];
break;
case "%orderAsc%":
order = [[Sequelize.col(param[key]), "ASC"]];
break;
case "%limit%":
limit = param[key];
break;
default: where[key] = param[key];
}
}
}
let selectParam:any = {where};
if (order && order.length) selectParam.order = order;
if (limit) selectParam.limit = limit;
return selectParam;
}
export async function updateManyData(tableEnumValue, param:object, data:object) {
let where = analysisParamToWhere(param);
await mysqlModelMap[tableEnumValue].update(data, where);
}
\ No newline at end of file
/**
* 用户表
*/
import { Schema } from 'mongoose';
import { baseDB } from '../db/dbInit';
const userSchema = new Schema({
name:String,//名称
loginId: {type:String, index:true},//登录账号
userId:{type:String, index:true},
pwd:String,//密码
phone:{type:String, index:true},//登录手机号
token:String,
tokenMs:Number,
position:String,//职务
});
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(userList) {
await userModel.insertMany(userList);
}
\ No newline at end of file
/**
* 企业经营数据 数据层
*
*/
import {Schema} from 'mongoose';
import { baseDB } from '../db/dbInit';
const xiaoshouSchema = new Schema({
xsId: {type:String, index:true},//,
plantType:Number, //种植种类【枚举】 PLANTTYPE
quXiang:Number,//销售去向
weight:Number,//重量
operationTime:Number,//销售时间
ct:Number,//创建时间
createUser:String,//创建人
});
var xiaoshouModel;
export function initModel(){
xiaoshouModel = baseDB.model('xiaoshou', xiaoshouSchema);
xiaoshouModel.selectOnceData = async function (paramater:object) {
let selectInfo = await xiaoshouModel.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 addData(param) {
return await xiaoshouModel.create(param);
}
export async function addManyData(param) {
return await xiaoshouModel.insertMany(param);
}
export async function selectOne(param) {
return await xiaoshouModel.selectOnceData(param);
}
export async function selectToParam(param) {
return await xiaoshouModel.find(param);
}
export async function selectXiaoShouOfMonth() {
return await xiaoshouModel.aggregate([
{
$group: {
_id: {
year: { $year: { date: { $toDate: "$operationTime" }, timezone: "UTC" } },
month: { $month: { date: { $toDate: "$operationTime" }, timezone: "UTC" } }
},
totalWeight: { $sum: "$weight" }
}
},
{
$project: {
_id: 0,
year: "$_id.year",
month: "$_id.month",
totalWeight: 1
}
},
{
$sort: { year: 1, month: 1 }
}
]);
}
export async function selectXiaoShouOfzuoWu() {
return await xiaoshouModel.aggregate([
{
$group: {
_id:"$plantType",
totalWeight: { $sum: "$weight" }
}
}]);
}
/**
*
*
*/
import {Schema} from 'mongoose';
import { baseDB } from '../db/dbInit';
const zhongzhiSchema = new Schema({
zId:{type:String, index:true},//
size:Number, //种植面积
plantType:Number, //种植种类【枚举】 PLANTTYPE
dId:String, //地块id
plantTime:Number, //种植时间
uId:String,//用户id
isEnd:{type:Number, default:0},//是否结束 0=否 1=是
ct:Number,
csId:String,//采收id
});
var zhongzhiModel;
export function initModel(){
zhongzhiModel = baseDB.model('zhongzhi', zhongzhiSchema);
zhongzhiModel.selectOnceData = async function (paramater:object) {
let selectInfo = await zhongzhiModel.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 addData(param) {
return await zhongzhiModel.create(param);
}
export async function addManyData(param) {
return await zhongzhiModel.insertMany(param);
}
export async function selectOne(param) {
return await zhongzhiModel.selectOnceData(param);
}
export async function selectToParam(param) {
return await zhongzhiModel.find(param);
}
export async function updateManyToParam(param, updateInfo) {
return await zhongzhiModel.updateMany(param, {"$set":updateInfo});
}
export async function pingZhongCount() {
let list = await zhongzhiModel.aggregate([
{ $match: { isEnd: 0 } },
{
"$group":{
_id:"$plantType",
count:{"$sum":1}
}
}
]);
return list;
}
export async function zhongZhiTongJiCount() {
let list = await zhongzhiModel.aggregate([
{ $match: { isEnd: 0 } },
{
"$group":{
_id:"$plantType",
sizeCount:{"$sum":"$size"}
}
}
]);
return list;
}
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 { systemConfig } from "../config/serverConfig";
//导入sequelize模块
const Sequelize = require('sequelize');
var mysqlDB;
export async function initMysqlDB() {
mysqlDB = new Sequelize(systemConfig.mysqldb.dataBase,systemConfig.mysqldb.user,systemConfig.mysqldb.pwd,{
host:systemConfig.mysqldb.host,
port:systemConfig.mysqldb.port,
dialect:'mysql', //数据库类型
pool:{ //数据库连接池
max:20, //最大连接对象的个数
min:5, //最小连接对象的个数
idle:1000 //最长等待时间,单位为毫秒
},
timezone: '+08:00', //东八时区
dialectOptions: {
dateStrings: true,
typeCast: true
},
});
}
export { mysqlDB };
\ No newline at end of file
/**
* mysql 数据层
*/
import { TablesConfig } from "../config/tableConfig";
import { mysqlDB } from "../db/mysqlInit";
let mysqlModelMap = {};
export async function initMysqlModel() {
/**初始化表 */
for (let i =0; i < TablesConfig.length; i++) {
let { tableName, schema } = TablesConfig[i];
let schemaConf = {
freezeTableName:true, //true表示使用给定的表名,false表示模型名后加s作为表名
timestamps:false //true表示给模型加上时间戳属性(createAt updateAt),false表示不带时间戳属性
};
let model = mysqlDB.define( tableName, schema, schemaConf);
mysqlModelMap[tableName] = await model.sync({}).then();
}
/**初始化表关联 */
for (let i =0; i < TablesConfig.length; i++) {
let { tableName, association } = TablesConfig[i];
association.forEach( (item:any) => {
if (item) {
let {type, check, foreignKey} = item;
if (type == "hasOne") {
mysqlModelMap[check].hasOne(mysqlModelMap[tableName]);
} else if (type == "hasMany") {
mysqlModelMap[tableName].hasMany(mysqlModelMap[check], {foreignKey});
}
mysqlModelMap[check].belongsTo(mysqlModelMap[tableName], {foreignKey});
console.log("---->", mysqlModelMap[tableName].getTableName());
console.log("====>", mysqlModelMap[check].getTableName());
}
});
}
}
export { mysqlModelMap };
\ No newline at end of file
import * as caishouModel from "../data/caishou";
import * as dikuaiModel from "../data/dikuai";
import * as nongshiModel from "../data/nongshi";
import * as nongziModel from "../data/nongzi";
import * as usersModel from "../data/users";
import * as xiaoshouModel from "../data/xiaoshou";
import * as zhongzhiModel from "../data/zhongzhi";
export async function initTable() {
caishouModel.initModel();
dikuaiModel.initModel();
nongshiModel.initModel();
nongziModel.initModel();
usersModel.initModel();
xiaoshouModel.initModel();
zhongzhiModel.initModel();
}
\ No newline at end of file
import { initConfig, systemConfig } from "./config/serverConfig";
import { httpServer } from "./net/http_server";
import { initDB } from "./db/dbInit";
import { dataInit } from "./biz/dataInt";
import { getDataOut } from "./biz/dataOut";
async function lanuch() {
/**初始化配置解析 */
await initConfig();
/**初始化数据库 */
await initDB();
/**创建http服务 */
httpServer.createServer(systemConfig.port);
console.log('This indicates that the server is started successfully.');
// await dataInit();
}
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 {
console.log(req.ip, err.message);
res.send({success:false, msg:err.message, code:500});
// res.success({success:false, msg:err.message, code:500});
next();
}
}
}
\ No newline at end of file
import { ERRORENUM } from "../config/errorEnum";
import { findUserInfoByUserId } from "../data/users";
import { BizError } from "../util/bizError";
/**
* 管委会小程序中间件
* @param req
* @param res
* @param next
* @returns
*/
export async function checkUserToken(req, res, next) {
console.log(req.originalUrl, JSON.stringify(req.body));
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,
position:userInfo.position
}
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("./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 enumConfig from '../config/enum';
const config = {
"/zj/xcx/public/plottype":enumConfig.PLOTTYPE,//地块类型
"/zj/xcx/public/purpose":enumConfig.PURPOSE,//用途
"/zj/xcx/public/planttype":enumConfig.PLANTTYPE,//种植种类
"/zj/xcx/public/arearange":enumConfig.AREARANGE,//面积范围
"/zj/xcx/public/nongzitype":enumConfig.NONGZITYPE,//农资类型
"/zj/xcx/public/nongshitype":enumConfig.NONGSHITYPE,//农事类型
"/zj/xcx/public/zhongyangtype":enumConfig.ZHONGYANGTYPE,//种养类型
"/zj/xcx/public/zhongyangtype/shuichan":enumConfig.SHUICHAN,//水产
"/zj/xcx/public/zhongyangtype/huahui":enumConfig.HUAHUITYPE,//花卉
"/zj/xcx/public/zhongyangtype/liangshi":enumConfig.LIANGSHI,//粮食
"/zj/xcx/public/zhongyangtype/shucai":enumConfig.SHUCAI,//蔬菜
"/zj/xcx/public/xiaoshouquxiang":enumConfig.XIAOSHOUQUXIANG,//销售去向
}
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 asyncHandler from 'express-async-handler'
import { eccReqParamater } from '../util/verificationParam';
import * as diKuaiBiz from '../biz/diKuai';
import * as userBiz from '../biz/user';
import * as zhongYangBiz from '../biz/zhongYang';
import * as nongziBiz from '../biz/nongzi';
import * as nongShiBiz from '../biz/nongShi';
import * as publicRouters from './public';
import * as caiShouBiz from '../biz/caiShou';
import * as xiaoShouBiz from '../biz/xiaoShou';
import { checkUserToken } from '../middleware/user';
import * as dataOutBiz from '../biz/dataOut';
export function setRouter(httpServer){
/**地块 */
httpServer.post('/zjnt/xcx/dikuai/add', checkUserToken, asyncHandler(dikuai_add));//添加
httpServer.post('/zjnt/xcx/dikuai/info', checkUserToken, asyncHandler(dikuai_info));//回显
httpServer.post('/zjnt/xcx/dikuai/list', checkUserToken, asyncHandler(dikuai_list));//列表
httpServer.post('/zjnt/xcx/dikuai/all', checkUserToken, asyncHandler(dikuai_all));//全部地块列表
httpServer.post('/zjnt/xcx/dikuai/update', checkUserToken, asyncHandler(dikuai_update));//更新
httpServer.post('/zjnt/xcx/dikuai/xuanze/list', checkUserToken, asyncHandler(xuanze_dikuai_list));//可用
httpServer.post('/zjnt/xcx/dikuai/kecaishou/list', checkUserToken, asyncHandler(xuanze_kecaishou_list));//可采收
/**种养 */
httpServer.post('/zjnt/xcx/zhongyang/dangqian/list', checkUserToken, asyncHandler(zhongyang_dangqian_list));//当前列表
httpServer.post('/zjnt/xcx/zhongyang/jilu/list', checkUserToken, asyncHandler(zhongyang_jilu_list));//种养记录
httpServer.post('/zjnt/xcx/zhongyang/add', checkUserToken, asyncHandler(zhongyang_add));//添加种养
/**农资 */
httpServer.post('/zjnt/xcx/nongzi/list', checkUserToken, asyncHandler(nongzi_list));
httpServer.post('/zjnt/xcx/nongzi/add', checkUserToken, asyncHandler(nongzi_add));
/**农事 */
httpServer.post('/zjnt/xcx/nongshi/list', checkUserToken, asyncHandler(nongshi_list));
httpServer.post('/zjnt/xcx/nongshi/add', checkUserToken, asyncHandler(nongshi_add));
/**采收 */
httpServer.post('/zjnt/xcx/caishou/list', checkUserToken, asyncHandler(caishou_list));
httpServer.post('/zjnt/xcx/caishou/add', checkUserToken, asyncHandler(caishou_add));
/**销售 */
httpServer.post('/zjnt/xcx/xiaoshou/list', checkUserToken, asyncHandler(xiaoshou_list));
httpServer.post('/zjnt/xcx/xiaoshou/add', checkUserToken, asyncHandler(xiaoshou_add));
/**首页 */
httpServer.post('/zjnt/xcx/home/top', checkUserToken, asyncHandler(home_top));
httpServer.post('/zjnt/xcx/home/chonghai', checkUserToken, asyncHandler(home_chonghai));
httpServer.post('/zjnt/xcx/home/statis/top', checkUserToken, asyncHandler(home_statis_top));//首页统计顶部
httpServer.post('/zjnt/xcx/home/statis/chanliang', checkUserToken, asyncHandler(home_statis_chanliang));//产量
httpServer.post('/zjnt/xcx/home/statis/xiaoshou', checkUserToken, asyncHandler(home_statis_xiaoshou));//销售
httpServer.post('/zjnt/xcx/home/statis/bottom', checkUserToken, asyncHandler(home_statis_bottom));//底部
/**登录登出 */
httpServer.post('/zjnt/xcx/user/login', asyncHandler(user_login));//登录
httpServer.post('/zjnt/xcx/user/logout', checkUserToken, asyncHandler(user_logout));//登出
httpServer.post('/zjnt/xcx/dataout/zzzmj', asyncHandler(data_out));//登录
/**公用 */
publicRouters.setRouter(httpServer);
}
async function data_out(req, res) {
let result = await dataOutBiz.getDataOut();
res.success(result);
}
/**================================================================首页 */
async function home_statis_chanliang(req, res) {
let reqConf = {type:'Number'};
let { type } = eccReqParamater(reqConf, req.body);
let result = await userBiz.homePageStatisChanLiang(type);
res.success(result);
}
async function home_statis_xiaoshou(req, res) {
let result = await userBiz.homePageStatisXiaoShou();
res.success(result);
}
async function home_top(req, res) {
const UserInfo = req.userInfo;
let result = await userBiz.homePageTop(UserInfo);
res.success(result);
}
async function home_chonghai(req, res) {
const UserInfo = req.userInfo;
let result = await userBiz.homePageChongHai(UserInfo);
res.success(result);
}
async function home_statis_top(req, res) {
const UserInfo = req.userInfo;
let result = await userBiz.homePageStatisTop(UserInfo);
res.success(result);
}
async function home_statis_bottom(req, res) {
const UserInfo = req.userInfo;
let result = await userBiz.homePageStatisBottom(UserInfo);
res.success(result);
}
/**================================================================登录登出 */
async function user_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);
}
async function user_logout(req, res) {
let userInfo = req.userInfo;
let result = await userBiz.userLogout(userInfo);
res.success(result);
}
/**================================================================地块选择列表 */
async function xuanze_kecaishou_list(req, res) {
const UserInfo = req.userInfo;
let reqConf = { zhongYangType:'Number'};
let { zhongYangType } = eccReqParamater(reqConf, req.body);
let result = await diKuaiBiz.keCaiShouList(zhongYangType);
res.success(result);
}
async function xuanze_dikuai_list(req, res) {
const UserInfo = req.userInfo;
let reqConf = { zhongYangType:'Number'};
let { zhongYangType } = eccReqParamater(reqConf, req.body, ["zhongYangType"]);
let result = await diKuaiBiz.keXuanDiKuaiList(zhongYangType);
res.success(result);
}
/**================================================================销售 */
async function xiaoshou_list(req, res) {
let reqConf = {selectStr:"String", plantType:'Number', quXiang:'Number', operationTime:"Number" };
const NotMustHaveKeys = ["selectStr", "dId", "nzType", "operationTime"];
let {selectStr, quXiang, plantType, operationTime } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await xiaoShouBiz.xiaoShouList(selectStr, quXiang, plantType, operationTime);
res.success(result);
}
async function xiaoshou_add(req, res) {
let reqConf = {param: 'Object'};
const NotMustHaveKeys = [];
let { param } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await xiaoShouBiz.addXiaoShou(UserInfo, param);
res.success(result);
}
/**================================================================采收 */
async function caishou_list(req, res) {
let reqConf = {selectStr:"String", dId: 'String', plantType:'Number', zhongYangType:"Number", operationTime:"Number" };
const NotMustHaveKeys = ["selectStr", "dId", "nzType", "operationTime", "plantType"];
let {selectStr, dId, plantType, operationTime, zhongYangType } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await caiShouBiz.caiShouList(zhongYangType, selectStr, dId, plantType, operationTime);
res.success(result);
}
async function caishou_add(req, res) {
let reqConf = {param: 'Object'};
const NotMustHaveKeys = [];
let { param } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await caiShouBiz.addCaiShou(UserInfo, param);
res.success(result);
}
/**================================================================农事 */
async function nongshi_list(req, res) {
let reqConf = {selectStr:"String", dId: 'String', nsType:'Number', operationTime:"Number" };
const NotMustHaveKeys = ["selectStr", "dId", "nzType", "operationTime"];
let {selectStr, dId, nsType, operationTime } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await nongShiBiz.nongShiList(selectStr, dId, nsType, operationTime);
res.success(result);
}
async function nongshi_add(req, res) {
let reqConf = {param: 'Object'};
const NotMustHaveKeys = [];
let { param } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await nongShiBiz.addNongShi(UserInfo, param);
res.success(result);
}
/**================================================================农资 */
async function nongzi_list(req, res) {
let reqConf = {selectStr:"String", dId: 'String', nzType:'Number', useTime:"Number" };
const NotMustHaveKeys = ["selectStr", "dId", "nzType", "useTime"];
let {selectStr, dId, nzType, useTime } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await nongziBiz.nongZiList(selectStr, dId, nzType, useTime);
res.success(result);
}
async function nongzi_add(req, res) {
let reqConf = {param: 'Object'};
const NotMustHaveKeys = [];
let { param } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await nongziBiz.addNongZi(UserInfo, param);
res.success(result);
}
/**================================================================种养 */
async function zhongyang_dangqian_list(req, res) {
let reqConf = {selectStr:"String", plantType: 'Number'};
const NotMustHaveKeys = ["selectStr"];
let { plantType, selectStr } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await zhongYangBiz.zhongYangDangQianList(plantType, selectStr);
res.success(result);
}
async function zhongyang_add(req, res) {
let reqConf = {param: 'Object'};
const NotMustHaveKeys = [];
let { param } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await zhongYangBiz.addZhongYang(UserInfo, param);
res.success(result);
}
async function zhongyang_jilu_list(req, res) {
let reqConf = {selectStr:"String", plantType:"Number", plantTime:"Number", dId:"String", zhongYangType:"Number"};
const NotMustHaveKeys = ["selectStr", "plantType", "plantTime", "dId" ];
let { selectStr, plantType, plantTime, dId, zhongYangType } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await zhongYangBiz.zhongYangJiLu(zhongYangType, selectStr, plantType, plantTime, dId);
res.success(result);
}
/**================================================================地块 */
async function dikuai_add(req, res) {
let reqConf = {param: 'Object', plotType:"Number" };
const NotMustHaveKeys = [];
let { plotType, param } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await diKuaiBiz.addDiKuai(UserInfo, plotType, param);
res.success(result);
}
async function dikuai_info(req, res) {
let reqConf = {dId: 'String' };
const NotMustHaveKeys = [];
let { dId } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await diKuaiBiz.diKuaiInfo(dId);
res.success(result);
}
async function dikuai_list(req, res) {
let reqConf = {plotType:"Number", selectStr: 'String', code:"String", purpose:'Number', area:"Number" };
const NotMustHaveKeys = ["selectStr", "code", "purpose", "area"];
let { plotType, selectStr, code, purpose, area} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await diKuaiBiz.diKuaiList(plotType, selectStr, code, purpose, area);
res.success(result);
}
async function dikuai_all(req, res) {
let reqConf = {plotType:"Number" };
const NotMustHaveKeys = [];
let { plotType} = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await diKuaiBiz.allDiKuaiList(plotType);
res.success(result);
}
async function dikuai_update(req, res) {
let reqConf = {param: 'Object', dId:"String", plotType:"Number" };
const NotMustHaveKeys = [];
let { plotType, dId, param } = eccReqParamater(reqConf, req.body, NotMustHaveKeys);
const UserInfo = req.userInfo;
let result = await diKuaiBiz.updateDiKuai(UserInfo, plotType, dId, param);
res.success(result);
}
\ 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)}`);
}
export function randomId(tableName:string) {
let randomStr = `${tableName}_${new Date().valueOf()}_${Math.ceil(Math.random()*100000)}`;
return md5(randomStr);
}
export function getMySqlMs(time?) {
time = time || new Date().valueOf();
return moment(time).format("YYYY-MM-DD HH:mm:ss");
}
export function successResult() {
return {isSuccess:true}
}
/**
* 孵化器 任务相关工具
* 只允许被孵化器任务相关逻辑使用
*
*/
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 (r && r.statusCode != 200) return reject(new Error('httpError:'+r.statusCode));
resolve(body);
});
})
}
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"
]
}
\ 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