mm_os 3.3.1 → 4.0.1

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.
Files changed (380) hide show
  1. package/LICENSE +21 -201
  2. package/README.md +498 -99
  3. package/README_EN.md +505 -0
  4. package/adapter/adapter.js +431 -0
  5. package/adapter/custom_persistence.js +660 -0
  6. package/adapter/mqtt.js +273 -0
  7. package/adapter/socket.js +113 -0
  8. package/adapter/web.js +67 -0
  9. package/adapter/websocket.js +146 -0
  10. package/com/api/com.json +5 -0
  11. package/{core/com → com}/api/config.tpl.json +8 -8
  12. package/com/api/drive.js +708 -0
  13. package/com/api/index.js +198 -0
  14. package/com/api/oauth.js +200 -0
  15. package/com/api/script.tpl.js +32 -0
  16. package/com/cmd/README.md +11 -0
  17. package/com/cmd/com.json +5 -0
  18. package/com/cmd/config.tpl.json +122 -0
  19. package/com/cmd/drive.js +1548 -0
  20. package/com/cmd/index.js +1066 -0
  21. package/com/cmd/msg.json +48 -0
  22. package/com/cmd/nlp.js +525 -0
  23. package/com/cmd/script.tpl.js +32 -0
  24. package/com/db/com.json +5 -0
  25. package/com/db/drive.js +1999 -0
  26. package/com/db/index.js +242 -0
  27. package/{core/com → com}/event/README.md +4 -4
  28. package/com/event/com.json +5 -0
  29. package/{core/com → com}/event/config.tpl.json +18 -18
  30. package/com/event/drive.js +59 -0
  31. package/com/event/index.js +409 -0
  32. package/com/event/script.tpl.js +23 -0
  33. package/com/mqtt/com.json +5 -0
  34. package/{core/com → com}/mqtt/config.tpl.json +3 -5
  35. package/com/mqtt/drive.js +676 -0
  36. package/com/mqtt/index.js +822 -0
  37. package/com/mqtt/mm_mqtt.js +425 -0
  38. package/com/mqtt/script.tpl.js +723 -0
  39. package/com/nav/com.json +5 -0
  40. package/com/nav/config.tpl.json +84 -0
  41. package/com/nav/drive.js +702 -0
  42. package/com/nav/index.js +231 -0
  43. package/{core/com → com}/nav/tpl/admin_pc/page_config.vue +280 -280
  44. package/{core/com → com}/nav/tpl/admin_pc/page_config_form.vue +194 -194
  45. package/com/nav/tpl/admin_pc/page_form.vue +180 -0
  46. package/com/nav/tpl/admin_pc/page_view.vue +124 -0
  47. package/com/nav/tpl/dev_pc/page_default.vue +247 -0
  48. package/com/nav/tpl/dev_pc/page_type.vue +313 -0
  49. package/com/nav/tpl/home_pc/page_default.vue +234 -0
  50. package/com/nav/tpl/home_pc/page_form.vue +137 -0
  51. package/com/nav/tpl/home_pc/page_list.vue +234 -0
  52. package/com/nav/tpl/home_pc/page_nav.vue +221 -0
  53. package/com/nav/tpl/home_pc/page_type.vue +234 -0
  54. package/com/nav/tpl/home_pc/page_view.vue +125 -0
  55. package/com/nav/tpl/home_phone/page_channel.vue +234 -0
  56. package/com/nav/tpl/home_phone/page_default.vue +234 -0
  57. package/com/nav/tpl/home_phone/page_form.vue +137 -0
  58. package/com/nav/tpl/home_phone/page_nav.vue +237 -0
  59. package/com/nav/tpl/home_phone/page_type.vue +234 -0
  60. package/com/nav/tpl/home_phone/page_view.vue +125 -0
  61. package/com/nav/viewmodel.js +446 -0
  62. package/com/param/com.json +5 -0
  63. package/{core/com → com}/param/config.tpl.json +7 -1
  64. package/com/param/drive.js +502 -0
  65. package/com/param/index.js +155 -0
  66. package/com/param/script.tpl.js +12 -0
  67. package/com/pendant/com.json +5 -0
  68. package/{core/com/component → com/pendant}/config.tpl.json +15 -13
  69. package/com/pendant/drive.js +204 -0
  70. package/com/pendant/index.js +441 -0
  71. package/com/pendant/pendant.html +16 -0
  72. package/com/pendant/script.tpl.js +18 -0
  73. package/com/socket/com.json +5 -0
  74. package/com/socket/config.tpl.json +12 -0
  75. package/com/socket/drive.js +651 -0
  76. package/com/socket/index.js +351 -0
  77. package/com/socket/script.tpl.js +41 -0
  78. package/com/sql/com.json +5 -0
  79. package/{core/com → com}/sql/config.tpl.json +13 -9
  80. package/com/sql/drive.js +1259 -0
  81. package/com/sql/index.js +150 -0
  82. package/com/sql/script.tpl.js +47 -0
  83. package/com/static/com.json +5 -0
  84. package/{core/com → com}/static/config.tpl.json +10 -6
  85. package/com/static/drive.js +194 -0
  86. package/com/static/index.js +226 -0
  87. package/com/static/script.tpl.js +28 -0
  88. package/com/task/com.json +5 -0
  89. package/{core/com → com}/task/config.tpl.json +4 -6
  90. package/com/task/drive.js +405 -0
  91. package/com/task/index.js +148 -0
  92. package/com/task/script.tpl.js +37 -0
  93. package/com/template/com.json +5 -0
  94. package/com/template/config.tpl.json +16 -0
  95. package/com/template/drive.js +80 -0
  96. package/com/template/index.js +141 -0
  97. package/com.js +156 -0
  98. package/common/README.md +2 -0
  99. package/common/handler/msg/handler.json +22 -0
  100. package/common/handler/msg/index.js +23 -0
  101. package/common/handler/player/handler.json +22 -0
  102. package/common/handler/player/index.js +287 -0
  103. package/common/handler/user/handler.json +22 -0
  104. package/common/handler/user/index.js +23 -0
  105. package/common/middleware/web_after/index.js +29 -0
  106. package/common/middleware/web_after/middleware.json +9 -0
  107. package/common/middleware/web_base/index.js +113 -0
  108. package/common/middleware/web_base/middleware.json +19 -0
  109. package/common/middleware/web_before/index.js +33 -0
  110. package/common/middleware/web_before/middleware.json +9 -0
  111. package/common/middleware/web_cors/index.js +87 -0
  112. package/common/middleware/web_cors/middleware.json +24 -0
  113. package/common/middleware/web_error/index.js +119 -0
  114. package/common/middleware/web_error/middleware.json +18 -0
  115. package/common/middleware/web_ip/index.js +15 -0
  116. package/common/middleware/web_ip/middleware.json +14 -0
  117. package/common/middleware/web_logger/index.js +156 -0
  118. package/common/middleware/web_logger/middleware.json +14 -0
  119. package/common/middleware/web_main/index.js +24 -0
  120. package/common/middleware/web_main/middleware.json +9 -0
  121. package/common/middleware/web_static/index.js +73 -0
  122. package/common/middleware/web_static/middleware.json +54 -0
  123. package/common/middleware/web_waf/index.js +385 -0
  124. package/common/middleware/web_waf/middleware.json +13 -0
  125. package/common/model/msg/index.js +88 -0
  126. package/common/model/msg/model.json +401 -0
  127. package/common/model/player/index.js +63 -0
  128. package/common/model/player/model.json +185 -0
  129. package/common/model/user/index.js +11 -0
  130. package/common/model/user/model.json +219 -0
  131. package/core/app/config.tpl.json +67 -0
  132. package/core/app/index.js +632 -0
  133. package/core/app/script.tpl.js +52 -0
  134. package/core/channel/index.js +899 -0
  135. package/core/channel/matcher.js +585 -0
  136. package/core/com/config.tpl.json +16 -0
  137. package/core/com/index.js +74 -0
  138. package/core/com/script.tpl.js +5 -0
  139. package/core/component/component.js +42 -0
  140. package/core/component/config.tpl.json +63 -0
  141. package/core/component/index.js +273 -0
  142. package/core/component/script.tpl.js +19 -0
  143. package/core/controller/config.tpl.json +14 -0
  144. package/core/controller/index.js +373 -0
  145. package/core/controller/script.tpl.js +27 -0
  146. package/core/factory/config.tpl.json +14 -0
  147. package/core/factory/entity.js +275 -0
  148. package/core/factory/index.js +241 -0
  149. package/core/factory/script.tpl.js +16 -0
  150. package/core/game/bat/index.js +137 -0
  151. package/core/game/bat/world.js +622 -0
  152. package/core/game/config.tpl.json +16 -0
  153. package/core/game/entity_admin.js +230 -0
  154. package/core/game/index.js +186 -0
  155. package/core/handler/config.tpl.json +22 -0
  156. package/core/handler/index.js +181 -0
  157. package/core/handler/script.tpl.js +23 -0
  158. package/core/logic/config.tpl.json +14 -0
  159. package/core/logic/index.js +59 -0
  160. package/core/logic/script.tpl.js +19 -0
  161. package/core/middleware/config.tpl.json +16 -0
  162. package/core/middleware/index.js +125 -0
  163. package/core/middleware/script.tpl.js +37 -0
  164. package/core/mod/config.tpl.json +22 -0
  165. package/core/mod/index.js +130 -0
  166. package/core/mod/script.tpl.js +34 -0
  167. package/core/model/config.tpl.json +219 -0
  168. package/core/model/index.js +272 -0
  169. package/core/model/model.js +27 -0
  170. package/core/model/script.tpl.js +20 -0
  171. package/core/notifier/config.tpl.json +14 -0
  172. package/core/notifier/index.js +77 -0
  173. package/core/notifier/script.tpl.js +20 -0
  174. package/core/plugin/config.tpl.json +24 -0
  175. package/core/plugin/index.js +232 -0
  176. package/core/plugin/script.tpl.js +51 -0
  177. package/core/pusher/config.tpl.json +14 -0
  178. package/core/pusher/index.js +161 -0
  179. package/core/pusher/script.tpl.js +20 -0
  180. package/core/room/bat/index.js +170 -0
  181. package/core/room/bat/room.js +524 -0
  182. package/core/room/config.tpl.json +20 -0
  183. package/core/room/index.js +249 -0
  184. package/core/room/room.js +61 -0
  185. package/core/scene/config.tpl.json +14 -0
  186. package/core/scene/index.js +466 -0
  187. package/core/scene/loop.js +1255 -0
  188. package/core/scene/map.js +28 -0
  189. package/core/scene/script.tpl.js +22 -0
  190. package/core/sender/config.tpl.json +14 -0
  191. package/core/sender/index.js +79 -0
  192. package/core/sender/script.tpl.js +20 -0
  193. package/core/service/config.tpl.json +14 -0
  194. package/core/service/index.js +100 -0
  195. package/core/service/script.tpl.js +25 -0
  196. package/core/store/config.tpl.json +26 -0
  197. package/core/store/index.js +1755 -0
  198. package/core/store/script.tpl.js +22 -0
  199. package/core/store/sql.js +1464 -0
  200. package/core/system/config.tpl.json +18 -0
  201. package/core/system/index.js +312 -0
  202. package/core/system/script.tpl.js +77 -0
  203. package/core/view/config.tpl.json +14 -0
  204. package/core/view/index.js +91 -0
  205. package/core/view/script.tpl.js +20 -0
  206. package/core/zone/bat/index.js +725 -0
  207. package/core/zone/config.tpl.json +54 -0
  208. package/core/zone/index.js +614 -0
  209. package/core/zone/script.tpl.js +10 -0
  210. package/core/zone/zone_bat.js +136 -0
  211. package/core//345/237/272/347/261/273/346/250/241/345/235/227/346/270/205/345/215/225.md +24 -0
  212. package/index.js +17 -333
  213. package/os.js +57 -0
  214. package/package.json +65 -55
  215. package/server.js +598 -0
  216. package/README.en.md +0 -36
  217. package/conf.json +0 -3
  218. package/core/base/mqtt/index.js +0 -1110
  219. package/core/base/mqtt/lib.js +0 -40
  220. package/core/base/web/index.js +0 -245
  221. package/core/com/api/com.json +0 -4
  222. package/core/com/api/drive.js +0 -668
  223. package/core/com/api/index.js +0 -108
  224. package/core/com/api/oauth.js +0 -158
  225. package/core/com/api/script.js +0 -32
  226. package/core/com/app/README.md +0 -3
  227. package/core/com/app/com.json +0 -4
  228. package/core/com/app/config.tpl.json +0 -16
  229. package/core/com/app/drive.js +0 -309
  230. package/core/com/app/index.js +0 -211
  231. package/core/com/app/script.js +0 -155
  232. package/core/com/cmd/com.json +0 -4
  233. package/core/com/cmd/config.tpl.json +0 -66
  234. package/core/com/cmd/drive.js +0 -513
  235. package/core/com/cmd/index.js +0 -354
  236. package/core/com/cmd/old/5w2h.js +0 -54
  237. package/core/com/cmd/old/drive.js +0 -423
  238. package/core/com/cmd/script.js +0 -11
  239. package/core/com/component/README.md +0 -3
  240. package/core/com/component/com.json +0 -4
  241. package/core/com/component/component.html +0 -16
  242. package/core/com/component/drive.js +0 -197
  243. package/core/com/component/index.js +0 -312
  244. package/core/com/component/script.js +0 -18
  245. package/core/com/db/com.json +0 -4
  246. package/core/com/db/drive.js +0 -1160
  247. package/core/com/db/index.js +0 -176
  248. package/core/com/event/com.json +0 -4
  249. package/core/com/event/drive.js +0 -133
  250. package/core/com/event/index.js +0 -345
  251. package/core/com/event/script.js +0 -26
  252. package/core/com/eventer/com.js +0 -477
  253. package/core/com/eventer/com.json +0 -4
  254. package/core/com/middleware/com.js +0 -154
  255. package/core/com/middleware/com.json +0 -4
  256. package/core/com/middleware/config.tpl.json +0 -8
  257. package/core/com/middleware/script.js +0 -9
  258. package/core/com/mqtt/com.json +0 -4
  259. package/core/com/mqtt/drive.js +0 -600
  260. package/core/com/mqtt/index.js +0 -572
  261. package/core/com/mqtt/mm_mqtt.js +0 -330
  262. package/core/com/mqtt/script.js +0 -604
  263. package/core/com/msg/com.js +0 -296
  264. package/core/com/msg/com.json +0 -4
  265. package/core/com/nav/com.json +0 -4
  266. package/core/com/nav/config.tpl.json +0 -75
  267. package/core/com/nav/drive.js +0 -549
  268. package/core/com/nav/index.js +0 -182
  269. package/core/com/nav/tpl/admin_pc/page_form.vue +0 -180
  270. package/core/com/nav/tpl/admin_pc/page_view.vue +0 -124
  271. package/core/com/nav/tpl/dev_pc/page_default.vue +0 -247
  272. package/core/com/nav/tpl/dev_pc/page_type.vue +0 -313
  273. package/core/com/nav/tpl/home_pc/page_default.vue +0 -234
  274. package/core/com/nav/tpl/home_pc/page_form.vue +0 -137
  275. package/core/com/nav/tpl/home_pc/page_list.vue +0 -234
  276. package/core/com/nav/tpl/home_pc/page_nav.vue +0 -221
  277. package/core/com/nav/tpl/home_pc/page_type.vue +0 -234
  278. package/core/com/nav/tpl/home_pc/page_view.vue +0 -125
  279. package/core/com/nav/tpl/home_phone/page_channel.vue +0 -234
  280. package/core/com/nav/tpl/home_phone/page_default.vue +0 -234
  281. package/core/com/nav/tpl/home_phone/page_form.vue +0 -137
  282. package/core/com/nav/tpl/home_phone/page_nav.vue +0 -237
  283. package/core/com/nav/tpl/home_phone/page_type.vue +0 -234
  284. package/core/com/nav/tpl/home_phone/page_view.vue +0 -125
  285. package/core/com/nav/viewmodel.js +0 -296
  286. package/core/com/param/drive.js +0 -366
  287. package/core/com/param/index.js +0 -80
  288. package/core/com/param/script.js +0 -12
  289. package/core/com/param/test.js +0 -98
  290. package/core/com/plugin/README.md +0 -3
  291. package/core/com/plugin/com.json +0 -4
  292. package/core/com/plugin/config.tpl.json +0 -26
  293. package/core/com/plugin/drive.js +0 -536
  294. package/core/com/plugin/index.js +0 -259
  295. package/core/com/plugin/script.js +0 -213
  296. package/core/com/rpc/com.json +0 -4
  297. package/core/com/rpc/drive.js +0 -160
  298. package/core/com/rpc/index.js +0 -87
  299. package/core/com/rpc/rpc.js +0 -118
  300. package/core/com/socket/com.json +0 -4
  301. package/core/com/socket/config.tpl.json +0 -14
  302. package/core/com/socket/drive.js +0 -403
  303. package/core/com/socket/index.js +0 -62
  304. package/core/com/socket/script.js +0 -42
  305. package/core/com/sql/drive.js +0 -1087
  306. package/core/com/sql/index.js +0 -83
  307. package/core/com/sql/script.js +0 -48
  308. package/core/com/static/com.json +0 -4
  309. package/core/com/static/drive.js +0 -220
  310. package/core/com/static/index.js +0 -149
  311. package/core/com/static/script.js +0 -28
  312. package/core/com/task/com.json +0 -4
  313. package/core/com/task/drive.js +0 -403
  314. package/core/com/task/index.js +0 -110
  315. package/core/com/task/script.js +0 -37
  316. package/core/com/timer/com.js +0 -217
  317. package/core/com/timer/com.json +0 -4
  318. package/core/com/tpl/com.js +0 -19
  319. package/core/com/tpl/com.json +0 -4
  320. package/lib/actions.js +0 -50
  321. package/lib/base.js +0 -361
  322. package/lib/com.js +0 -29
  323. package/lib/ref.js +0 -121
  324. package/middleware/cors/index.js +0 -119
  325. package/middleware/cors/middleware.json +0 -20
  326. package/middleware/csrf/index.js +0 -202
  327. package/middleware/csrf/middleware.json +0 -24
  328. package/middleware/ip_firewall/index.js +0 -476
  329. package/middleware/ip_firewall/middleware.json +0 -109
  330. package/middleware/mqtt_base/index.js +0 -10
  331. package/middleware/mqtt_base/middleware.json +0 -11
  332. package/middleware/security_audit/index.js +0 -543
  333. package/middleware/security_audit/middleware.json +0 -48
  334. package/middleware/waf/index.js +0 -343
  335. package/middleware/waf/middleware.json +0 -10
  336. package/middleware/waf_ddos/index.js +0 -520
  337. package/middleware/waf_ddos/middleware.json +0 -38
  338. package/middleware/waf_xss/index.js +0 -269
  339. package/middleware/waf_xss/middleware.json +0 -18
  340. package/middleware/web_after/index.js +0 -33
  341. package/middleware/web_after/middleware.json +0 -10
  342. package/middleware/web_base/index.js +0 -90
  343. package/middleware/web_base/middleware.json +0 -10
  344. package/middleware/web_before/index.js +0 -27
  345. package/middleware/web_before/middleware.json +0 -10
  346. package/middleware/web_check/index.js +0 -28
  347. package/middleware/web_check/middleware.json +0 -10
  348. package/middleware/web_main/index.js +0 -28
  349. package/middleware/web_main/middleware.json +0 -10
  350. package/middleware/web_proxy/index.js +0 -37
  351. package/middleware/web_proxy/middleware.json +0 -10
  352. package/middleware/web_render/index.js +0 -87
  353. package/middleware/web_render/middleware.json +0 -10
  354. package/middleware/web_socket/index.js +0 -34
  355. package/middleware/web_socket/middleware.json +0 -10
  356. package/middleware/web_static/index.js +0 -115
  357. package/middleware/web_static/middleware.json +0 -10
  358. /package/{core/com → com}/api/README.md +0 -0
  359. /package/{core/com → com}/db/README.md +0 -0
  360. /package/{core/com → com}/mqtt/README.md +0 -0
  361. /package/{core/com → com}/nav/README.md +0 -0
  362. /package/{core/com → com}/nav/tpl/admin_pc/page_channel.vue +0 -0
  363. /package/{core/com → com}/nav/tpl/admin_pc/page_default.vue +0 -0
  364. /package/{core/com → com}/nav/tpl/admin_pc/page_lang.vue +0 -0
  365. /package/{core/com → com}/nav/tpl/admin_pc/page_nav.vue +0 -0
  366. /package/{core/com → com}/nav/tpl/admin_pc/page_table.vue +0 -0
  367. /package/{core/com → com}/nav/tpl/admin_pc/page_type.vue +0 -0
  368. /package/{core/com → com}/nav/tpl/dev_pc/page_channel.vue +0 -0
  369. /package/{core/com → com}/nav/tpl/dev_pc/page_config.vue +0 -0
  370. /package/{core/com → com}/nav/tpl/dev_pc/page_form.vue +0 -0
  371. /package/{core/com → com}/nav/tpl/dev_pc/page_nav.vue +0 -0
  372. /package/{core/com → com}/nav/tpl/dev_pc/page_table.vue +0 -0
  373. /package/{core/com → com}/nav/tpl/home_pc/page_channel.vue +0 -0
  374. /package/{core/com → com}/nav/tpl/home_phone/page_list.vue +0 -0
  375. /package/{core/com → com}/param/README.md +0 -0
  376. /package/{core/com/cmd → com/pendant}/README.md +0 -0
  377. /package/{core/com → com}/socket/README.md +0 -0
  378. /package/{core/com → com}/sql/README.md +0 -0
  379. /package/{core/com → com}/static/README.md +0 -0
  380. /package/{core/com → com}/task/README.md +0 -0
@@ -1,1087 +0,0 @@
1
- const Item = require('mm_machine').Item;
2
- const Excel = require('mm_excel');
3
-
4
- /**
5
- * Sql操作驱动类
6
- * @extends {Item}
7
- * @class
8
- */
9
- class Drive extends Item {
10
- /**
11
- * 构造函数
12
- * @param {String} dir 当前路径
13
- * @constructor
14
- */
15
- constructor(dir) {
16
- super(dir, __dirname);
17
- this.default_file = "./sql.json";
18
- // 保存文件目录
19
- this.save_dir = './file/';
20
- // 读取文件目录
21
- this.url_path = "/file/";
22
- // 默认启用热更新
23
- this.mode = 3;
24
- /* 通用项 */
25
- this.params = null;
26
- // 配置参数
27
- this.config = {
28
- // 名称, 由中英文和下“_”组成, 用于修改或卸载 例如: demo
29
- "name": "",
30
- // 状态 0未启用,1启用
31
- "state": 1,
32
- // 表名 {0} 代表可前端传参自定义查询的表
33
- "table": "{0}",
34
- // 主键 用于水平连表查询时 例如:id
35
- "key": "",
36
- // 排序 {0} 代表可前台传参自定义排序规则 格式: `name` asc, `id` desc
37
- "orderby": "{0}",
38
- // 默认排序 `id` desc
39
- "orderby_default": "",
40
- // 显示的字段 {0} 代表可前台传参自定义查询的字段, 例如: `id`,`username`,`name`,`email`
41
- "field": "{0}",
42
- // 默认显示字段 例如: `id`,`username`,`name`
43
- "field_default": "*",
44
- // 隐藏字段 有些字段即使前端请求也不能返回,这是通过隐藏字段将其过滤掉, 例如:password *表示包含匹配
45
- "field_hide": ["*password*", "*token*", "salt"],
46
- // 分页大小,默认一页显示条数
47
- "page_size": 30,
48
- /* 过滤参数 */
49
- "filter": {
50
- /**
51
- * 表名
52
- */
53
- "table": "table",
54
- /**
55
- * 查询的页码
56
- */
57
- "page": "page",
58
- /**
59
- * 查询每页条数
60
- */
61
- "size": "size",
62
- /**
63
- * 操作方式: 传入参数method=add, 支持参数 add增、del删、set改、get查,为空则为get
64
- */
65
- "method": "method",
66
- /**
67
- * 排序
68
- */
69
- "orderby": "orderby",
70
- /**
71
- * 查询显示的字段
72
- */
73
- "field": "field",
74
- /**
75
- * 统计结果: 统计符合条件的结果数,只有当page等于1或0时才会统计
76
- */
77
- "count_ret": "count_ret"
78
- },
79
- // 分隔符 用于查询时的多条件处理
80
- "separator": "|",
81
- // 支持的方法 add增、del删、set改、get查, 只填get表示只支持查询 // import export del_repeat",
82
- "method": "add del set get get_obj import export del_repeat avg sum count update",
83
- // sql查询语句
84
- "query": {},
85
- // 默认查询, 当查询条件中不包含该项时,默认添加该项。 例如: { "age": "`age` < 20" } , 当查询参含有age,不调用该项,不存在时,sql会增加该项
86
- "query_default": {},
87
- // sql更改语句
88
- "update": {},
89
- // 默认添加条件,当不包含该项时,默认添加该项。 例如: { "age": "`age` += 1" } , 当查询参含有age,不调用该项,不存在时,sql会增加该项
90
- "body_default": {},
91
- // 文件路径, 当调用函数不存在时,会先从文件中加载
92
- "func_file": "",
93
- // 回调函数名 用于决定调用脚本的哪个函数
94
- "func_name": "",
95
- // 参数 []
96
- "params": null,
97
- // 格式
98
- "format": [
99
- /* {
100
- // 表名,当选择转换方式 表转换时需填写
101
- "table": "mm_web_region",
102
- // 查询条件,用于加速转换
103
- "query": {
104
- "group": "市"
105
- },
106
- // 表标题名
107
- "title": "所属省份",
108
- // 转换ID
109
- "id": "province_id",
110
- // 转换主键
111
- "key": "province",
112
- // 取名
113
- "name": "name",
114
- // 列表
115
- "list": [{
116
- "province_id": 1,
117
- "name": "广东省"
118
- },
119
- {
120
- "province_id": 2,
121
- "name": "广西省"
122
- },
123
- {
124
- "province_id": 3,
125
- "name": "湖南省"
126
- }
127
- ]
128
- },
129
- {
130
- "title": "是否可见",
131
- "key": "show",
132
- "list": ["否", "是"]
133
- } */
134
- ],
135
- /* 去重 */
136
- "del_repeat": {
137
- // 判断重复的字段,例如字段名 number
138
- "groupBy": "",
139
- // 排序方式 例如: `diJia` ASC
140
- "orderBy": ""
141
- },
142
- /* 逻辑符 */
143
- "logic": {},
144
- // 输出sql语句
145
- "log": false
146
- };
147
- }
148
- }
149
-
150
- /**
151
- * 执行前, 可用于过滤参数
152
- * @param {Object} params 参数对象 (object) 包含query和body 如{ query, body }
153
- * @param {Object} db 数据库管理器
154
- * @return {Object} 过滤后的参数
155
- */
156
- Drive.prototype.before = async function(params, db) {
157
- return params;
158
- };
159
-
160
- /**
161
- * 验证, 用于判断是否执行
162
- * @param {Object} params 参数对象 (object) 包含query和body
163
- * @param {Object} db 数据管理器
164
- * @return {Boolean} 验证通过返回true, 失败返回false
165
- */
166
- Drive.prototype.check = async function(params, db) {
167
- return true;
168
- };
169
- /**
170
- * @return {type} 执行后 可用于附加执行
171
- * @param {Object} params 参数对象 (object) 包含query和body
172
- * @param {Object} db 数据管理器
173
- * @return {Object} 最终执行结果
174
- */
175
- Drive.prototype.after = async function(params, db) {
176
- return db.ret;
177
- };
178
-
179
- /**
180
- * 更新缓存
181
- * @param {Object} sql
182
- */
183
- Drive.prototype.update_cache = async function(table, sql) {
184
-
185
- };
186
-
187
- /**
188
- * @ 执行修改
189
- * @param {Object} query 查询url参数
190
- * @param {Object} body 修改时置入body的参数
191
- * @param {Object} db 数据库管理器
192
- */
193
- Drive.prototype.run = async function(query, body, db) {
194
- var params = {
195
- query,
196
- body
197
- };
198
- params = await this.before(params, db);
199
- if (this.check(params, db)) {
200
- var ret = await this.main(params, db);
201
- if (!ret.error) {
202
- db.ret = ret;
203
- return await this.after(params, db);
204
- } else {
205
- return ret;
206
- }
207
- }
208
- return null;
209
- };
210
-
211
-
212
- /**
213
- * SQL操作准备
214
- * @param {Object} db 数据库操作类
215
- * @param {Object} query 查询条件
216
- * @param {Object} body 修改项
217
- * @return {Object} 返回准备参数
218
- */
219
- Drive.prototype.ready = function(db, query, body) {
220
- var cg = this.config;
221
- var qy = Object.assign({}, query);
222
- $.push(db.config.filter, cg.filter, true);
223
- db.filter(qy);
224
- return {
225
- cg,
226
- qy
227
- };
228
- };
229
-
230
- /**
231
- * 转为查询条件字符串
232
- * @param {Object} db 数据库管理器
233
- * @param {Object} query 查寻条件
234
- * @param {Object} method 方法
235
- * @return {String} 返回查询条件
236
- */
237
- Drive.prototype.to_where = function(db, query, method) {
238
- var {
239
- cg,
240
- qy
241
- } = this.ready(db, query, {});
242
- db.config.separator = cg.separator;
243
- if (!query.size && cg.page_size) {
244
- db.size = cg.page_size + 0;
245
- }
246
- if (db.size > 0 && db.page === 0) {
247
- db.page = 1;
248
- }
249
- var f = db.config.filter;
250
- // 设置查询字段
251
- var field = query[f.field];
252
- if (cg.field.has("*{0}*")) {
253
- if (field) {
254
- db.field = cg.field.replace("{0}", field);
255
- } else if (method === 'get_obj' && cg.field_obj) {
256
- db.field = cg.field_obj + '';
257
- } else if (cg.field_default) {
258
- db.field = cg.field_default + '';
259
- }
260
- } else {
261
- db.field = cg.field + '';
262
- if (field) {
263
- qy[f.field] = field;
264
- }
265
- }
266
-
267
- // 设置排序方式
268
- var orderby = query[f.orderby];
269
- if (cg.orderby.has("*{0}*")) {
270
- if (orderby) {
271
- db.orderby = cg.orderby.replace("{0}", orderby);
272
- } else if (cg.orderby_default) {
273
- db.orderby = cg.orderby_default + '';
274
- }
275
- } else {
276
- db.orderby = cg.orderby + '';
277
- if (orderby) {
278
- qy[f.orderby] = orderby;
279
- }
280
- }
281
- var query_str = db.tpl_query(qy, cg.query);
282
- var qt = cg.query_default;
283
- if (Object.keys(qt).length > 0) {
284
- var id = $.dict.user_id;
285
- var id_key = "{" + id + "}";
286
- var user_id = "0";
287
- var user = db.user;
288
- if (user && user[id]) {
289
- user_id = user[id];
290
- }
291
- for (var k in qt) {
292
- if (!qy[k]) {
293
- query_str += " && " + qt[k].replaceAll(id_key, user_id);
294
- }
295
- }
296
- if (query_str.startsWith(" && ")) {
297
- query_str = query_str.replace(" && ", "");
298
- }
299
- }
300
- return query_str;
301
- }
302
-
303
- /**
304
- * 查询(主要)
305
- * @param {Object} db 数据库操作类
306
- * @param {Object} query 查询条件
307
- * @param {Object} method 方法
308
- * @return {Object} 返回查询结果
309
- */
310
- Drive.prototype.get_main = async function(db, query, method) {
311
- var ret;
312
- if (this.config.field.has("*{0}*")) {
313
- var field = query[db.config.filter.field];
314
- if (field && this.config.field_hide.getMatch(field)) {
315
- return $.ret.error(70003, '不合法的查询参数');
316
- }
317
- }
318
- var query_str = this.to_where(db, query, method);
319
-
320
- // 查询
321
- if (db.count_ret === "true") {
322
- ret = $.ret.body(await db.getCountSql(query_str, db.orderby, db.field));
323
- } else {
324
- ret = $.ret.list(await db.getSql(query_str, db.orderby, db.field));
325
- }
326
- // if (db.error) {
327
- // $.log.error('查询SQL', db.sql, db.error);
328
- // }
329
- return ret;
330
- };
331
-
332
- /**
333
- * 查询
334
- * @param {Object} db 数据库操作类
335
- * @param {Object} query 查询条件
336
- * @param {Object} body 修改项
337
- * @return {Object} 返回查询结果
338
- */
339
- Drive.prototype.get = async function(db, query, body) {
340
- return await this.get_main(db, query);
341
- };
342
-
343
- /**
344
- * 查询单条数据
345
- * @param {Object} db 数据库操作类
346
- * @param {Object} query 查询条件
347
- * @param {Object} body 修改项
348
- * @return {Object} 返回查询结果
349
- */
350
- Drive.prototype.get_obj = async function(db, query, body) {
351
- query.page = 1;
352
- query.size = 1;
353
- var ret = await this.get_main(db, query, 'get_obj');
354
- if (ret.result) {
355
- var list = ret.result.list;
356
- if (list.length > 0) {
357
- return $.ret.obj(list[0]);
358
- } else {
359
- return $.ret.obj(null);
360
- }
361
- }
362
- return ret;
363
- };
364
-
365
- /**
366
- * 修改(主要)
367
- * @param {Object} db 数据库操作类
368
- * @param {Object} query 查询条件
369
- * @param {Object} body 修改项
370
- * @return {Object} 返回修改结果
371
- */
372
- Drive.prototype.set_main = async function(db, query, body) {
373
- var ret;
374
- var {
375
- cg,
376
- qy
377
- } = this.ready(db, query, body);
378
- var key = cg.key;
379
- if (body[key]) {
380
- qy[key] = body[key];
381
- }
382
- var query_str = db.tpl_query(qy, cg.query);
383
-
384
- var qt = cg.query_default;
385
- if (Object.keys(qt).length > 0) {
386
- var id = $.dict.user_id;
387
- var id_key = "{" + id + "}";
388
- var user_id = "0";
389
- var user = db.user;
390
- if (user && user[id]) {
391
- user_id = user[id];
392
- }
393
- for (var k in qt) {
394
- if (!qy[k]) {
395
- query_str += " && " + qt[k].replace(id_key, user_id);
396
- }
397
- }
398
- if (query_str.startsWith(" && ")) {
399
- query_str = query_str.replace(" && ", "");
400
- }
401
- }
402
-
403
- var set_str = db.tpl_body(body, cg.update);
404
- var n = await db.setSql(query_str, set_str);
405
-
406
- if (n < 1) {
407
- ret = $.ret.error(500, '修改失败!\n' + db.error.message);
408
- $.log.error('修改SQL', db.sql, db.error);
409
- } else {
410
- ret = $.ret.bl(true, '修改成功!');
411
- }
412
- return ret;
413
- };
414
-
415
-
416
- /**
417
- * 修改
418
- * @param {Object} db 数据库操作类
419
- * @param {Object} query 查询条件
420
- * @param {Object} body 修改项
421
- * @return {Object} 返回查询结果
422
- */
423
- Drive.prototype.set = async function(db, query, body) {
424
- return await this.set_main(db, query, body);
425
- };
426
-
427
- /**
428
- * 添加(主要)
429
- * @param {Object} db 数据库操作类
430
- * @param {Object} body 添加项
431
- * @return {Object} 返回查询结果
432
- */
433
- Drive.prototype.add_main = async function(db, body) {
434
- var ret;
435
- var cg = this.config;
436
- if (Object.keys(body).length > 0) {
437
- var bt = cg.body_default;
438
- if (Object.keys(bt).length > 0) {
439
- var id = $.dict.user_id;
440
- var id_key = "{" + id + "}";
441
- var user_id = "0";
442
- var user = db.user;
443
- if (user && user[id]) {
444
- user_id = user[id];
445
- }
446
- for (var k in bt) {
447
- if (!body[k]) {
448
- var str = bt[k].replace(id_key, user_id);
449
- var key = str.left("=").trim("`");
450
- body[key] = str.right("=").trim("'");
451
- }
452
- }
453
- }
454
- var n = await db.add(body);
455
- if (n < 1) {
456
- ret = $.ret.error(500, '添加失败!\n' + db.error.message);
457
- $.log.error('添加SQL', db.sql, db.error);
458
- } else {
459
- ret = $.ret.bl(true, '添加成功!');
460
- }
461
- } else {
462
- ret = $.ret.error(30001, '参数不能为空');
463
- }
464
- if (cg.log) {
465
- $.log.debug('添加SQL语句', db.sql)
466
- }
467
- return ret;
468
- };
469
-
470
- /**
471
- * 添加
472
- * @param {Object} db 数据库操作类
473
- * @param {Object} query 查询条件
474
- * @param {Object} body 修改项
475
- * @return {Object} 返回添加结果
476
- */
477
- Drive.prototype.add = async function(db, query, body) {
478
- return await this.add_main(db, body);
479
- };
480
-
481
- /**
482
- * 删除(主要)
483
- * @param {Object} db 数据库操作类
484
- * @param {Object} query 查询条件
485
- * @return {Object} 返回查询结果
486
- */
487
- Drive.prototype.del_main = async function(db, query) {
488
- var ret;
489
- var {
490
- cg,
491
- qy
492
- } = this.ready(db, query, {});
493
- var query_str = db.tpl_query(qy, cg.query);
494
- var bl = await db.delSql(query_str);
495
- if (bl < 1) {
496
- ret = $.ret.error(500, '删除失败!\n' + db.error.message);
497
- $.log.error('删除SQL', db.sql, db.error);
498
- } else {
499
- ret = $.ret.bl(true, '删除成功!');
500
- }
501
- if (cg.log) {
502
- $.log.debug('删除SQL语句', db.sql)
503
- }
504
- return ret;
505
- };
506
-
507
- /**
508
- * 删除
509
- * @param {Object} db 数据库操作类
510
- * @param {Object} query 查询条件
511
- * @param {Object} body 修改项
512
- * @return {Object} 返回删除结果
513
- */
514
- Drive.prototype.del = async function(db, query, body = {}) {
515
- return await this.del_main(db, Object.assign({}, query, body));
516
- };
517
-
518
- /**
519
- * 添加或修改(主要)
520
- * @param {Object} db 数据库操作类
521
- * @param {Object} query 查询条件
522
- * @param {Object} body 修改项
523
- * @return {Object} 返回修改结果
524
- */
525
- Drive.prototype.addOrSet_main = async function(db, query, body) {
526
- var ret;
527
- var {
528
- cg,
529
- qy
530
- } = this.ready(db, query, body);
531
- if (Object.keys(body).length > 0 && Object.keys(qy).length > 0) {
532
- var n = await db.addOrSet(qy, body);
533
- if (n < 1) {
534
- ret = $.ret.error(500, '操作失败!\n' + db.error.message);
535
- $.log.error('添加或修改SQL', db.sql, db.error);
536
- } else {
537
- ret = $.ret.bl(true, '操作成功!');
538
- }
539
- } else {
540
- ret = $.ret.error(30001, '参数不能为空');
541
- }
542
- if (cg.log) {
543
- $.log.debug('添加或修改SQL语句', db.sql)
544
- }
545
- return ret;
546
- };
547
-
548
-
549
- /**
550
- * 添加或修改
551
- * @param {Object} db 数据库操作类
552
- * @param {Object} query 查询条件
553
- * @param {Object} body 修改项
554
- * @return {Object} 返回查询结果
555
- */
556
- Drive.prototype.addOrSet = async function(db, query, body) {
557
- return await this.addOrSet_main(db, query, body);
558
- };
559
-
560
- /**
561
- * 获取数据类型
562
- * @param {String} dataType 数据库数据类型
563
- * @returns {String} 返回数据类型
564
- */
565
- Drive.prototype.get_type = function(dataType) {
566
- if (dataType.indexOf('int') !== -1) {
567
- return 'number'
568
- } else {
569
- return 'string'
570
- }
571
- }
572
-
573
- /**
574
- * 获取数据
575
- * @param {Array} fields 要获取的字段数组
576
- * @return {Array} 返回参数信息列表
577
- */
578
- Drive.prototype.get_params = async function(db, fields) {
579
- var cg = this.config;
580
- if (cg.params) {
581
- return cg.params;
582
- }
583
- if (this.params) {
584
- return this.params;
585
- }
586
- var lt = [];
587
- if ($.pool.db) {
588
- var pool = $.pool.db['sys'];
589
- if (pool) {
590
- var dt = pool.get(cg.table);
591
- if (dt && dt.config) {
592
- var list = dt.config.fields;
593
- for (var i = 0; i < list.length; i++) {
594
- var o = list[i];
595
- var name = o.name.replace(/`/g, '');
596
- lt.push({
597
- name,
598
- title: o.title
599
- });
600
- }
601
- }
602
- }
603
- }
604
- if (!lt.length) {
605
- db.table = cg.table;
606
- var list = await db.fields();
607
- for (var i = 0; i < list.length; i++) {
608
- var o = list[i];
609
- var name = o.name;
610
- var note = o.note ? o.note.replace(":", ":") : name;
611
- lt.push({
612
- name,
613
- title: note.left(":", true),
614
- type: this.get_type(o.type)
615
- });
616
- }
617
- }
618
- if (!fields) {
619
- fields = cg.field_default;
620
- }
621
- if (fields && fields !== "*") {
622
- var arr = fields.replace(/`/g, "").split(',');
623
- var params = [];
624
- arr.map((name) => {
625
- var obj = lt.getObj({
626
- name
627
- });
628
- if (obj) {
629
- params.push(obj);
630
- }
631
- });
632
- } else {
633
- params = lt;
634
- }
635
- return params;
636
- };
637
-
638
- /**
639
- * 获取导入导出格式
640
- * @param {Object} db 数据库操作类
641
- * @return {Array} 格式列表
642
- */
643
- Drive.prototype.get_format = async function(db) {
644
- var dbs = Object.assign({}, db);
645
- dbs.size = 0;
646
- var fmt = this.config.format;
647
- for (var i = 0; i < fmt.length; i++) {
648
- var o = fmt[i];
649
- if (o.table) {
650
- if (!o.list || o.list.length == 0) {
651
- dbs.table = o.table;
652
- if (!o.id) {
653
- o.id = o.key;
654
- }
655
- o.list = await dbs.getSql(o.where, null, o.id + "," + o.name);
656
- if (o.id !== o.key) {
657
- o.list.map((m) => {
658
- m[o.key] = m[o.name];
659
- return m;
660
- });
661
- }
662
- }
663
- }
664
- }
665
- return fmt;
666
- };
667
-
668
- /**
669
- * 导入数据(主要)
670
- * @param {Object} db 数据库操作类
671
- * @param {String} file 文件名
672
- * @return {Object} 返回导入结果
673
- */
674
- Drive.prototype.import_main = async function(db, file) {
675
- var params = await this.get_params(db);
676
- var format = await this.get_format(db);
677
-
678
- if (file.indexOf($.runPath) !== 0) {
679
- file = file.replace(this.url_path, this.save_dir);
680
- var path;
681
- if ($.config.path) {
682
- path = $.config.path.user || $.config.path.static || "/static/";
683
- } else {
684
- path = "./static/";
685
- }
686
- file = file.fullname(path);
687
- }
688
-
689
- if (!file.hasFile()) {
690
- return $.ret.error(30001, file + "文件不存在!");
691
- }
692
-
693
- var jarr = [];
694
- if (file.endsWith(".json")) {
695
- jarr = file.loadJson();
696
- } else if (file.endsWith(".xml")) {
697
- jarr = file.loadXml();
698
- } else {
699
- var excel = new Excel({
700
- file,
701
- params,
702
- format
703
- });
704
- try {
705
- jarr = await excel.load();
706
- } catch (e) {
707
- $.log.error("导入文件", e);
708
- } finally {
709
- excel.clear();
710
- excel = null;
711
- }
712
- }
713
-
714
- var list = [];
715
- var errors = [];
716
- var list_error = [];
717
- db.table = db.table || this.config.table;
718
- if (!jarr.length) {
719
- return $.ret.error(10000, '要导入的数据不能为空!');
720
- }
721
- var key = this.config.key;
722
- if (jarr[0][key]) {
723
- for (var i = 0; i < jarr.length; i++) {
724
- var o = jarr[i];
725
- var qy = {};
726
- qy[key] = o[key];
727
- var n = await db.addOrSet(qy, o);
728
- if (n < 1) {
729
- errors.push(db.error);
730
- list_error.push(o);
731
- } else {
732
- list.push(o);
733
- }
734
- }
735
- } else {
736
- for (var i = 0; i < jarr.length; i++) {
737
- var o = jarr[i];
738
- var n = await db.add(o);
739
- if (n < 1) {
740
- errors.push(db.error);
741
- list_error.push(o);
742
- } else {
743
- list.push(o);
744
- }
745
- }
746
- }
747
- var bl = list.length === jarr.length;
748
- var body = $.ret.bl(bl, bl ? '导入成功!' : '导入失败!');
749
- body.result.list = list;
750
- if (errors.length) {
751
- body.result.list_error = list_error;
752
- body.result.errors = errors;
753
- }
754
- return body;
755
- };
756
-
757
-
758
- /**
759
- * 导入数据
760
- * @param {Object} db 数据库操作类
761
- * @param {Object} query 查询条件
762
- * @param {Object} body 导入设置
763
- * @return {Object} 返回执行结果
764
- */
765
- Drive.prototype.import = async function(db, query, body) {
766
- var params = Object.assign({}, query, body);
767
- if (!params.file) {
768
- return $.ret.error(60000, '文件名(file)参数不能为空');
769
- }
770
- return await this.import_main(db, params.file);
771
- };
772
-
773
- /**
774
- * 导出数据(主要)
775
- * @param {Object} db 数据库操作类
776
- * @param {Object} query 查询参数
777
- * @param {Object} body 正文参数(导出设置)
778
- * @property {String} body.fields 需要导出的字段 例如: `username`,`gm`,`vip`
779
- * @property {String} body.file 文件名 例如: 用户名.xlsx 、用户信息.csv 、用户账户.xls
780
- * @property {String} body.path 文件路径 例如: /static/download, 可不填写
781
- * @return {Object} 返回执行结果
782
- */
783
- Drive.prototype.export_main = async function(db, query, body) {
784
- var by = await this.get_main(db, query);
785
- var message = "";
786
- if (db.error) {
787
- message = db.error.message;
788
- return $.ret.error(10000, message);
789
- }
790
- var {
791
- path,
792
- file,
793
- field
794
- } = body;
795
- var table = db.table || this.config.table;
796
- var date = new Date();
797
- var name = table + "_" + date.stamp() + '.xlsx';
798
-
799
- if (!path) {
800
- if ($.config.path) {
801
- path = $.config.path.user || $.config.path.static || "/static/";
802
- } else {
803
- path = "./static/";
804
- }
805
- }
806
- if (!file) {
807
- file = this.save_dir + name;
808
- }
809
- if (!field) {
810
- if (query.field) {
811
- field = query.field;
812
- } else {
813
- var f = this.config.field_default;
814
- if (f.length !== "*") {
815
- field = f;
816
- }
817
- }
818
- }
819
- var params = await this.get_params(db, field);
820
- var format = await this.get_format(db);
821
- file = file.fullname(path);
822
- file.addDir();
823
- var excel = new Excel({
824
- file,
825
- params,
826
- format
827
- });
828
- var list = by.result.list;
829
- try {
830
- file = await excel.save(list);
831
- } catch (e) {
832
- $.log.error("导出保存文件失败!", e);
833
- } finally {
834
- excel.clear();
835
- excel = null;
836
- }
837
-
838
- var body = $.ret.bl(!!file, file ? '导出成功!' : '导出失败!');
839
- body.result.file = file;
840
- body.result.url = this.url_path + name;
841
- if (message) {
842
- body.result.message = message;
843
- }
844
- return body;
845
- };
846
-
847
- /**
848
- * 导出数据
849
- * @param {Object} db 数据库操作类
850
- * @param {Object} query 查询条件
851
- * @param {Object} body 修改项
852
- * @return {Object} 返回执行结果
853
- */
854
- Drive.prototype.export = async function(db, query, body) {
855
- return await this.export_main(db, query, body);
856
- };
857
-
858
- /**
859
- * 删除重复项(主要)
860
- * @param {Object} db 数据库管理器
861
- * @param {Object} params 查询参数
862
- * @return {Object} 返回执行结果
863
- */
864
- Drive.prototype.del_repeat_main = async function(db, params) {
865
- var msg = '';
866
- var cg = this.config.del_repeat;
867
- var orderBy = params.orderby || cg.orderBy;
868
- delete params.orderby;
869
- var groupBy = params.groupby || cg.groupBy;
870
- delete params.groupby;
871
- var f = db.config.filter;
872
- // 设置查询字段
873
- var field = params[f.field] || groupBy;
874
- delete params[f.field];
875
- db.field = field;
876
- var sql = db.toGetSql(params).replace(' * ', ' `' + field + '`, count(*) as len ');
877
- sql += ` GROUP BY ${groupBy}`;
878
- sql = 'SELECT * FROM (' + sql + ') a WHERE len > 1';
879
- var list = await db.run(sql);
880
- if (list.length) {
881
- db.page = 1;
882
- db.size = 1;
883
- var key = this.config.key;
884
- for (var i = 0; i < list.length; i++) {
885
- var o = list[i];
886
- var len = o.len - 1;
887
- delete o.len;
888
- for (var n = 0; n < len; n++) {
889
- var obj = await db.getObj(o, orderBy, key);
890
- if (obj) {
891
- await db.del(obj);
892
- }
893
- }
894
- }
895
- } else {
896
- msg = '没有重复项。';
897
- }
898
- return $.ret.bl(!msg, msg ? '去重失败!原因:' + msg : '去重成功!');
899
- };
900
-
901
- /**
902
- * 删除重复项
903
- * @param {Object} db 数据库管理器
904
- * @param {Object} query 查询条件
905
- * @return {Object} 返回执行结果
906
- */
907
- Drive.prototype.del_repeat = async function(db, query, body) {
908
- var pm = Object.assign({}, query, body);
909
- return await this.del_repeat_main(db, pm);
910
- };
911
-
912
- /**
913
- * 执行模板操作
914
- * @param {Object} params 参数对象 (object) 包含query和body
915
- * @param {Object} db 数据管理器
916
- * @return {Object} 返回执行结果
917
- */
918
- Drive.prototype.main = async function(params, db) {
919
- var {
920
- query,
921
- body
922
- } = params;
923
-
924
- var cg = this.config;
925
- var method = query.method;
926
-
927
- if (!method) {
928
- method = "get";
929
- }
930
- if (!cg.method.has("*" + method + "*")) {
931
- return $.ret.error(50001, '不支持的操作方式')
932
- }
933
- var qy = Object.assign({}, query);
934
- delete qy.method;
935
- if (this[method]) {
936
- db.method = method;
937
-
938
- // 过滤查询参数
939
- var f = cg.filter;
940
- var table = query[f.table];
941
-
942
- // 设置操作的数据表
943
- if (cg.table.has("*{0}*")) {
944
- if (table) {
945
- db.table = cg.table.replace("{0}", table);
946
- } else {
947
- return $.ret.error(30001, '表名不能为空');
948
- }
949
- } else {
950
- db.table = cg.table + '';
951
- }
952
-
953
- return await this[method](db, qy, Object.assign({}, body));
954
- } else {
955
- return $.ret.error(50001, '不支持的操作方式');
956
- }
957
- };
958
-
959
-
960
- /**
961
- * 总计
962
- * @param {Object} db 数据库管理器
963
- * @param {Object} pm 查询条件
964
- * @return {Object} 返回执行结果
965
- */
966
- Drive.prototype.sum_main = async function(db, pm) {
967
- var ret;
968
- var orderby = pm.orderby || "";
969
- delete pm.orderby;
970
- var groupby = pm.groupby;
971
- delete pm.groupby;
972
- var f = db.config.filter;
973
- var field = pm[f.field];
974
- delete pm[f.field];
975
- var query_str = this.to_where(db, pm, "get_list");
976
-
977
- if (!groupby || !field) {
978
- ret = $.ret.error(30000, "参数groupby、field是必须的,且值不能为空!");
979
- } else {
980
- var list = await db.groupSumSql(query_str, groupby, field, orderby);
981
- if (!list.length && db.error) {
982
- // $.log.error('SUM查询SQL', db.sql, db.error);
983
- ret = $.ret.body(db.error);
984
- } else {
985
- ret = $.ret.list(list);
986
- }
987
- }
988
- return ret;
989
- };
990
-
991
- /**
992
- * 总计
993
- * @param {Object} db 数据库管理器
994
- * @param {Object} query 查询条件
995
- * @return {Object} 返回执行结果
996
- */
997
- Drive.prototype.sum = async function(db, query, body) {
998
- var pm = Object.assign({}, query, body);
999
- return await this.sum_main(db, pm);
1000
- };
1001
-
1002
- /**
1003
- * 平均值
1004
- * @param {Object} db 数据库管理器
1005
- * @param {Object} pm 查询条件
1006
- * @return {Object} 返回执行结果
1007
- */
1008
- Drive.prototype.avg_main = async function(db, pm) {
1009
- var ret;
1010
- var orderby = pm.orderby || "";
1011
- delete pm.orderby;
1012
- var groupby = pm.groupby;
1013
- delete pm.groupby;
1014
- var f = db.config.filter;
1015
- var field = pm[f.field];
1016
- delete pm[f.field];
1017
- var query_str = this.to_where(db, pm, "get_list");
1018
-
1019
- if (!groupby || !field) {
1020
- ret = $.ret.error(30000, "参数groupby、field是必须的,且值不能为空!");
1021
- } else {
1022
- var list = await db.groupAvgSql(query_str, groupby, field, orderby);
1023
- if (!list.length && db.error) {
1024
- // $.log.error('AVG查询SQL', db.sql, db.error);
1025
- ret = $.ret.body(db.error);
1026
- } else {
1027
- ret = $.ret.list(list);
1028
- }
1029
- }
1030
- return ret;
1031
- };
1032
-
1033
- /**
1034
- * 平均值
1035
- * @param {Object} db 数据库管理器
1036
- * @param {Object} query 查询条件
1037
- * @return {Object} 返回执行结果
1038
- */
1039
- Drive.prototype.avg = async function(db, query, body) {
1040
- var pm = Object.assign({}, query, body);
1041
- return await this.avg_main(db, pm);
1042
- };
1043
-
1044
- /**
1045
- * 总计
1046
- * @param {Object} db 数据库管理器
1047
- * @param {Object} pm 查询条件
1048
- * @return {Object} 返回执行结果
1049
- */
1050
- Drive.prototype.count_main = async function(db, pm) {
1051
- var ret;
1052
- var orderby = pm.orderby || "";
1053
- delete pm.orderby;
1054
- var groupby = pm.groupby;
1055
- delete pm.groupby;
1056
- var f = db.config.filter;
1057
- var field = pm[f.field];
1058
- delete pm[f.field];
1059
- var query_str = this.to_where(db, pm, "get_list");
1060
-
1061
- if (!groupby || !field) {
1062
- ret = $.ret.error(30000, "参数groupby、field是必须的,且值不能为空!");
1063
- } else {
1064
- var list = await db.groupCountSql(query_str, groupby, field, orderby);
1065
- if (!list.length && db.error) {
1066
- // $.log.error('COUNT查询SQL', db.sql, db.error);
1067
- ret = $.ret.body(db.error);
1068
- } else {
1069
- ret = $.ret.list(list);
1070
- }
1071
- }
1072
- return ret;
1073
- };
1074
-
1075
- /**
1076
- * 总计
1077
- * @param {Object} db 数据库管理器
1078
- * @param {Object} query 查询条件
1079
- * @return {Object} 返回执行结果
1080
- */
1081
- Drive.prototype.count = async function(db, query, body) {
1082
- var pm = Object.assign({}, query, body);
1083
- return await this.count_main(db, pm);
1084
- };
1085
-
1086
-
1087
- module.exports = Drive;