mm_os 3.3.0 → 4.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.
Files changed (380) hide show
  1. package/LICENSE +21 -201
  2. package/README.md +491 -99
  3. package/README_EN.md +498 -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/com/event/com.json +5 -0
  28. package/{core/com → com}/event/config.tpl.json +8 -8
  29. package/com/event/drive.js +59 -0
  30. package/com/event/index.js +409 -0
  31. package/com/event/script.tpl.js +23 -0
  32. package/com/mqtt/com.json +5 -0
  33. package/{core/com → com}/mqtt/config.tpl.json +3 -5
  34. package/com/mqtt/drive.js +676 -0
  35. package/com/mqtt/index.js +822 -0
  36. package/com/mqtt/mm_mqtt.js +425 -0
  37. package/com/mqtt/script.tpl.js +723 -0
  38. package/com/nav/com.json +5 -0
  39. package/com/nav/config.tpl.json +84 -0
  40. package/com/nav/drive.js +702 -0
  41. package/com/nav/index.js +231 -0
  42. package/{core/com → com}/nav/tpl/admin_pc/page_config.vue +280 -280
  43. package/{core/com → com}/nav/tpl/admin_pc/page_config_form.vue +194 -194
  44. package/com/nav/tpl/admin_pc/page_form.vue +180 -0
  45. package/com/nav/tpl/admin_pc/page_view.vue +124 -0
  46. package/com/nav/tpl/dev_pc/page_default.vue +247 -0
  47. package/com/nav/tpl/dev_pc/page_type.vue +313 -0
  48. package/com/nav/tpl/home_pc/page_default.vue +234 -0
  49. package/com/nav/tpl/home_pc/page_form.vue +137 -0
  50. package/com/nav/tpl/home_pc/page_list.vue +234 -0
  51. package/com/nav/tpl/home_pc/page_nav.vue +221 -0
  52. package/com/nav/tpl/home_pc/page_type.vue +234 -0
  53. package/com/nav/tpl/home_pc/page_view.vue +125 -0
  54. package/com/nav/tpl/home_phone/page_channel.vue +234 -0
  55. package/com/nav/tpl/home_phone/page_default.vue +234 -0
  56. package/com/nav/tpl/home_phone/page_form.vue +137 -0
  57. package/com/nav/tpl/home_phone/page_nav.vue +237 -0
  58. package/com/nav/tpl/home_phone/page_type.vue +234 -0
  59. package/com/nav/tpl/home_phone/page_view.vue +125 -0
  60. package/com/nav/viewmodel.js +446 -0
  61. package/com/param/com.json +5 -0
  62. package/{core/com → com}/param/config.tpl.json +7 -1
  63. package/com/param/drive.js +502 -0
  64. package/com/param/index.js +155 -0
  65. package/com/param/script.tpl.js +12 -0
  66. package/com/pendant/com.json +5 -0
  67. package/{core/com/component → com/pendant}/config.tpl.json +15 -13
  68. package/com/pendant/drive.js +204 -0
  69. package/com/pendant/index.js +441 -0
  70. package/com/pendant/pendant.html +16 -0
  71. package/com/pendant/script.tpl.js +18 -0
  72. package/com/socket/com.json +5 -0
  73. package/com/socket/config.tpl.json +12 -0
  74. package/com/socket/drive.js +651 -0
  75. package/com/socket/index.js +351 -0
  76. package/com/socket/script.tpl.js +41 -0
  77. package/com/sql/com.json +5 -0
  78. package/{core/com → com}/sql/config.tpl.json +13 -9
  79. package/com/sql/drive.js +1259 -0
  80. package/com/sql/index.js +150 -0
  81. package/com/sql/script.tpl.js +47 -0
  82. package/com/static/com.json +5 -0
  83. package/{core/com → com}/static/config.tpl.json +10 -6
  84. package/com/static/drive.js +194 -0
  85. package/com/static/index.js +226 -0
  86. package/com/static/script.tpl.js +28 -0
  87. package/com/task/com.json +5 -0
  88. package/{core/com → com}/task/config.tpl.json +4 -6
  89. package/com/task/drive.js +405 -0
  90. package/com/task/index.js +148 -0
  91. package/com/task/script.tpl.js +37 -0
  92. package/com/template/com.json +5 -0
  93. package/com/template/config.tpl.json +16 -0
  94. package/com/template/drive.js +80 -0
  95. package/com/template/index.js +141 -0
  96. package/com.js +156 -0
  97. package/common/README.md +2 -0
  98. package/common/handler/msg/handler.json +22 -0
  99. package/common/handler/msg/index.js +23 -0
  100. package/common/handler/player/handler.json +22 -0
  101. package/common/handler/player/index.js +287 -0
  102. package/common/handler/user/handler.json +22 -0
  103. package/common/handler/user/index.js +23 -0
  104. package/common/middleware/web_after/index.js +29 -0
  105. package/common/middleware/web_after/middleware.json +9 -0
  106. package/common/middleware/web_base/index.js +113 -0
  107. package/common/middleware/web_base/middleware.json +19 -0
  108. package/common/middleware/web_before/index.js +33 -0
  109. package/common/middleware/web_before/middleware.json +9 -0
  110. package/common/middleware/web_cors/index.js +87 -0
  111. package/common/middleware/web_cors/middleware.json +24 -0
  112. package/common/middleware/web_error/index.js +119 -0
  113. package/common/middleware/web_error/middleware.json +18 -0
  114. package/common/middleware/web_ip/index.js +15 -0
  115. package/common/middleware/web_ip/middleware.json +14 -0
  116. package/common/middleware/web_logger/index.js +156 -0
  117. package/common/middleware/web_logger/middleware.json +14 -0
  118. package/common/middleware/web_main/index.js +24 -0
  119. package/common/middleware/web_main/middleware.json +9 -0
  120. package/common/middleware/web_static/index.js +73 -0
  121. package/common/middleware/web_static/middleware.json +54 -0
  122. package/common/middleware/web_waf/index.js +385 -0
  123. package/common/middleware/web_waf/middleware.json +13 -0
  124. package/common/model/msg/index.js +88 -0
  125. package/common/model/msg/model.json +401 -0
  126. package/common/model/player/index.js +63 -0
  127. package/common/model/player/model.json +185 -0
  128. package/common/model/user/index.js +11 -0
  129. package/common/model/user/model.json +219 -0
  130. package/core/app/config.tpl.json +67 -0
  131. package/core/app/index.js +632 -0
  132. package/core/app/script.tpl.js +52 -0
  133. package/core/channel/index.js +899 -0
  134. package/core/channel/matcher.js +585 -0
  135. package/core/com/config.tpl.json +16 -0
  136. package/core/com/index.js +74 -0
  137. package/core/com/script.tpl.js +5 -0
  138. package/core/component/component.js +42 -0
  139. package/core/component/config.tpl.json +63 -0
  140. package/core/component/index.js +273 -0
  141. package/core/component/script.tpl.js +19 -0
  142. package/core/controller/config.tpl.json +14 -0
  143. package/core/controller/index.js +373 -0
  144. package/core/controller/script.tpl.js +27 -0
  145. package/core/factory/config.tpl.json +14 -0
  146. package/core/factory/entity.js +275 -0
  147. package/core/factory/index.js +241 -0
  148. package/core/factory/script.tpl.js +16 -0
  149. package/core/game/bat/index.js +137 -0
  150. package/core/game/bat/world.js +622 -0
  151. package/core/game/config.tpl.json +16 -0
  152. package/core/game/entity_admin.js +230 -0
  153. package/core/game/index.js +186 -0
  154. package/core/handler/config.tpl.json +22 -0
  155. package/core/handler/index.js +181 -0
  156. package/core/handler/script.tpl.js +23 -0
  157. package/core/logic/config.tpl.json +14 -0
  158. package/core/logic/index.js +59 -0
  159. package/core/logic/script.tpl.js +19 -0
  160. package/core/middleware/config.tpl.json +16 -0
  161. package/core/middleware/index.js +125 -0
  162. package/core/middleware/script.tpl.js +37 -0
  163. package/core/mod/config.tpl.json +22 -0
  164. package/core/mod/index.js +130 -0
  165. package/core/mod/script.tpl.js +34 -0
  166. package/core/model/config.tpl.json +219 -0
  167. package/core/model/index.js +272 -0
  168. package/core/model/model.js +27 -0
  169. package/core/model/script.tpl.js +20 -0
  170. package/core/notifier/config.tpl.json +14 -0
  171. package/core/notifier/index.js +77 -0
  172. package/core/notifier/script.tpl.js +20 -0
  173. package/core/plugin/config.tpl.json +24 -0
  174. package/core/plugin/index.js +232 -0
  175. package/core/plugin/script.tpl.js +51 -0
  176. package/core/pusher/config.tpl.json +14 -0
  177. package/core/pusher/index.js +161 -0
  178. package/core/pusher/script.tpl.js +20 -0
  179. package/core/room/bat/index.js +170 -0
  180. package/core/room/bat/room.js +524 -0
  181. package/core/room/config.tpl.json +20 -0
  182. package/core/room/index.js +249 -0
  183. package/core/room/room.js +61 -0
  184. package/core/scene/config.tpl.json +14 -0
  185. package/core/scene/index.js +466 -0
  186. package/core/scene/loop.js +1255 -0
  187. package/core/scene/map.js +28 -0
  188. package/core/scene/script.tpl.js +22 -0
  189. package/core/sender/config.tpl.json +14 -0
  190. package/core/sender/index.js +79 -0
  191. package/core/sender/script.tpl.js +20 -0
  192. package/core/service/config.tpl.json +14 -0
  193. package/core/service/index.js +100 -0
  194. package/core/service/script.tpl.js +25 -0
  195. package/core/store/config.tpl.json +26 -0
  196. package/core/store/index.js +1755 -0
  197. package/core/store/script.tpl.js +22 -0
  198. package/core/store/sql.js +1464 -0
  199. package/core/system/config.tpl.json +18 -0
  200. package/core/system/index.js +312 -0
  201. package/core/system/script.tpl.js +77 -0
  202. package/core/view/config.tpl.json +14 -0
  203. package/core/view/index.js +91 -0
  204. package/core/view/script.tpl.js +20 -0
  205. package/core/zone/bat/index.js +725 -0
  206. package/core/zone/config.tpl.json +54 -0
  207. package/core/zone/index.js +614 -0
  208. package/core/zone/script.tpl.js +10 -0
  209. package/core/zone/zone_bat.js +136 -0
  210. package/core//345/237/272/347/261/273/346/250/241/345/235/227/346/270/205/345/215/225.md +24 -0
  211. package/index.js +17 -314
  212. package/os.js +57 -0
  213. package/package.json +60 -58
  214. package/server.js +598 -0
  215. package/README.en.md +0 -36
  216. package/conf.json +0 -3
  217. package/core/base/mqtt/index.js +0 -1107
  218. package/core/base/mqtt/lib.js +0 -40
  219. package/core/base/web/index.js +0 -243
  220. package/core/com/api/com.json +0 -4
  221. package/core/com/api/drive.js +0 -668
  222. package/core/com/api/index.js +0 -108
  223. package/core/com/api/oauth.js +0 -158
  224. package/core/com/api/script.js +0 -32
  225. package/core/com/app/README.md +0 -3
  226. package/core/com/app/com.json +0 -4
  227. package/core/com/app/config.tpl.json +0 -16
  228. package/core/com/app/drive.js +0 -309
  229. package/core/com/app/index.js +0 -211
  230. package/core/com/app/script.js +0 -155
  231. package/core/com/cmd/com.json +0 -4
  232. package/core/com/cmd/config.tpl.json +0 -66
  233. package/core/com/cmd/drive.js +0 -513
  234. package/core/com/cmd/index.js +0 -354
  235. package/core/com/cmd/old/5w2h.js +0 -54
  236. package/core/com/cmd/old/drive.js +0 -423
  237. package/core/com/cmd/script.js +0 -11
  238. package/core/com/component/README.md +0 -3
  239. package/core/com/component/com.json +0 -4
  240. package/core/com/component/component.html +0 -16
  241. package/core/com/component/drive.js +0 -197
  242. package/core/com/component/index.js +0 -312
  243. package/core/com/component/script.js +0 -18
  244. package/core/com/db/com.json +0 -4
  245. package/core/com/db/drive.js +0 -1160
  246. package/core/com/db/index.js +0 -176
  247. package/core/com/event/com.json +0 -4
  248. package/core/com/event/drive.js +0 -133
  249. package/core/com/event/index.js +0 -345
  250. package/core/com/event/script.js +0 -26
  251. package/core/com/eventer/com.js +0 -477
  252. package/core/com/eventer/com.json +0 -4
  253. package/core/com/middleware/com.js +0 -153
  254. package/core/com/middleware/com.json +0 -4
  255. package/core/com/middleware/config.tpl.json +0 -8
  256. package/core/com/middleware/script.js +0 -9
  257. package/core/com/mqtt/com.json +0 -4
  258. package/core/com/mqtt/drive.js +0 -600
  259. package/core/com/mqtt/index.js +0 -572
  260. package/core/com/mqtt/mm_mqtt.js +0 -330
  261. package/core/com/mqtt/script.js +0 -604
  262. package/core/com/msg/com.js +0 -296
  263. package/core/com/msg/com.json +0 -4
  264. package/core/com/nav/com.json +0 -4
  265. package/core/com/nav/config.tpl.json +0 -75
  266. package/core/com/nav/drive.js +0 -549
  267. package/core/com/nav/index.js +0 -182
  268. package/core/com/nav/tpl/admin_pc/page_form.vue +0 -180
  269. package/core/com/nav/tpl/admin_pc/page_view.vue +0 -124
  270. package/core/com/nav/tpl/dev_pc/page_default.vue +0 -247
  271. package/core/com/nav/tpl/dev_pc/page_type.vue +0 -313
  272. package/core/com/nav/tpl/home_pc/page_default.vue +0 -234
  273. package/core/com/nav/tpl/home_pc/page_form.vue +0 -137
  274. package/core/com/nav/tpl/home_pc/page_list.vue +0 -234
  275. package/core/com/nav/tpl/home_pc/page_nav.vue +0 -221
  276. package/core/com/nav/tpl/home_pc/page_type.vue +0 -234
  277. package/core/com/nav/tpl/home_pc/page_view.vue +0 -125
  278. package/core/com/nav/tpl/home_phone/page_channel.vue +0 -234
  279. package/core/com/nav/tpl/home_phone/page_default.vue +0 -234
  280. package/core/com/nav/tpl/home_phone/page_form.vue +0 -137
  281. package/core/com/nav/tpl/home_phone/page_nav.vue +0 -237
  282. package/core/com/nav/tpl/home_phone/page_type.vue +0 -234
  283. package/core/com/nav/tpl/home_phone/page_view.vue +0 -125
  284. package/core/com/nav/viewmodel.js +0 -296
  285. package/core/com/param/drive.js +0 -366
  286. package/core/com/param/index.js +0 -80
  287. package/core/com/param/script.js +0 -12
  288. package/core/com/param/test.js +0 -98
  289. package/core/com/plugin/README.md +0 -3
  290. package/core/com/plugin/com.json +0 -4
  291. package/core/com/plugin/config.tpl.json +0 -26
  292. package/core/com/plugin/drive.js +0 -536
  293. package/core/com/plugin/index.js +0 -259
  294. package/core/com/plugin/script.js +0 -213
  295. package/core/com/rpc/com.json +0 -4
  296. package/core/com/rpc/drive.js +0 -160
  297. package/core/com/rpc/index.js +0 -87
  298. package/core/com/rpc/rpc.js +0 -118
  299. package/core/com/socket/com.json +0 -4
  300. package/core/com/socket/config.tpl.json +0 -14
  301. package/core/com/socket/drive.js +0 -403
  302. package/core/com/socket/index.js +0 -62
  303. package/core/com/socket/script.js +0 -42
  304. package/core/com/sql/drive.js +0 -1087
  305. package/core/com/sql/index.js +0 -83
  306. package/core/com/sql/script.js +0 -48
  307. package/core/com/static/com.json +0 -4
  308. package/core/com/static/drive.js +0 -220
  309. package/core/com/static/index.js +0 -149
  310. package/core/com/static/script.js +0 -28
  311. package/core/com/task/com.json +0 -4
  312. package/core/com/task/drive.js +0 -403
  313. package/core/com/task/index.js +0 -110
  314. package/core/com/task/script.js +0 -37
  315. package/core/com/timer/com.js +0 -217
  316. package/core/com/timer/com.json +0 -4
  317. package/core/com/tpl/com.js +0 -19
  318. package/core/com/tpl/com.json +0 -4
  319. package/lib/actions.js +0 -50
  320. package/lib/base.js +0 -361
  321. package/lib/com.js +0 -29
  322. package/lib/ref.js +0 -121
  323. package/middleware/mqtt_base/index.js +0 -10
  324. package/middleware/mqtt_base/middleware.json +0 -10
  325. package/middleware/performance/index.js +0 -151
  326. package/middleware/performance/middleware.json +0 -16
  327. package/middleware/security_audit/index.js +0 -549
  328. package/middleware/security_audit/middleware.json +0 -48
  329. package/middleware/security_headers/index.js +0 -487
  330. package/middleware/security_headers/middleware.json +0 -45
  331. package/middleware/waf/index.js +0 -348
  332. package/middleware/waf/middleware.json +0 -10
  333. package/middleware/waf_ddos/index.js +0 -520
  334. package/middleware/waf_ddos/middleware.json +0 -38
  335. package/middleware/waf_ip/index.js +0 -379
  336. package/middleware/waf_ip/middleware.json +0 -49
  337. package/middleware/waf_xss/index.js +0 -269
  338. package/middleware/waf_xss/middleware.json +0 -18
  339. package/middleware/web_after/index.js +0 -33
  340. package/middleware/web_after/middleware.json +0 -9
  341. package/middleware/web_base/index.js +0 -90
  342. package/middleware/web_base/middleware.json +0 -9
  343. package/middleware/web_before/index.js +0 -27
  344. package/middleware/web_before/middleware.json +0 -9
  345. package/middleware/web_check/index.js +0 -28
  346. package/middleware/web_check/middleware.json +0 -9
  347. package/middleware/web_main/index.js +0 -28
  348. package/middleware/web_main/middleware.json +0 -9
  349. package/middleware/web_proxy/index.js +0 -37
  350. package/middleware/web_proxy/middleware.json +0 -9
  351. package/middleware/web_render/index.js +0 -87
  352. package/middleware/web_render/middleware.json +0 -9
  353. package/middleware/web_socket/index.js +0 -34
  354. package/middleware/web_socket/middleware.json +0 -9
  355. package/middleware/web_static/index.js +0 -115
  356. package/middleware/web_static/middleware.json +0 -9
  357. /package/{core/com → com}/api/README.md +0 -0
  358. /package/{core/com → com}/db/README.md +0 -0
  359. /package/{core/com → com}/event/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
@@ -0,0 +1,723 @@
1
+ /**
2
+ * 查询个人记录
3
+ * @param {string} clientid 客户端ID
4
+ * @param {object} param 查询参数
5
+ * @returns {object} 执行结果
6
+ */
7
+ exports.getLog = async function(clientid, param) {
8
+ var res = await this.push('GetRecordsByPicOrID', clientid, param);
9
+ return res;
10
+ };
11
+
12
+ /**
13
+ * 考勤打卡
14
+ * @param {string} clientid 客户端ID
15
+ * @param {object} uuid 用户唯一标识
16
+ * @param {string} avatar base64头像
17
+ * @returns {object} 执行结果
18
+ */
19
+ exports.signIn = async function(clientid, uuid, avatar) {
20
+ var res = await this.push('PullRecordOnlyPic', clientid, {
21
+ 'personID': uuid,
22
+ 'picinfo': avatar
23
+ });
24
+
25
+ if (!res || res.result == 'fail') {
26
+ return '打卡失败!';
27
+ }
28
+ };
29
+
30
+ /**
31
+ * 下发二维码(没用到)
32
+ * @param {string} clientid 客户端ID
33
+ * @param {object} param 二维码参数
34
+ * @returns {object} 执行结果
35
+ */
36
+ exports.pushQrcode = function(clientid, param) {
37
+ return this.push('ShowQRCode', clientid, param);
38
+ };
39
+
40
+ /**
41
+ * 以图搜人
42
+ * @param {string} clientid 客户端ID
43
+ * @param {object} avatar 人脸照片
44
+ * @returns {object} 执行结果
45
+ */
46
+ exports.getMemberPic = async function(clientid, avatar) {
47
+ var res = await this.push('GetPictureSearch', clientid, {
48
+ 'facesluiceId': clientid,
49
+ 'MaxSimilarity': 80,
50
+ 'MaxNum': 1,
51
+ 'picinfo': avatar
52
+ });
53
+ var user;
54
+ if (res) {
55
+ if (res.result == 'fail') {
56
+
57
+ } else {
58
+ var u = res.SearchInfo[0];
59
+ var name = u.name || u.persionName;
60
+ var custom_id = u.customId.trim();
61
+ var phone = (u.telnum || '').trim();
62
+ var idcard = (u.idCard || '').trim();
63
+ user = {
64
+ name,
65
+ custom_id,
66
+ phone,
67
+ idcard
68
+ };
69
+ }
70
+ }
71
+ return user;
72
+ };
73
+
74
+ /**
75
+ * 远程开门
76
+ * @param {string} clientid 客户端ID
77
+ * @param {string} uuid 用户唯一标识
78
+ * @param {boolean} pass 是否可通行 true为是
79
+ * @param {string} tip 提示信息
80
+ * @returns {object} 执行结果
81
+ */
82
+ exports.unlock = async function(clientid, uuid = '0', pass = false, tip = '没有访问权限') {
83
+ var res = await this.push('Unlock', clientid, {
84
+ 'uid': uuid,
85
+ // 0不开门,1开门
86
+ 'openDoor': pass ? '1' : '0',
87
+ 'showInfo': tip
88
+ });
89
+
90
+ if (!res || res.result == 'fail') {
91
+ return '非内部人员!';
92
+ }
93
+ };
94
+
95
+
96
+ /**
97
+ * 远程锁门(没用到)
98
+ * @param {string} clientid 客户端ID
99
+ * @param {string} uuid 用户唯一标识
100
+ * @param {boolean} pass 是否可通行 true为是
101
+ * @param {string} tip 提示信息
102
+ * @returns {object} 执行结果
103
+ */
104
+ exports.lock = async function(clientid, uuid = '0', pass = false, tip = '没有访问权限') {
105
+ var res = await this.push('Lock', clientid, {
106
+ 'uid': uuid,
107
+ 'showInfo': tip
108
+ });
109
+
110
+ if (!res || res.result == 'fail') {
111
+ return '已锁门!';
112
+ }
113
+ };
114
+
115
+ /**
116
+ * 删除成员
117
+ * @param {string} clientid 客户端ID
118
+ * @param {string} uuid 用户唯一标识
119
+ * @returns {object} 执行结果
120
+ */
121
+ exports.delMember = async function(clientid, uuid) {
122
+ var res = await this.push('DeletePersons', clientid, {
123
+ 'customId': uuid
124
+ });
125
+
126
+ return res;
127
+ };
128
+
129
+ /**
130
+ * 批量删除成员
131
+ * @param {string} clientid 客户端ID
132
+ * @param {object} arr 成员列表
133
+ * @param {number} longtime 超时回馈
134
+ * @returns {object} 执行结果
135
+ */
136
+ exports.delMemberBatch = async function(clientid, arr, longtime) {
137
+ var res = await this.push('DeletePersons', clientid, {
138
+ begin: 'BeginFlag',
139
+ end: 'EndFlag',
140
+ person_num: arr.length.toString(),
141
+ customId: arr
142
+ }, longtime);
143
+
144
+ var result;
145
+ var error = 0;
146
+ var success = 0;
147
+ var error_info = [];
148
+ var success_info = [];
149
+
150
+ if (res) {
151
+ if (res.result == 'ok') {
152
+ var now = new Date().toStr('yyyy-MM-dd hh:mm:ss');
153
+ error = number(res.DelErrNum);
154
+ success = number(res.DelSucNum);
155
+ error_info = res.DelErrInfo.map((o) => {
156
+ o.time_create = now;
157
+ return o;
158
+ });
159
+ success_info = res.DelSucInfo.map((o) => {
160
+ o.time_create = now;
161
+ return o;
162
+ });
163
+ result = res.result;
164
+ } else if (res.detail && res.detail.indexOf('busy') === -1) {
165
+ result = 'fail';
166
+ }
167
+ }
168
+ return {
169
+ error,
170
+ success,
171
+ error_info,
172
+ success_info,
173
+ result
174
+ };
175
+
176
+ return;
177
+ };
178
+
179
+ /**
180
+ * 重启设备
181
+ * @param {string} clientid 设备sn
182
+ * @returns {object} 执行结果
183
+ */
184
+ exports.rebootDevice = async function(clientid) {
185
+ var res = await this.push('RebootDevice', clientid, {});
186
+ if (!res || res.result == 'ok') {
187
+ return;
188
+ }
189
+ return '重启设备失败';
190
+ };
191
+
192
+ /**
193
+ * 设置设备时间
194
+ * @param {string} clientid 设备sn
195
+ * @param {string} datetime 日期时间 格式为yyyy-MM-dd hh:mm:ss
196
+ * @returns {object} 执行结果
197
+ */
198
+ exports.setDeviceTime = async function(clientid, datetime) {
199
+ var res = await this.push('SetSysTime', clientid, {
200
+ 'SysTime': datetime.replace(' ', 'T')
201
+ });
202
+ if (!res || res.result == 'ok') {
203
+ return;
204
+ }
205
+ return '重置时间失败';
206
+ };
207
+
208
+ /**
209
+ * 恢复出厂设置
210
+ * @param {string} clientid 设备sn
211
+ * @param {boolean} record 是否恢复控制记录,true为恢复
212
+ * @param {boolean} member 是否恢复成员,true为恢复
213
+ * @param {boolean} log 是否恢复请求日志,true为恢复
214
+ * @returns {object} 执行结果
215
+ */
216
+ exports.resetDevice = async function(clientid, record = true, member = false, log = true) {
217
+ var res = await this.push('SetFactoryDefault', clientid, {
218
+ defalt_record: record ? '1' : '0',
219
+ defalt_person: member ? '1' : '0',
220
+ defalt_log: log ? '1' : '0'
221
+ });
222
+
223
+ if (!res || res.result == 'ok') {
224
+ return;
225
+ }
226
+ return '恢复出厂设置失败';
227
+ };
228
+
229
+ /**
230
+ * 查询下发进度
231
+ * @param {string} clientid 设备sn
232
+ * @param {string} mode 查询方式 默认为更新
233
+ * @returns {object} 执行结果
234
+ */
235
+ exports.getProgress = async function(clientid, mode = 'update') {
236
+ var type = '';
237
+ if (mode == 'update') {
238
+ type = 'EditPersonsNew';
239
+ } else {
240
+ type = 'DeletePersons';
241
+ }
242
+ var res = await this.push('QueryProgress', clientid, {
243
+ 'QueryType': type
244
+ });
245
+ if (res) {
246
+ if (res.Status !== '0') {
247
+ return 1;
248
+ } else {
249
+ return 0;
250
+ }
251
+ }
252
+ return -1;
253
+ };
254
+
255
+ /**
256
+ * 考勤补卡
257
+ * @param {string} clientid 设备sn
258
+ * @param {string} uuid 用户唯一标识
259
+ * @param {string} time 时间
260
+ * @param {string} avatar 头像
261
+ * @returns {object} 执行结果
262
+ */
263
+ exports.replacement = async function(clientid, uuid, time, avatar) {
264
+ var res = await this.push('PullRecordOnlyPic', clientid, {
265
+ 'personID': uuid,
266
+ 'time': time,
267
+ 'picinfo': avatar
268
+ });
269
+
270
+ if (!res || res.result == 'fail') {
271
+ return '补卡失败!';
272
+ }
273
+ return;
274
+ };
275
+
276
+ /**
277
+ * 查询人员名单
278
+ * @param {string} clientid 客户端ID
279
+ * @param {number} longtime 超时回馈
280
+ * @returns {object} 执行结果
281
+ */
282
+ exports.getMember = function(clientid, longtime = 0) {
283
+ return this.push('QueryPerson', clientid, longtime);
284
+ };
285
+
286
+ /**
287
+ * 查询人员名单
288
+ * @param {string} clientid 客户端ID
289
+ * @param {string} uuid 用户唯一标识
290
+ * @param {number} longtime 超时回馈
291
+ * @returns {object} 人员信息
292
+ */
293
+ exports.getMemberOne = function(clientid, uuid, longtime = 0) {
294
+ return this.push('QueryPerson', clientid, {
295
+ 'personId': uuid
296
+ }, longtime);
297
+ };
298
+
299
+ /**
300
+ * 格式化时间
301
+ * @param {*} time 时间值
302
+ * @returns {string} 格式化后的时间字符串
303
+ */
304
+ exports._formatTime = function(time) {
305
+ if (typeof(time) == 'object') {
306
+ return time.toStr('yyyy-MM-dd hh:mm:ss');
307
+ } else {
308
+ return time.toTime().toStr('yyyy-MM-dd hh:mm:ss');
309
+ }
310
+ };
311
+
312
+ /**
313
+ * 检查时间有效性
314
+ * @param {*} time_end 结束时间
315
+ * @returns {boolean} 是否有效
316
+ */
317
+ exports._isTimeValid = function(time_end) {
318
+ if (!time_end) {
319
+ return false;
320
+ }
321
+ var end_time = time_end.toTime();
322
+ return end_time > '2021-01-01 00:00:00'.toTime() && end_time <= '2038-01-01 00:00:00'.toTime();
323
+ };
324
+
325
+ /**
326
+ * 设置时间有效性
327
+ * @param {object} obj 目标对象
328
+ * @param {object} m 成员对象
329
+ * @returns {object} 修改后的对象
330
+ */
331
+ exports._setTimeValidity = function(obj, m) {
332
+ var result = { ...obj };
333
+ if (this._isTimeValid(m.time_valid_end)) {
334
+ result.cardValidBegin = this._formatTime(m.time_valid_start);
335
+ result.cardValidEnd = this._formatTime(m.time_valid_end);
336
+ result.tempCardType = 1;
337
+ } else {
338
+ result.tempCardType = 0;
339
+ }
340
+ return result;
341
+ };
342
+
343
+ /**
344
+ * 创建基础成员对象
345
+ * @param {object} m 原始的成员对象
346
+ * @returns {object} 基础成员对象
347
+ */
348
+ exports._createBaseMember = function(m) {
349
+ var nfc = m.nfc || '';
350
+ return {
351
+ 'customId': m.customId,
352
+ 'name': m.name,
353
+ 'native': m.place || '',
354
+ 'nation': m.nation || '',
355
+ 'address': m.address || '',
356
+ 'idCard': m.idcard || '',
357
+ 'gender': m.sex - 1,
358
+ 'phone': m.phone,
359
+ 'birthday': m.birthday,
360
+ 'cardType2': 2,
361
+ 'cardNum2': nfc,
362
+ 'RFCardMode': 0,
363
+ 'RFIDCard': nfc,
364
+ 'notes': '',
365
+ 'personType': m.state == 4 ? 1 : 0,
366
+ 'cardType': 0,
367
+ 'picURI': this.fullUrl(m.avatar)
368
+ };
369
+ };
370
+
371
+ /**
372
+ * 成员模型
373
+ * @param {object} m 原始的成员对象
374
+ * @returns {object} 转换后的成员对象
375
+ */
376
+ exports.memberModelOut = function(m) {
377
+ var obj = this._createBaseMember(m);
378
+ this._setTimeValidity(obj, m);
379
+ return obj;
380
+ };
381
+
382
+ /**
383
+ * 添加时间戳到信息列表
384
+ * @param {Array} list 信息列表
385
+ * @param {string} now 当前时间
386
+ * @returns {Array} 处理后的列表
387
+ */
388
+ exports._addTimeToList = function(list, now) {
389
+ return list.map((o) => {
390
+ o.time_create = now;
391
+ return o;
392
+ });
393
+ };
394
+
395
+ /**
396
+ * 解析批量操作结果
397
+ * @param {object} res 响应结果
398
+ * @returns {object} 解析后的结果
399
+ */
400
+ exports._parseBatch = function(res) {
401
+ var result;
402
+ var error = 0;
403
+ var success = 0;
404
+ var error_info = [];
405
+ var success_info = [];
406
+
407
+ if (res) {
408
+ if (res.result == 'ok') {
409
+ var now = new Date().toStr('yyyy-MM-dd hh:mm:ss');
410
+ error = number(res.AddErrNum);
411
+ success = number(res.AddSucNum);
412
+ error_info = this._addTimeToList(res.AddErrInfo, now);
413
+ success_info = this._addTimeToList(res.AddSucInfo, now);
414
+ result = res.result;
415
+ } else if (res.detail && res.detail.indexOf('busy') === -1) {
416
+ result = 'fail';
417
+ }
418
+ }
419
+
420
+ return {
421
+ error,
422
+ success,
423
+ error_info,
424
+ success_info,
425
+ result
426
+ };
427
+ };
428
+
429
+ /**
430
+ * 批量下发人员名单
431
+ * @param {string} clientid 客户端ID
432
+ * @param {Array} list 人员名单
433
+ * @param {number} longtime 超时回馈
434
+ * @returns {object} 执行结果
435
+ */
436
+ exports.updateMemberBatch = async function(clientid, list, longtime = 180) {
437
+ var res = await this.pushS(clientid, {
438
+ 'messageId': this.getMsgid('EditPersonsNew'),
439
+ 'DataBegin': 'BeginFlag',
440
+ 'DataEnd': 'EndFlag',
441
+ 'operator': 'EditPersonsNew',
442
+ 'PersonNum': list.length,
443
+ 'info': list.map((o) => {
444
+ return this.memberModelOut(o);
445
+ })
446
+ }, longtime);
447
+
448
+ return this._parseBatch(res);
449
+ };
450
+
451
+ /**
452
+ * 下发人员名单
453
+ * @param {string} clientid 设备ID
454
+ * @param {object} user 人员信息
455
+ * @param {number} longtime 超时回馈
456
+ * @returns {object} 执行结果
457
+ */
458
+ exports.updateMember = function(clientid, user, longtime = 0) {
459
+ return this.pushS(clientid, {
460
+ 'messageId': this.getMsgid('EditPerson'),
461
+ 'DataBegin': 'BeginFlag',
462
+ 'DataEnd': 'EndFlag',
463
+ 'method': 'EditPerson',
464
+ 'info': this.memberModelOut(user)
465
+ }, longtime);
466
+ };
467
+
468
+ /**
469
+ * 初始化函数, 用于定义开放给前端的函数
470
+ */
471
+ exports.init = function() {
472
+ var m = this.methods;
473
+
474
+ _regBasicMethods(m, this);
475
+ _regDeviceMethods(m, this);
476
+ _regRecordMethods(m, this);
477
+ };
478
+
479
+ /**
480
+ * 注册基本方法
481
+ * @param {object} m 方法对象
482
+ * @param {object} self 实例
483
+ * @private
484
+ */
485
+ var _regBasicMethods = function(m, self) {
486
+ m['HeartBeat'] = function(clientid, params) {
487
+ if (!self.drives[clientid]) {
488
+ self.drives[clientid] = {};
489
+ }
490
+ self.drives[clientid].online = 1;
491
+ self.drives[clientid].time_last = new Date().getTime();
492
+ // console.log("心跳", clientid, self.drives[clientid]);
493
+ };
494
+
495
+ /**
496
+ * 离线通知
497
+ * @param {string} clientid 设备sn
498
+ * @param {object} params 设备信息
499
+ */
500
+ m['Offline'] = async function(clientid, params) {
501
+ self.updateOnline(clientid, 0);
502
+ // console.log("离线", clientid, self.drives[clientid]);
503
+ };
504
+
505
+ /**
506
+ * 在线通知
507
+ * @param {string} clientid 设备sn
508
+ * @param {object} params 设备信息
509
+ * @returns {object} 执行结果
510
+ */
511
+ m['Online'] = async function(clientid, params) {
512
+ await self.updateOnline(clientid, 1, params.ip);
513
+ return {
514
+ 'facesluiceId': clientid,
515
+ 'result': 'ok',
516
+ 'detail': ''
517
+ };
518
+ };
519
+ };
520
+
521
+ /**
522
+ * 注册设备方法
523
+ * @param {object} m 方法对象
524
+ * @param {object} self 实例
525
+ * @private
526
+ */
527
+ var _regDeviceMethods = function(m, self) {
528
+ /**
529
+ * 更新人体生命体征,如温度、湿度、位置、
530
+ * @param {string} clientid 设备sn
531
+ * @param {object} params 设备信息
532
+ */
533
+ m['life'] = async function(clientid, params) {
534
+ self.updateLife(clientid, {
535
+ // 心率
536
+ heart_rate: 0,
537
+ // 睡眠状态 是深度睡眠还是浅睡眠
538
+ sleep: 0,
539
+ // 血氧饱和度
540
+ oxygen: 0,
541
+ // 行走步数
542
+ step: 0,
543
+ // 压力
544
+ pressure: 0,
545
+ // 时间戳
546
+ timestamp: 0,
547
+ // GPS横坐标,保留生命体脱下设备时的最后位置
548
+ gps_x: 0,
549
+ // GPS纵坐标,保留生命体脱下设备时的最后位置
550
+ gps_y: 0
551
+ });
552
+ // console.log("离线", clientid, _this.drives[clientid]);
553
+ };
554
+
555
+ /**
556
+ * 更新设备信息,如温度、湿度、位置
557
+ * @param {string} clientid 设备sn
558
+ * @param {object} params 设备信息
559
+ */
560
+ m['info'] = async function(clientid, params) {
561
+ self.updateDeviceInfo(clientid, {
562
+ // 温度
563
+ temperature: 0,
564
+ // 湿度
565
+ humidity: 0,
566
+ // 氧气
567
+ oxygen: 0,
568
+ // 二氧化碳
569
+ carbon_dioxide: 0,
570
+ // 光照强度
571
+ light: 0,
572
+ // 烟雾浓度
573
+ smoke: 0,
574
+ // 压力
575
+ pressure: 0,
576
+ // 光敏
577
+ photosensitive: 0,
578
+ // 声波
579
+ acoustic_wave: 0,
580
+ // 磁力
581
+ magnetism: 0,
582
+ // 火焰
583
+ flame: 0,
584
+ // 震动
585
+ vibrate: 0,
586
+ // 时间戳
587
+ timestamp: 0,
588
+ // GPS横坐标
589
+ gps_x: 0,
590
+ // GPS纵坐标
591
+ gps_y: 0
592
+ });
593
+ // console.log("离线", clientid, _this.drives[clientid]);
594
+ };
595
+ };
596
+
597
+ /**
598
+ * 获取记录类型
599
+ * @param {string} otype 操作类型
600
+ * @returns {number} 记录类型
601
+ * @private
602
+ */
603
+ var _getRecordType = function(otype) {
604
+ var typeMap = {
605
+ '7': 2, '27': 2,
606
+ '47': 3, '48': 3, '55': 3, '56': 3, '57': 3,
607
+ '21': 4, '22': 4, '24': 4, '25': 4
608
+ };
609
+ return typeMap[otype] || 1;
610
+ };
611
+
612
+ /**
613
+ * 发送确认消息
614
+ * @param {string} clientid 设备sn
615
+ * @param {string} record_id 记录ID
616
+ * @param {object} self 实例
617
+ * @private
618
+ */
619
+ var _sendAck = function(clientid, record_id, self) {
620
+ self.send(`mqtt/face/${clientid}`, {
621
+ 'messageId': self.getMsgid('PushAck'),
622
+ 'operator': 'PushAck',
623
+ 'info': {
624
+ 'PushAckType': '2',
625
+ 'SnapOrRecordID': record_id
626
+ }
627
+ });
628
+ };
629
+
630
+ /**
631
+ * 获取 NFC
632
+ * @param {object} params 上报参数
633
+ * @returns {string} NFC
634
+ * @private
635
+ */
636
+ var _getNfc = function(params) {
637
+ var nfc = (params.cardNum2 || params.RFIDCard || '').trim();
638
+ return nfc == '0' ? '' : nfc;
639
+ };
640
+
641
+ /**
642
+ * 格式化时间
643
+ * @param {string|object} time 时间
644
+ * @returns {string} 格式化后的时间
645
+ * @private
646
+ */
647
+ var _formatTime = function(time) {
648
+ if (typeof(time) == 'object') {
649
+ return time.toStr('yyyy-MM-dd hh:mm:ss');
650
+ }
651
+ return time.toTime().toStr('yyyy-MM-dd hh:mm:ss');
652
+ };
653
+
654
+ /**
655
+ * 创建日志对象
656
+ * @param {object} params 上报参数
657
+ * @param {string} clientid 设备sn
658
+ * @param {number} type 记录类型
659
+ * @returns {object} 日志对象
660
+ * @private
661
+ */
662
+ var _createLog = function(params, clientid, type) {
663
+ var name = params.persionName || params.name;
664
+ if (!name) {
665
+ return null;
666
+ }
667
+ return {
668
+ custom_id: params.customId.trim(),
669
+ name,
670
+ phone: (params.telnum || '').trim(),
671
+ idcard: (params.idCard || '').trim(),
672
+ nfc: _getNfc(params),
673
+ clientid,
674
+ type,
675
+ person_type: params.PersonType == '1' ? 2 : 1,
676
+ record_type: params.RecordType ? number(params.RecordType) + 1 : 1,
677
+ action: '刷脸验证',
678
+ time: _formatTime(params.time),
679
+ avatar: params.pic || ''
680
+ };
681
+ };
682
+
683
+ /**
684
+ * 注册记录方法
685
+ * @param {object} m 方法对象
686
+ * @param {object} self 实例
687
+ * @private
688
+ */
689
+ var _regRecordMethods = function(m, self) {
690
+ /**
691
+ * 上报
692
+ * @param {string} clientid 设备sn
693
+ * @param {object} params 上报参数
694
+ * @param {object} msg 上报消息
695
+ * @param {string} id 消息ID
696
+ */
697
+ m['RecPush'] = async function(clientid, params, msg, id) {
698
+ _sendAck(clientid, params.RecordID, self);
699
+
700
+ var type = _getRecordType(params.otype);
701
+ if (type == 2) {
702
+ return;
703
+ }
704
+
705
+ var log = _createLog(params, clientid, type);
706
+ if (log) {
707
+ $.server.execLog(clientid, log);
708
+ }
709
+ };
710
+
711
+ m['QRCodePush'] = async function(clientid, params, msg, id) {
712
+ var qrcode = params.QRCodeInfo;
713
+ var {
714
+ uuid,
715
+ pass,
716
+ tip,
717
+ device
718
+ } = await $.server.execQrcode(clientid, qrcode);
719
+ if (device && device.online) {
720
+ await self.unlock(clientid, uuid, pass, tip);
721
+ }
722
+ };
723
+ };
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "Nav",
3
+ "title": "导航",
4
+ "state": 1
5
+ }