cgserver 9.2.6 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/lib/Framework/AI/BehaviorAI.js +6 -6
- package/dist/lib/Framework/AI/TriggerMgr.js +7 -8
- package/dist/lib/Framework/Config/FrameworkConfig.js +2 -2
- package/dist/lib/Framework/Config/IServerConfig.js +3 -3
- package/dist/lib/Framework/Core/ByteTool.js +2 -2
- package/dist/lib/Framework/Core/Core.js +4 -4
- package/dist/lib/Framework/Core/Timer.js +5 -5
- package/dist/lib/Framework/Database/Decorator/DBCache.js +5 -6
- package/dist/lib/Framework/Database/MSSqlManager.js +4 -5
- package/dist/lib/Framework/Database/Mongo/MongoBaseService.js +128 -0
- package/dist/lib/Framework/Database/Mongo/MongoManager.js +509 -0
- package/dist/lib/Framework/Database/Mongo/MongoServiceManager.js +26 -0
- package/dist/lib/Framework/Database/MysqlBaseService.js +24 -26
- package/dist/lib/Framework/Database/MysqlManager.js +7 -10
- package/dist/lib/Framework/Database/RedisManager.js +5 -7
- package/dist/lib/Framework/Decorator/SyncCall.js +3 -3
- package/dist/lib/Framework/Decorator/SyncCallServer.js +11 -12
- package/dist/lib/Framework/Logic/CacheTool.js +2 -3
- package/dist/lib/Framework/Logic/EventTool.js +2 -2
- package/dist/lib/Framework/Logic/HttpTool.js +11 -12
- package/dist/lib/Framework/Logic/Log.js +2 -3
- package/dist/lib/Framework/Logic/SyncQueueTool.js +2 -2
- package/dist/lib/Framework/Service/MongoAccountService.js +17 -19
- package/dist/lib/Framework/Service/MongoCacheService.js +7 -9
- package/dist/lib/Framework/Service/MongoUserService.js +10 -10
- package/dist/lib/Framework/Service/MysqlAccountService.js +4 -6
- package/dist/lib/Framework/SocketServer/IClientWebSocket.js +4 -4
- package/dist/lib/Framework/SocketServer/IRpcClientWebSocket.js +6 -7
- package/dist/lib/Framework/SocketServer/IRpcServerWebSocket.js +6 -7
- package/dist/lib/Framework/SocketServer/IServerWebSocket.js +3 -3
- package/dist/lib/Framework/SocketServer/ISocketServer.js +21 -23
- package/dist/lib/Framework/SocketServer/IWebSocket.js +12 -14
- package/dist/lib/Framework/SocketServer/ProtoFilter/GoogleProtoFilter.js +4 -4
- package/dist/lib/Framework/SocketServer/ProtoFilter/JsonProtoFilter.js +2 -2
- package/dist/lib/Framework/SocketServer/ProtoFilter/ProtoFactory.js +2 -3
- package/dist/lib/Framework/ThirdParty/AlipayTool.js +19 -20
- package/dist/lib/Framework/ThirdParty/Alisms.js +10 -12
- package/dist/lib/Framework/ThirdParty/AppleTool.js +16 -18
- package/dist/lib/Framework/ThirdParty/CgMq.js +3 -3
- package/dist/lib/Framework/ThirdParty/EmailTool.js +12 -14
- package/dist/lib/Framework/ThirdParty/QQTool.js +19 -23
- package/dist/lib/Framework/ThirdParty/QiniuTool.js +9 -11
- package/dist/lib/Framework/ThirdParty/Rpc.js +2 -2
- package/dist/lib/Framework/ThirdParty/WechatTool.js +66 -16
- package/dist/lib/Framework/WebServer/Controller/MongoBaseUserController.js +16 -17
- package/dist/lib/Framework/WebServer/Controller/MysqlBaseUserController.js +12 -13
- package/dist/lib/Framework/WebServer/Engine/ControllerManager.js +2 -3
- package/dist/lib/Framework/WebServer/Engine/Engine.js +20 -20
- package/dist/lib/Framework/WebServer/Engine/RazorJs.js +3 -4
- package/dist/lib/Framework/WebServer/Engine/Request.js +3 -3
- package/dist/lib/Framework/WebServer/Engine/Response.js +2 -2
- package/dist/lib/Framework/WebServer/IWebServer.js +6 -9
- package/dist/lib/Framework/cgserver.js +10 -15
- package/dist/lib/Framework/global.js +56 -0
- package/dist/lib/Framework/index.js +3 -200
- package/dist/lib/Framework/index_export_.js +161 -0
- package/dist/lib/test/test.js +2 -2
- package/dist/types/Framework/AI/TriggerMgr.d.ts +1 -3
- package/dist/types/Framework/Config/DbConfig.d.ts +1 -1
- package/dist/types/Framework/Config/IServerConfig.d.ts +0 -1
- package/dist/types/Framework/Core/ByteTool.d.ts +1 -3
- package/dist/types/Framework/Database/Decorator/DBCache.d.ts +1 -3
- package/dist/types/Framework/Database/MSSqlManager.d.ts +1 -3
- package/dist/types/Framework/Database/Mongo/MongoBaseService.d.ts +105 -0
- package/dist/types/Framework/Database/Mongo/MongoManager.d.ts +193 -0
- package/dist/types/Framework/Database/Mongo/MongoServiceManager.d.ts +13 -0
- package/dist/types/Framework/Database/MysqlManager.d.ts +1 -3
- package/dist/types/Framework/Database/RedisManager.d.ts +0 -1
- package/dist/types/Framework/Logic/CacheTool.d.ts +1 -2
- package/dist/types/Framework/Logic/EventTool.d.ts +1 -3
- package/dist/types/Framework/Logic/HttpTool.d.ts +1 -3
- package/dist/types/Framework/Logic/Log.d.ts +1 -3
- package/dist/types/Framework/Logic/SyncQueueTool.d.ts +1 -2
- package/dist/types/Framework/Service/MongoAccountService.d.ts +2 -2
- package/dist/types/Framework/Service/MongoCacheService.d.ts +3 -5
- package/dist/types/Framework/Service/MongoUserService.d.ts +4 -4
- package/dist/types/Framework/SocketServer/ProtoFilter/ProtoFactory.d.ts +1 -2
- package/dist/types/Framework/ThirdParty/AlipayTool.d.ts +1 -3
- package/dist/types/Framework/ThirdParty/Alisms.d.ts +1 -3
- package/dist/types/Framework/ThirdParty/AppleTool.d.ts +1 -2
- package/dist/types/Framework/ThirdParty/EmailTool.d.ts +1 -3
- package/dist/types/Framework/ThirdParty/QQTool.d.ts +0 -1
- package/dist/types/Framework/ThirdParty/QiniuTool.d.ts +1 -3
- package/dist/types/Framework/ThirdParty/WechatTool.d.ts +10 -1
- package/dist/types/Framework/WebServer/Engine/ControllerManager.d.ts +1 -3
- package/dist/types/Framework/cgserver.d.ts +1 -3
- package/dist/types/Framework/global.d.ts +53 -0
- package/dist/types/Framework/index.d.ts +2 -91
- package/dist/types/Framework/index_export_.d.ts +74 -0
- package/package.json +1 -1
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MongoExt = exports.MongoManager = exports.MgReturn = exports.MrResult = exports.MongoBaseModel = exports.MongoConfig = void 0;
|
|
4
|
+
const mongo = require("mongodb");
|
|
5
|
+
const _error_1 = require("../../Config/_error_");
|
|
6
|
+
const Core_1 = require("../../Core/Core");
|
|
7
|
+
const global_1 = require("../../global");
|
|
8
|
+
class MongoConfig {
|
|
9
|
+
open = false;
|
|
10
|
+
host = "127.0.0.1";
|
|
11
|
+
port = 27017;
|
|
12
|
+
options = null;
|
|
13
|
+
database = 'mongodb';
|
|
14
|
+
}
|
|
15
|
+
exports.MongoConfig = MongoConfig;
|
|
16
|
+
class MongoBaseModel {
|
|
17
|
+
_id;
|
|
18
|
+
}
|
|
19
|
+
exports.MongoBaseModel = MongoBaseModel;
|
|
20
|
+
class MrResult {
|
|
21
|
+
/**
|
|
22
|
+
* select 的数据量
|
|
23
|
+
*/
|
|
24
|
+
length = 0;
|
|
25
|
+
/**
|
|
26
|
+
* 插入数据的自增id
|
|
27
|
+
*/
|
|
28
|
+
insertId = null;
|
|
29
|
+
insertIds = null;
|
|
30
|
+
/**
|
|
31
|
+
* update 更新数据的影响条数
|
|
32
|
+
*/
|
|
33
|
+
changedRows = null;
|
|
34
|
+
/**
|
|
35
|
+
* 插入或删除数据的影响条数
|
|
36
|
+
*/
|
|
37
|
+
affectedRows = null;
|
|
38
|
+
}
|
|
39
|
+
exports.MrResult = MrResult;
|
|
40
|
+
class MgReturn {
|
|
41
|
+
error = null;
|
|
42
|
+
result = new MrResult();
|
|
43
|
+
list = [];
|
|
44
|
+
}
|
|
45
|
+
exports.MgReturn = MgReturn;
|
|
46
|
+
class MongoManager {
|
|
47
|
+
_dbs = {};
|
|
48
|
+
_defdbname = "";
|
|
49
|
+
get defdbname() {
|
|
50
|
+
return this._defdbname;
|
|
51
|
+
}
|
|
52
|
+
//初始化多个数据库,第一个open数据库为默认数据库
|
|
53
|
+
async init(cfgs) {
|
|
54
|
+
for (let i = 0; i < cfgs.length; ++i) {
|
|
55
|
+
let cfg = cfgs[i];
|
|
56
|
+
let ret = await this.addMongo(cfg);
|
|
57
|
+
if (!ret) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
async addMongo(cfg) {
|
|
64
|
+
if (this._dbs[cfg.database]) {
|
|
65
|
+
global_1.global.gLog.error("数据库配置得database不能相同!database=" + cfg.database);
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
let mongoext = new MongoExt();
|
|
69
|
+
let ret = await mongoext.init(cfg);
|
|
70
|
+
if (!ret) {
|
|
71
|
+
global_1.global.gLog.error("数据库初始化失败!cfg=" + JSON.stringify(cfg));
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
this._dbs[cfg.database] = mongoext;
|
|
75
|
+
if (!this._defdbname) {
|
|
76
|
+
this._defdbname = cfg.database;
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
async removeMongo(dbname, force = false) {
|
|
81
|
+
let mongo = this.getMongo(dbname);
|
|
82
|
+
if (!mongo) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
mongo.close(force);
|
|
86
|
+
}
|
|
87
|
+
getMongo(dbname = "") {
|
|
88
|
+
if (!dbname) {
|
|
89
|
+
dbname = this._defdbname;
|
|
90
|
+
}
|
|
91
|
+
return this._dbs[dbname];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.MongoManager = MongoManager;
|
|
95
|
+
class MongoExt {
|
|
96
|
+
_mongocfg = null;
|
|
97
|
+
_init_cbs = [];
|
|
98
|
+
_mongoDb = null;
|
|
99
|
+
get mongoDb() {
|
|
100
|
+
return this._mongoDb;
|
|
101
|
+
}
|
|
102
|
+
_mongoClient = null;
|
|
103
|
+
get mongoClient() {
|
|
104
|
+
return this._mongoClient;
|
|
105
|
+
}
|
|
106
|
+
_mongo_init_succ = false;
|
|
107
|
+
_inited = false;
|
|
108
|
+
get isValid() {
|
|
109
|
+
return this._inited;
|
|
110
|
+
}
|
|
111
|
+
constructor() {
|
|
112
|
+
}
|
|
113
|
+
async init(cfg) {
|
|
114
|
+
if (!cfg || !cfg.open) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
if (this._inited) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
if (this._mongoDb) {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
this._mongocfg = cfg;
|
|
124
|
+
this._inited = true;
|
|
125
|
+
global_1.global.gLog.info("mongo config=" + JSON.stringify(this._mongocfg));
|
|
126
|
+
this._mongoClient = new mongo.MongoClient("mongodb://" + this._mongocfg.host + ":" + this._mongocfg.port, this._mongocfg.options);
|
|
127
|
+
await Core_1.core.safeCall(this._mongoClient.connect, this._mongoClient);
|
|
128
|
+
this.onConnect();
|
|
129
|
+
this._mongoDb = this._mongoClient.db(this._mongocfg.database);
|
|
130
|
+
for (let i = 0; i < this._init_cbs.length; ++i) {
|
|
131
|
+
this._init_cbs[i]();
|
|
132
|
+
}
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
close(force = false) {
|
|
136
|
+
this._mongoClient.close(force);
|
|
137
|
+
}
|
|
138
|
+
registerInitCb(cb) {
|
|
139
|
+
this._init_cbs.push(cb);
|
|
140
|
+
}
|
|
141
|
+
onConnect() {
|
|
142
|
+
this._mongo_init_succ = true;
|
|
143
|
+
global_1.global.gLog.info("mongo has connected!");
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 获取自增长id
|
|
147
|
+
* @param key
|
|
148
|
+
* @returns 小于等于0为异常
|
|
149
|
+
*/
|
|
150
|
+
async getAutoIds(key) {
|
|
151
|
+
if (!this._mongoDb) {
|
|
152
|
+
return -1;
|
|
153
|
+
}
|
|
154
|
+
let collection = "auto_ids";
|
|
155
|
+
let col = this._mongoDb.collection(collection);
|
|
156
|
+
try {
|
|
157
|
+
let where = this._convertWhere({ _id: key });
|
|
158
|
+
let rs = await Core_1.core.safeCall(col.findOneAndUpdate, col, where, { $inc: { id: 1 } }, { upsert: true });
|
|
159
|
+
if (rs.id) {
|
|
160
|
+
return rs.id + 1;
|
|
161
|
+
}
|
|
162
|
+
return 1;
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
global_1.global.gLog.error(e.stack);
|
|
166
|
+
}
|
|
167
|
+
return -2;
|
|
168
|
+
}
|
|
169
|
+
_convertWhere(where) {
|
|
170
|
+
if (!where || !where._id) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (Core_1.core.isString(where._id) && where._id.length == 24) {
|
|
174
|
+
let _id = where._id;
|
|
175
|
+
try {
|
|
176
|
+
where._id = this.toObjectId(_id);
|
|
177
|
+
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
where._id = _id;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return where;
|
|
183
|
+
}
|
|
184
|
+
toObjectId(id) {
|
|
185
|
+
return new mongo.ObjectId(id);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* 获取单条消息
|
|
189
|
+
* @param collection
|
|
190
|
+
*/
|
|
191
|
+
async findOne(collection, where = {}, property = {}) {
|
|
192
|
+
this._convertWhere(where);
|
|
193
|
+
let rs = { errcode: null, one: null };
|
|
194
|
+
if (!this._mongoDb) {
|
|
195
|
+
rs.errcode = _error_1.EErrorCode.No_Mongo;
|
|
196
|
+
return rs;
|
|
197
|
+
}
|
|
198
|
+
let one = null;
|
|
199
|
+
try {
|
|
200
|
+
let col = this._mongoDb.collection(collection);
|
|
201
|
+
one = await col.findOne(where, { projection: property });
|
|
202
|
+
}
|
|
203
|
+
catch (e) {
|
|
204
|
+
global_1.global.gLog.error({ collection, property, where });
|
|
205
|
+
global_1.global.gLog.error(e.stack);
|
|
206
|
+
rs.errcode = _error_1.EErrorCode.Mongo_Error;
|
|
207
|
+
}
|
|
208
|
+
rs.one = one;
|
|
209
|
+
return rs;
|
|
210
|
+
}
|
|
211
|
+
async findMany(collection, where = {}, property = {}, sort, skip = 0, limit = 0) {
|
|
212
|
+
this._convertWhere(where);
|
|
213
|
+
let rs = { errcode: null, list: null };
|
|
214
|
+
if (!this._mongoDb) {
|
|
215
|
+
rs.errcode = _error_1.EErrorCode.No_Mongo;
|
|
216
|
+
return rs;
|
|
217
|
+
}
|
|
218
|
+
let list = [];
|
|
219
|
+
try {
|
|
220
|
+
let col = this._mongoDb.collection(collection);
|
|
221
|
+
let cursor = col.find(where, { projection: property });
|
|
222
|
+
if (sort) {
|
|
223
|
+
cursor = cursor.sort(sort);
|
|
224
|
+
}
|
|
225
|
+
if (skip) {
|
|
226
|
+
cursor = cursor.skip(skip);
|
|
227
|
+
}
|
|
228
|
+
if (limit) {
|
|
229
|
+
cursor = cursor.limit(limit);
|
|
230
|
+
}
|
|
231
|
+
list = await cursor.toArray();
|
|
232
|
+
}
|
|
233
|
+
catch (e) {
|
|
234
|
+
global_1.global.gLog.error({ collection, property, where, sort, skip, limit });
|
|
235
|
+
global_1.global.gLog.error(e.stack);
|
|
236
|
+
rs.errcode = _error_1.EErrorCode.Mongo_Error;
|
|
237
|
+
}
|
|
238
|
+
rs.list = list;
|
|
239
|
+
return rs;
|
|
240
|
+
}
|
|
241
|
+
async countDocuments(collection, where, options) {
|
|
242
|
+
this._convertWhere(where);
|
|
243
|
+
let rs = { errcode: null, count: -1 };
|
|
244
|
+
if (!this._mongoDb) {
|
|
245
|
+
rs.errcode = _error_1.EErrorCode.No_Mongo;
|
|
246
|
+
return rs;
|
|
247
|
+
}
|
|
248
|
+
let count = -1;
|
|
249
|
+
try {
|
|
250
|
+
let col = this._mongoDb.collection(collection);
|
|
251
|
+
count = await col.countDocuments(where || {}, options);
|
|
252
|
+
}
|
|
253
|
+
catch (e) {
|
|
254
|
+
global_1.global.gLog.error({ collection, where });
|
|
255
|
+
global_1.global.gLog.error(e.stack);
|
|
256
|
+
rs.errcode = _error_1.EErrorCode.Mongo_Error;
|
|
257
|
+
}
|
|
258
|
+
rs.count = count;
|
|
259
|
+
return rs;
|
|
260
|
+
}
|
|
261
|
+
async deleteOne(collection, where) {
|
|
262
|
+
this._convertWhere(where);
|
|
263
|
+
let rs = { errcode: null, count: -1 };
|
|
264
|
+
if (!this._mongoDb) {
|
|
265
|
+
rs.errcode = _error_1.EErrorCode.No_Mongo;
|
|
266
|
+
return rs;
|
|
267
|
+
}
|
|
268
|
+
let del_rs = null;
|
|
269
|
+
try {
|
|
270
|
+
let col = this._mongoDb.collection(collection);
|
|
271
|
+
del_rs = await col.deleteOne(where || {});
|
|
272
|
+
}
|
|
273
|
+
catch (e) {
|
|
274
|
+
global_1.global.gLog.error({ collection, where });
|
|
275
|
+
global_1.global.gLog.error(e.stack);
|
|
276
|
+
rs.errcode = _error_1.EErrorCode.Mongo_Error;
|
|
277
|
+
}
|
|
278
|
+
if (del_rs) {
|
|
279
|
+
rs.count = del_rs.deletedCount;
|
|
280
|
+
}
|
|
281
|
+
return rs;
|
|
282
|
+
}
|
|
283
|
+
async deleteMany(collection, where) {
|
|
284
|
+
this._convertWhere(where);
|
|
285
|
+
let rs = { errcode: null, count: -1 };
|
|
286
|
+
if (!this._mongoDb) {
|
|
287
|
+
rs.errcode = _error_1.EErrorCode.No_Mongo;
|
|
288
|
+
return rs;
|
|
289
|
+
}
|
|
290
|
+
let del_rs = null;
|
|
291
|
+
try {
|
|
292
|
+
let col = this._mongoDb.collection(collection);
|
|
293
|
+
del_rs = await col.deleteMany(where || {});
|
|
294
|
+
}
|
|
295
|
+
catch (e) {
|
|
296
|
+
global_1.global.gLog.error({ collection, where });
|
|
297
|
+
global_1.global.gLog.error(e.stack);
|
|
298
|
+
rs.errcode = _error_1.EErrorCode.Mongo_Error;
|
|
299
|
+
}
|
|
300
|
+
if (del_rs) {
|
|
301
|
+
rs.count = del_rs.deletedCount;
|
|
302
|
+
}
|
|
303
|
+
return rs;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* 插入数据
|
|
307
|
+
* @param collection
|
|
308
|
+
* @param data
|
|
309
|
+
*/
|
|
310
|
+
async insertOne(collection, data) {
|
|
311
|
+
let rs = { errcode: null, rs: null };
|
|
312
|
+
if (!this._mongoDb) {
|
|
313
|
+
rs.errcode = _error_1.EErrorCode.No_Mongo;
|
|
314
|
+
return rs;
|
|
315
|
+
}
|
|
316
|
+
let in_rs = null;
|
|
317
|
+
try {
|
|
318
|
+
let col = this._mongoDb.collection(collection);
|
|
319
|
+
in_rs = await col.insertOne(data);
|
|
320
|
+
}
|
|
321
|
+
catch (e) {
|
|
322
|
+
global_1.global.gLog.error({ collection, data });
|
|
323
|
+
global_1.global.gLog.error(e.stack);
|
|
324
|
+
rs.errcode = _error_1.EErrorCode.Mongo_Error;
|
|
325
|
+
}
|
|
326
|
+
rs.rs = in_rs;
|
|
327
|
+
return rs;
|
|
328
|
+
}
|
|
329
|
+
async insertManay(collection, data) {
|
|
330
|
+
let rs = { errcode: null, rs: null };
|
|
331
|
+
if (!this._mongoDb) {
|
|
332
|
+
rs.errcode = _error_1.EErrorCode.No_Mongo;
|
|
333
|
+
return rs;
|
|
334
|
+
}
|
|
335
|
+
let in_rs = null;
|
|
336
|
+
try {
|
|
337
|
+
let col = this._mongoDb.collection(collection);
|
|
338
|
+
in_rs = await col.insertMany(data);
|
|
339
|
+
}
|
|
340
|
+
catch (e) {
|
|
341
|
+
global_1.global.gLog.error({ collection, data });
|
|
342
|
+
global_1.global.gLog.error(e.stack);
|
|
343
|
+
rs.errcode = _error_1.EErrorCode.Mongo_Error;
|
|
344
|
+
}
|
|
345
|
+
rs.rs = in_rs;
|
|
346
|
+
return rs;
|
|
347
|
+
}
|
|
348
|
+
async updateOne(collection, where, model, upsert = false) {
|
|
349
|
+
let _id = model["_id"];
|
|
350
|
+
delete model["_id"];
|
|
351
|
+
if (!where && _id) {
|
|
352
|
+
where["_id"] = _id;
|
|
353
|
+
}
|
|
354
|
+
this._convertWhere(where);
|
|
355
|
+
let rs = { errcode: null, rs: null };
|
|
356
|
+
if (!this._mongoDb) {
|
|
357
|
+
if (_id) {
|
|
358
|
+
model["_id"] = _id;
|
|
359
|
+
}
|
|
360
|
+
rs.errcode = _error_1.EErrorCode.No_Mongo;
|
|
361
|
+
return rs;
|
|
362
|
+
}
|
|
363
|
+
let up_rs = null;
|
|
364
|
+
try {
|
|
365
|
+
let updatemodel = null;
|
|
366
|
+
let money = false;
|
|
367
|
+
for (let key in model) {
|
|
368
|
+
if (key.startsWith("$")) {
|
|
369
|
+
money = true;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
if (!money) {
|
|
373
|
+
updatemodel = { "$set": model };
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
updatemodel = model;
|
|
377
|
+
}
|
|
378
|
+
let col = this._mongoDb.collection(collection);
|
|
379
|
+
up_rs = await col.updateOne(where, updatemodel, { upsert: upsert });
|
|
380
|
+
}
|
|
381
|
+
catch (e) {
|
|
382
|
+
global_1.global.gLog.error({ collection, model, where, upsert });
|
|
383
|
+
global_1.global.gLog.error(e.stack);
|
|
384
|
+
rs.errcode = _error_1.EErrorCode.Mongo_Error;
|
|
385
|
+
}
|
|
386
|
+
rs.rs = up_rs;
|
|
387
|
+
if (up_rs?.upsertedId || _id) {
|
|
388
|
+
model["_id"] = up_rs?.upsertedId || _id;
|
|
389
|
+
}
|
|
390
|
+
return rs;
|
|
391
|
+
}
|
|
392
|
+
async updateMany(collection, where, model, upsert = false) {
|
|
393
|
+
this._convertWhere(where);
|
|
394
|
+
let rs = { errcode: null, rs: null };
|
|
395
|
+
if (!this._mongoDb) {
|
|
396
|
+
rs.errcode = _error_1.EErrorCode.No_Mongo;
|
|
397
|
+
return rs;
|
|
398
|
+
}
|
|
399
|
+
let up_rs = null;
|
|
400
|
+
try {
|
|
401
|
+
let updateModel = null;
|
|
402
|
+
let firstKey = Object.keys(model)[0];
|
|
403
|
+
if (!firstKey.startsWith("$")) {
|
|
404
|
+
updateModel = { $set: model };
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
updateModel = model;
|
|
408
|
+
}
|
|
409
|
+
let col = this._mongoDb.collection(collection);
|
|
410
|
+
up_rs = await col.updateMany(where, updateModel, { upsert: upsert });
|
|
411
|
+
}
|
|
412
|
+
catch (e) {
|
|
413
|
+
global_1.global.gLog.error({ collection, model, where, upsert });
|
|
414
|
+
global_1.global.gLog.error(e.stack);
|
|
415
|
+
rs.errcode = _error_1.EErrorCode.Mongo_Error;
|
|
416
|
+
}
|
|
417
|
+
rs.rs = up_rs;
|
|
418
|
+
return rs;
|
|
419
|
+
}
|
|
420
|
+
async createIndex(collection, index, options) {
|
|
421
|
+
let rs = { errcode: null, rs: null };
|
|
422
|
+
if (!this._mongoDb) {
|
|
423
|
+
rs.errcode = _error_1.EErrorCode.No_Mongo;
|
|
424
|
+
return rs;
|
|
425
|
+
}
|
|
426
|
+
let i_rs = null;
|
|
427
|
+
try {
|
|
428
|
+
let col = this._mongoDb.collection(collection);
|
|
429
|
+
i_rs = await col.createIndex(index, options);
|
|
430
|
+
}
|
|
431
|
+
catch (e) {
|
|
432
|
+
global_1.global.gLog.error({ collection, index });
|
|
433
|
+
global_1.global.gLog.error(e.stack);
|
|
434
|
+
rs.errcode = _error_1.EErrorCode.Mongo_Error;
|
|
435
|
+
}
|
|
436
|
+
rs.rs = i_rs;
|
|
437
|
+
return rs;
|
|
438
|
+
}
|
|
439
|
+
async simpleAggregate(collection, where, property, size, random_size) {
|
|
440
|
+
this._convertWhere(where);
|
|
441
|
+
let rs = { errcode: null, list: null };
|
|
442
|
+
if (!this._mongoDb) {
|
|
443
|
+
rs.errcode = _error_1.EErrorCode.No_Mongo;
|
|
444
|
+
return rs;
|
|
445
|
+
}
|
|
446
|
+
let list = [];
|
|
447
|
+
try {
|
|
448
|
+
let col = this._mongoDb.collection(collection);
|
|
449
|
+
let params = [];
|
|
450
|
+
if (where) {
|
|
451
|
+
params.push({ '$match': where });
|
|
452
|
+
}
|
|
453
|
+
if (property) {
|
|
454
|
+
params.push({ '$project': property });
|
|
455
|
+
}
|
|
456
|
+
if (random_size) {
|
|
457
|
+
params.push({ '$sample': { 'size': random_size } });
|
|
458
|
+
}
|
|
459
|
+
let agg = col.aggregate(params);
|
|
460
|
+
if (size) {
|
|
461
|
+
list = await agg.limit(size).toArray();
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
list = await agg.toArray();
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
catch (e) {
|
|
468
|
+
global_1.global.gLog.error(e.stack);
|
|
469
|
+
rs.errcode = _error_1.EErrorCode.Mongo_Error;
|
|
470
|
+
}
|
|
471
|
+
rs.list = list;
|
|
472
|
+
return rs;
|
|
473
|
+
}
|
|
474
|
+
aggregate(collection, pipeline, options) {
|
|
475
|
+
if (!this._mongoDb) {
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
let col = this._mongoDb.collection(collection);
|
|
479
|
+
let agg = col.aggregate(pipeline, options);
|
|
480
|
+
return agg;
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* 快速事务
|
|
484
|
+
* @param collection
|
|
485
|
+
* @param cb
|
|
486
|
+
*/
|
|
487
|
+
async quickTransaction(cb, options) {
|
|
488
|
+
if (!this._mongoDb) {
|
|
489
|
+
return false;
|
|
490
|
+
}
|
|
491
|
+
let session = this._mongoClient.startSession();
|
|
492
|
+
session.startTransaction(options);
|
|
493
|
+
try {
|
|
494
|
+
let rs = await cb(session);
|
|
495
|
+
await session.commitTransaction();
|
|
496
|
+
session.endSession();
|
|
497
|
+
return rs;
|
|
498
|
+
}
|
|
499
|
+
catch (e) {
|
|
500
|
+
await session.abortTransaction();
|
|
501
|
+
global_1.global.gLog.error(e.stack);
|
|
502
|
+
}
|
|
503
|
+
finally {
|
|
504
|
+
await session.endSession();
|
|
505
|
+
}
|
|
506
|
+
return false;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
exports.MongoExt = MongoExt;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MongoServiceManager = void 0;
|
|
4
|
+
const MongoBaseService_1 = require("./MongoBaseService");
|
|
5
|
+
class MongoServiceManager {
|
|
6
|
+
_services = {};
|
|
7
|
+
addService(table, type, dbname = "") {
|
|
8
|
+
if (!this._services[dbname]) {
|
|
9
|
+
this._services[dbname] = {};
|
|
10
|
+
}
|
|
11
|
+
if (!this._services[dbname][table]) {
|
|
12
|
+
this._services[dbname][table] = new MongoBaseService_1.MongoBaseService(table, type, dbname);
|
|
13
|
+
}
|
|
14
|
+
return this._services[dbname][table];
|
|
15
|
+
}
|
|
16
|
+
getService(table, dbname = "") {
|
|
17
|
+
if (!this._services[dbname]) {
|
|
18
|
+
this._services[dbname] = {};
|
|
19
|
+
}
|
|
20
|
+
if (!this._services[dbname][table]) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return this._services[dbname][table];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.MongoServiceManager = MongoServiceManager;
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MysqlBaseService = exports.BaseModel = void 0;
|
|
4
|
+
const global_1 = require("../global");
|
|
4
5
|
const Property_1 = require("./Decorator/Property");
|
|
5
|
-
const MysqlManager_1 = require("./MysqlManager");
|
|
6
|
-
const Log_1 = require("../Logic/Log");
|
|
7
|
-
const DBCache_1 = require("./Decorator/DBCache");
|
|
8
6
|
class BaseModel {
|
|
9
7
|
}
|
|
10
8
|
exports.BaseModel = BaseModel;
|
|
@@ -24,11 +22,11 @@ class MysqlBaseService {
|
|
|
24
22
|
_t_type = null;
|
|
25
23
|
constructor(type) {
|
|
26
24
|
this._t_type = type;
|
|
27
|
-
if (
|
|
25
|
+
if (global_1.global.gMysqlMgr.isValid) {
|
|
28
26
|
this._init();
|
|
29
27
|
}
|
|
30
28
|
else {
|
|
31
|
-
|
|
29
|
+
global_1.global.gMysqlMgr.registerInitCb(this._init.bind(this));
|
|
32
30
|
}
|
|
33
31
|
}
|
|
34
32
|
async _init() {
|
|
@@ -41,13 +39,13 @@ class MysqlBaseService {
|
|
|
41
39
|
throw new Error("数据表的类必须要具有Table装饰器");
|
|
42
40
|
}
|
|
43
41
|
this._table = "`" + table.table + "`";
|
|
44
|
-
if (!
|
|
42
|
+
if (!global_1.global.gMysqlMgr.cfg.auto) {
|
|
45
43
|
//未开启自动创建数据表
|
|
46
44
|
return;
|
|
47
45
|
}
|
|
48
46
|
let droped = await this._checkDropTable(table.version);
|
|
49
47
|
if (!droped) {
|
|
50
|
-
|
|
48
|
+
global_1.global.gLog.info("table(" + this._table + ")无需升级...");
|
|
51
49
|
//既然版本号没变,就快速返回
|
|
52
50
|
return;
|
|
53
51
|
}
|
|
@@ -92,14 +90,14 @@ class MysqlBaseService {
|
|
|
92
90
|
if (table.comment) {
|
|
93
91
|
sql += " comment=\'" + table.comment + "\';";
|
|
94
92
|
}
|
|
95
|
-
let sr = await
|
|
93
|
+
let sr = await global_1.global.gMysqlMgr.query(sql);
|
|
96
94
|
if (sr.error) {
|
|
97
|
-
|
|
95
|
+
global_1.global.gLog.error(sr.error);
|
|
98
96
|
throw Error("table(" + this._table + ")创建失败...");
|
|
99
97
|
}
|
|
100
98
|
else {
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
global_1.global.gDbCache.setVersion(this.table, table.version);
|
|
100
|
+
global_1.global.gLog.info("table(" + this._table + ")初始化成功...");
|
|
103
101
|
await this._onReCreated();
|
|
104
102
|
}
|
|
105
103
|
}
|
|
@@ -108,18 +106,18 @@ class MysqlBaseService {
|
|
|
108
106
|
async _onDroped() {
|
|
109
107
|
}
|
|
110
108
|
async _checkDropTable(cur_version) {
|
|
111
|
-
let local_version =
|
|
109
|
+
let local_version = global_1.global.gDbCache.getVersion(this._table);
|
|
112
110
|
if (local_version == cur_version) {
|
|
113
111
|
return false;
|
|
114
112
|
}
|
|
115
113
|
let sql = "drop table if exists " + this._table;
|
|
116
|
-
let sr = await
|
|
114
|
+
let sr = await global_1.global.gMysqlMgr.query(sql);
|
|
117
115
|
if (sr.error) {
|
|
118
|
-
|
|
116
|
+
global_1.global.gLog.error(sr.error);
|
|
119
117
|
throw Error(sr.error);
|
|
120
118
|
}
|
|
121
119
|
else {
|
|
122
|
-
|
|
120
|
+
global_1.global.gLog.info("table(" + this._table + ")删除成功...");
|
|
123
121
|
await this._onDroped();
|
|
124
122
|
}
|
|
125
123
|
return true;
|
|
@@ -130,7 +128,7 @@ class MysqlBaseService {
|
|
|
130
128
|
*/
|
|
131
129
|
async getById(id) {
|
|
132
130
|
let tm = null;
|
|
133
|
-
let sr = await
|
|
131
|
+
let sr = await global_1.global.gMysqlMgr.query("select * from " + this._table + " where id=? limit 1", [id]);
|
|
134
132
|
if (sr.error || sr.queryResult.length <= 0) {
|
|
135
133
|
return tm;
|
|
136
134
|
}
|
|
@@ -146,7 +144,7 @@ class MysqlBaseService {
|
|
|
146
144
|
}
|
|
147
145
|
sql += " limit 1";
|
|
148
146
|
let tm = null;
|
|
149
|
-
let sr = await
|
|
147
|
+
let sr = await global_1.global.gMysqlMgr.query(sql, args);
|
|
150
148
|
if (sr.queryResult && sr.queryResult.length > 0) {
|
|
151
149
|
tm = sr.queryResult[0];
|
|
152
150
|
}
|
|
@@ -160,7 +158,7 @@ class MysqlBaseService {
|
|
|
160
158
|
sql += " where " + where;
|
|
161
159
|
}
|
|
162
160
|
let total = 0;
|
|
163
|
-
let sr = await
|
|
161
|
+
let sr = await global_1.global.gMysqlMgr.query(sql, args);
|
|
164
162
|
if (sr.queryResult && sr.queryResult.length > 0) {
|
|
165
163
|
total = sr.queryResult[0].num || 0;
|
|
166
164
|
}
|
|
@@ -174,7 +172,7 @@ class MysqlBaseService {
|
|
|
174
172
|
sql += " where " + where;
|
|
175
173
|
}
|
|
176
174
|
let tms = null;
|
|
177
|
-
let sr = await
|
|
175
|
+
let sr = await global_1.global.gMysqlMgr.query(sql, args);
|
|
178
176
|
tms = sr.queryResult;
|
|
179
177
|
return tms;
|
|
180
178
|
}
|
|
@@ -183,7 +181,7 @@ class MysqlBaseService {
|
|
|
183
181
|
if (where) {
|
|
184
182
|
sql += " where " + where;
|
|
185
183
|
}
|
|
186
|
-
let sr = await
|
|
184
|
+
let sr = await global_1.global.gMysqlMgr.query(sql, args);
|
|
187
185
|
if (sr.error || sr.queryResult.length <= 0) {
|
|
188
186
|
return 0;
|
|
189
187
|
}
|
|
@@ -201,7 +199,7 @@ class MysqlBaseService {
|
|
|
201
199
|
args = args || [];
|
|
202
200
|
args.push(num);
|
|
203
201
|
let tms = null;
|
|
204
|
-
let sr = await
|
|
202
|
+
let sr = await global_1.global.gMysqlMgr.query(sql, args);
|
|
205
203
|
tms = sr.queryResult;
|
|
206
204
|
return tms;
|
|
207
205
|
}
|
|
@@ -219,7 +217,7 @@ class MysqlBaseService {
|
|
|
219
217
|
if (limit) {
|
|
220
218
|
sql += " limit " + limit;
|
|
221
219
|
}
|
|
222
|
-
let sr = await
|
|
220
|
+
let sr = await global_1.global.gMysqlMgr.query(sql, args);
|
|
223
221
|
return sr;
|
|
224
222
|
}
|
|
225
223
|
async update(model, where, args, limit) {
|
|
@@ -240,7 +238,7 @@ class MysqlBaseService {
|
|
|
240
238
|
if (limit) {
|
|
241
239
|
sql += " limit " + limit;
|
|
242
240
|
}
|
|
243
|
-
let sr = await
|
|
241
|
+
let sr = await global_1.global.gMysqlMgr.query(sql, args);
|
|
244
242
|
if (id) {
|
|
245
243
|
model["id"] = id;
|
|
246
244
|
}
|
|
@@ -263,17 +261,17 @@ class MysqlBaseService {
|
|
|
263
261
|
let sql = "insert into " + this._table + " set ?";
|
|
264
262
|
//这步的做法是为了去掉model种的TableProperty.key(___table___)
|
|
265
263
|
model = JSON.parse(JSON.stringify(model));
|
|
266
|
-
let sr = await
|
|
264
|
+
let sr = await global_1.global.gMysqlMgr.query(sql, [model]);
|
|
267
265
|
return sr;
|
|
268
266
|
}
|
|
269
267
|
async removeById(id) {
|
|
270
268
|
let sql = "delete from " + this._table + " where id=?";
|
|
271
|
-
let sr = await
|
|
269
|
+
let sr = await global_1.global.gMysqlMgr.query(sql, [id]);
|
|
272
270
|
return sr;
|
|
273
271
|
}
|
|
274
272
|
async remove(where, args) {
|
|
275
273
|
let sql = "delete from " + this._table + " where " + where;
|
|
276
|
-
let sr = await
|
|
274
|
+
let sr = await global_1.global.gMysqlMgr.query(sql, args);
|
|
277
275
|
return sr;
|
|
278
276
|
}
|
|
279
277
|
}
|