mm_os 2.9.1 → 2.9.3

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 (241) hide show
  1. package/cache/route/main/config.json +1 -0
  2. package/cache/sys/app_admin/config.json +1 -0
  3. package/cache/sys/mqtt_engine/config.json +1 -0
  4. package/cache/sys/user/config.json +1 -0
  5. package/core/com/api/drive.js +9 -89
  6. package/core/com/api/index.js +3 -31
  7. package/core/com/cmd/drive.js +10 -1
  8. package/core/com/cmd/index.js +15 -1
  9. package/core/com/component/drive.js +1 -1
  10. package/core/com/component/index.js +16 -12
  11. package/core/com/db/drive.js +1 -1
  12. package/core/com/db/index.js +15 -17
  13. package/core/com/event/drive.js +3 -1
  14. package/core/com/event/index.js +74 -61
  15. package/core/com/eventer/com.js +2 -2
  16. package/core/com/middleware/com.js +41 -16
  17. package/core/com/mqtt/drive.js +4 -3
  18. package/core/com/mqtt/index.js +10 -8
  19. package/core/com/nav/drive.js +1 -19
  20. package/core/com/nav/index.js +1 -1
  21. package/core/com/param/drive.js +1 -1
  22. package/core/com/param/index.js +1 -27
  23. package/core/com/plugin/drive.js +18 -19
  24. package/core/com/plugin/index.js +16 -21
  25. package/core/com/plugin/script.js +109 -58
  26. package/core/com/rpc/com.json +4 -0
  27. package/core/com/rpc/drive.js +160 -0
  28. package/core/com/rpc/index.js +87 -0
  29. package/core/com/socket/drive.js +0 -1
  30. package/core/com/socket/index.js +5 -15
  31. package/core/com/sql/drive.js +1 -1
  32. package/core/com/sql/index.js +4 -31
  33. package/core/com/static/drive.js +13 -54
  34. package/core/com/static/index.js +14 -6
  35. package/core/com/task/drive.js +7 -2
  36. package/core/com/task/index.js +16 -36
  37. package/core/com/tpl/com.js +2 -2
  38. package/demo/app/dev/event_api/manage/event.json +19 -0
  39. package/demo/app/dev/event_api/manage/main.js +26 -0
  40. package/demo/app/dev/plugin/doc/static/api_list.html +144 -0
  41. package/demo/app/dev/plugin/doc/static/api_view.html +692 -0
  42. package/demo/app/dev/plugin/doc/static/index.html +138 -0
  43. package/demo/app/dev/plugin/doc/static/request_test.html +311 -0
  44. package/demo/app/dev/plugin/doc/static/static.js +28 -0
  45. package/demo/app/dev/plugin/doc/static/static.json +20 -0
  46. package/demo/app/dev/plugin/main/api_dev_client/app/api.json +13 -0
  47. package/demo/app/dev/plugin/main/api_dev_client/app/index.js +13 -0
  48. package/demo/app/dev/plugin/main/api_dev_client/app/param.json +147 -0
  49. package/demo/app/dev/plugin/main/api_dev_client/app/sql.json +28 -0
  50. package/demo/app/dev/plugin/main/api_dev_client/auto/api.json +37 -0
  51. package/demo/app/dev/plugin/main/api_dev_client/auto/auto_db.js +70 -0
  52. package/demo/app/dev/plugin/main/api_dev_client/auto/auto_file.js +32 -0
  53. package/demo/app/dev/plugin/main/api_dev_client/auto/index.js +51 -0
  54. package/demo/app/dev/plugin/main/api_dev_client/auto/param.json +51 -0
  55. package/demo/app/dev/plugin/main/api_dev_client/db/api.json +10 -0
  56. package/demo/app/dev/plugin/main/api_dev_client/db/index.js +69 -0
  57. package/demo/app/dev/plugin/main/api_dev_client/db/param.json +31 -0
  58. package/demo/app/dev/plugin/main/api_dev_client/dict/api.json +10 -0
  59. package/demo/app/dev/plugin/main/api_dev_client/dict/index.js +49 -0
  60. package/demo/app/dev/plugin/main/api_dev_client/dict/param.json +29 -0
  61. package/demo/app/dev/plugin/main/api_dev_client/help/api.json +10 -0
  62. package/demo/app/dev/plugin/main/api_dev_client/help/index.js +14 -0
  63. package/demo/app/dev/plugin/main/api_dev_client/help/param.json +31 -0
  64. package/demo/app/dev/plugin/main/api_dev_client/nav/api.json +10 -0
  65. package/demo/app/dev/plugin/main/api_dev_client/nav/index.js +36 -0
  66. package/demo/app/dev/plugin/main/api_dev_client/nav/param.json +36 -0
  67. package/demo/app/dev/plugin/main/api_dev_client/plugin/api.json +10 -0
  68. package/demo/app/dev/plugin/main/api_dev_client/plugin/index.js +13 -0
  69. package/demo/app/dev/plugin/main/api_dev_client/plugin/param.json +31 -0
  70. package/demo/app/dev/plugin/main/api_dev_client/source/api.json +10 -0
  71. package/demo/app/dev/plugin/main/api_dev_client/source/index.js +14 -0
  72. package/demo/app/dev/plugin/main/api_dev_client/source/param.json +31 -0
  73. package/demo/app/dev/plugin/main/api_dev_client/sql/api.json +10 -0
  74. package/demo/app/dev/plugin/main/api_dev_client/sql/index.js +13 -0
  75. package/demo/app/dev/plugin/main/api_dev_client/sql/param.json +31 -0
  76. package/demo/app/dev/plugin/main/api_dev_client/task/api.json +16 -0
  77. package/demo/app/dev/plugin/main/api_dev_client/task/index.js +13 -0
  78. package/demo/app/dev/plugin/main/api_dev_client/task/param.json +31 -0
  79. package/demo/app/dev/plugin/main/api_dev_client/translate/api.json +39 -0
  80. package/demo/app/dev/plugin/main/api_dev_client/translate/index.js +43 -0
  81. package/demo/app/dev/plugin/main/api_dev_client/translate/param.json +130 -0
  82. package/demo/app/dev/plugin/main/api_dev_client/translate/sql.json +62 -0
  83. package/demo/app/dev/plugin/main/api_dev_client/ui/api.json +10 -0
  84. package/demo/app/dev/plugin/main/api_dev_client/ui/index.js +146 -0
  85. package/demo/app/dev/plugin/main/api_dev_client/ui/param.json +31 -0
  86. package/demo/app/dev/plugin/main/api_dev_client/view/api.json +10 -0
  87. package/demo/app/dev/plugin/main/api_dev_client/view/index.js +100 -0
  88. package/demo/app/dev/plugin/main/api_dev_client/view/param.json +29 -0
  89. package/demo/app/dev/plugin/main/api_dev_client/view/tpl/block/nav.vue +12 -0
  90. package/demo/app/dev/plugin/main/api_dev_client/view/tpl/block/obj.vue +12 -0
  91. package/demo/app/dev/plugin/main/api_dev_client/view/tpl/block/post.vue +12 -0
  92. package/demo/app/dev/plugin/main/api_dev_client/view/tpl/block/query.vue +12 -0
  93. package/demo/app/dev/plugin/main/api_dev_client/view/tpl/page/edit.vue +39 -0
  94. package/demo/app/dev/plugin/main/api_dev_client/view/tpl/page/list.vue +12 -0
  95. package/demo/app/dev/plugin/main/api_dev_client/view/tpl/page/search.vue +12 -0
  96. package/demo/app/dev/plugin/main/api_dev_client/view/tpl/page/table.vue +12 -0
  97. package/demo/app/dev/plugin/main/api_dev_client/view/tpl/page/type.vue +12 -0
  98. package/demo/app/dev/plugin/main/api_dev_client/view/tpl/page/view.vue +56 -0
  99. package/demo/app/dev/plugin/main/api_dev_client/view/tpl/view.json +48 -0
  100. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/api.json +37 -0
  101. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/auto_db.js +120 -0
  102. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/copy/copy.js +101 -0
  103. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/copy/copy_framework.js +118 -0
  104. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/copy/copy_template.js +78 -0
  105. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/copy_file.js +97 -0
  106. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create/common.js +198 -0
  107. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create/django_server.js +104 -0
  108. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create/helper.js +161 -0
  109. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create/koa_art_server.js +102 -0
  110. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create/mini_app_home.js +415 -0
  111. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create/razor.js +0 -0
  112. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create/springboot.js +0 -0
  113. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create/thinkphp.js +0 -0
  114. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create/uni_app_home.js +418 -0
  115. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create/vue_cli_admin.js +78 -0
  116. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create/vue_cli_home.js +112 -0
  117. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/create_file.js +97 -0
  118. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/db/add_data.js +221 -0
  119. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/db/create_table.js +162 -0
  120. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/db/set_auth_table.js +86 -0
  121. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/index.js +524 -0
  122. package/demo/app/dev/plugin/main/api_dev_manage/auto_subject/param.json +37 -0
  123. package/demo/app/route/app.js +131 -0
  124. package/demo/app/route/app.json +11 -0
  125. package/demo/app/route/event_api/client/event.json +10 -0
  126. package/demo/app/route/event_api/client/main.js +19 -0
  127. package/demo/app/route/event_api/manage/event.json +18 -0
  128. package/demo/app/route/event_api/manage/main.js +70 -0
  129. package/demo/app/route/plugin/main/api_route_client/pass/api.json +37 -0
  130. package/demo/app/route/plugin/main/api_route_client/pass/index.js +33 -0
  131. package/demo/app/route/plugin/main/api_route_client/pass/param.json +50 -0
  132. package/demo/app/route/plugin/main/index.js +144 -0
  133. package/demo/app/route/plugin/main/plugin.json +20 -0
  134. package/demo/app/sys/event_api/api/event.json +1 -1
  135. package/demo/app/sys/event_api/doc/event.json +18 -0
  136. package/demo/app/sys/event_api/doc/main.js +67 -0
  137. package/demo/app/sys/event_api/img/event.json +11 -0
  138. package/demo/app/sys/event_api/img/main.js +90 -0
  139. package/demo/app/sys/event_api/web/event.json +4 -4
  140. package/demo/app/sys/plugin/app_admin/index.js +127 -0
  141. package/demo/app/sys/plugin/app_admin/plugin.json +20 -0
  142. package/demo/app/sys/plugin/main/api_client/config/sql.json +70 -0
  143. package/demo/app/sys/plugin/main/api_client/lang/api.json +37 -0
  144. package/demo/app/sys/plugin/main/api_client/lang/index.js +27 -0
  145. package/demo/app/sys/plugin/main/api_client/lang/param.json +22 -0
  146. package/demo/app/sys/plugin/main/api_client/translate/api.json +39 -0
  147. package/demo/app/sys/plugin/main/api_client/translate/index.js +21 -0
  148. package/demo/app/sys/plugin/main/api_client/translate/param.json +130 -0
  149. package/demo/app/sys/plugin/main/api_client/translate/sql.json +62 -0
  150. package/demo/app/sys/plugin/main/static/static.json +1 -1
  151. package/demo/app/sys/plugin/main/task/task_demo/index.js +37 -0
  152. package/demo/app/sys/plugin/main/task/task_demo/task.json +24 -0
  153. package/demo/app/sys/plugin/mqtt_engine/LICENSE +201 -0
  154. package/demo/app/sys/plugin/mqtt_engine/api_sys_client/scheme/api.json +33 -0
  155. package/demo/app/sys/plugin/mqtt_engine/api_sys_client/scheme/index.js +31 -0
  156. package/demo/app/sys/plugin/mqtt_engine/api_sys_client/scheme/param.json +130 -0
  157. package/demo/app/sys/plugin/mqtt_engine/index.js +51 -0
  158. package/demo/app/sys/plugin/mqtt_engine/mqtt/df/index.js +509 -0
  159. package/demo/app/sys/plugin/mqtt_engine/mqtt/df/mqtt.json +24 -0
  160. package/demo/app/sys/plugin/mqtt_engine/mqtt/zs/index.js +622 -0
  161. package/demo/app/sys/plugin/mqtt_engine/mqtt/zs/mqtt.json +36 -0
  162. package/demo/app/sys/plugin/mqtt_engine/plugin.json +21 -0
  163. package/demo/app/sys/plugin/mqtt_engine/static/img/logo.png +0 -0
  164. package/demo/app/sys/plugin/mqtt_engine/static/img/logo1.png +0 -0
  165. package/demo/app/sys/plugin/mqtt_engine/static/static.json +18 -0
  166. package/demo/app/sys/plugin/user/index.js +127 -0
  167. package/demo/app/sys/plugin/user/plugin.json +20 -0
  168. package/demo/app/sys/plugin/user/static/img/logo.png +0 -0
  169. package/demo/app/sys/plugin/user/static/static.js +28 -0
  170. package/demo/app/sys/plugin/user/static/static.json +20 -0
  171. package/demo/app/sys/static/img/avatar_1674484608066.png +0 -0
  172. package/demo/app/sys/static/img/avatar_1674633778171.jpeg +0 -0
  173. package/demo/app/sys/static/img/avatar_1674962702334.jpeg +0 -0
  174. package/demo/app/sys/static/img/avatar_1675075431736.jpeg +0 -0
  175. package/demo/app/sys/static/img/avatar_1675497065533.jpeg +0 -0
  176. package/demo/app/sys/static/img/avatar_1685352550990.jpeg +0 -0
  177. package/demo/app/sys/static/img/avatar_1685353685992.jpeg +0 -0
  178. package/demo/app/sys/static/img/avatar_1685353956587.jpeg +0 -0
  179. package/demo/app/sys/static/img/avatar_1685353971148.jpeg +0 -0
  180. package/demo/app/sys/static/img/avatar_1685353983723.jpeg +0 -0
  181. package/demo/app/sys/static/img/avatar_1685354014745.jpeg +0 -0
  182. package/demo/app/sys/static/img/avatar_1685354122355.jpeg +0 -0
  183. package/demo/app/sys/static/img/avatar_1685357983520.jpeg +0 -0
  184. package/demo/app/sys/static/img/avatar_1685358453383.jpeg +0 -0
  185. package/demo/app/sys/static/img/avatar_1685416570438.jpeg +0 -0
  186. package/demo/app/sys/static/img/avatar_1685512675830.png +0 -0
  187. package/demo/app/sys/static/img/avatar_1685939425608.jpeg +0 -0
  188. package/demo/app/sys/static/img/avatar_1685939886560.jpeg +0 -0
  189. package/demo/app/sys/static/img/avatar_1686106313194.png +0 -0
  190. package/demo/app/sys/static/img/avatar_1686371876175.png +0 -0
  191. package/demo/app/sys/static/img/avatar_1686372033596.png +0 -0
  192. package/demo/app/sys/static/img/avatar_1688215220669.png +0 -0
  193. package/demo/app/sys/static/img/avatar_1688531184690.png +0 -0
  194. package/demo/app/sys/static/img/avatar_1688531233080.png +0 -0
  195. package/demo/app/sys/static/img/avatar_1688548526909.png +0 -0
  196. package/demo/app/sys/static/img/avatar_1688549213411.png +0 -0
  197. package/demo/app/sys/static/img/avatar_1688549511977.png +0 -0
  198. package/demo/app/sys/static/img/avatar_1688549685464.png +0 -0
  199. package/demo/app/sys/static/img/avatar_1688608623049.png +0 -0
  200. package/demo/app/sys/static/img/avatar_1688638500476.png +0 -0
  201. package/demo/app/sys/static/img/avatar_1688638515195.png +0 -0
  202. package/demo/app/sys/static/img/avatar_1688638539928.png +0 -0
  203. package/demo/app/sys/static/img/avatar_1688638557960.png +0 -0
  204. package/demo/app/sys/static/img/avatar_1688638761798.png +0 -0
  205. package/demo/app/sys/static/img/avatar_1688638943140.png +0 -0
  206. package/demo/app/sys/static/img/avatar_1688639068330.png +0 -0
  207. package/demo/app/sys/static/img/image_1685357101273.jpeg +0 -0
  208. package/demo/app/sys/static/img/logo.png +0 -0
  209. package/demo/app/sys/static/static.js +28 -0
  210. package/demo/app/sys/static/static.json +20 -0
  211. package/demo/app/user/plugin/main/api_user_client/core/api.json +20 -0
  212. package/demo/app/user/plugin/main/api_user_client/core/forgot.js +14 -0
  213. package/demo/app/user/plugin/main/api_user_client/core/password.js +14 -0
  214. package/demo/app/user/plugin/main/api_user_client/core/sign_out.js +26 -0
  215. package/demo/app/user/plugin/main/api_user_client/core/state.js +21 -0
  216. package/demo/app/user/plugin/main/api_user_client/forgot/index - /345/211/257/346/234/254.jsbat" +41 -0
  217. package/demo/app/user/plugin/main/api_user_client/phone_code/index.js_ +230 -0
  218. package/demo/app/user/plugin/main/api_user_manage/account_base/api.json +37 -0
  219. package/demo/app/user/plugin/main/api_user_manage/account_base/index.js +40 -0
  220. package/demo/app/user/plugin/main/api_user_manage/account_base/param.json +130 -0
  221. package/demo/app/user/plugin/main/api_user_manage/invitation_code/api.json +37 -0
  222. package/demo/app/user/plugin/main/api_user_manage/invitation_code/index.js +106 -0
  223. package/demo/app/user/plugin/main/api_user_manage/invitation_code/param.json +130 -0
  224. package/demo/app/user/plugin/main/api_user_manage/update_team/api.json +35 -0
  225. package/demo/app/user/plugin/main/api_user_manage/update_team/index.js +218 -0
  226. package/demo/app/user/plugin/main/api_user_manage/update_team/param.json +130 -0
  227. package/demo/app/user/static/img/logo.png +0 -0
  228. package/demo/app/user/static/static.js +28 -0
  229. package/demo/app/user/static/static.json +20 -0
  230. package/demo/app/ws/app.js +122 -0
  231. package/demo/app/ws/app.json +11 -0
  232. package/demo/app/ws/event_api/client/event.json +10 -0
  233. package/demo/app/ws/event_api/client/main.js +17 -0
  234. package/demo/app/ws/socket/ws/index.js +43 -0
  235. package/demo/app/ws/socket/ws/socket.json +14 -0
  236. package/demo/config/face.sql +3824 -0
  237. package/demo/config/local.json +2 -2
  238. package/demo/config/test.json +2 -2
  239. package/index.js +2 -2
  240. package/package.json +2 -2
  241. /package/core/com/{api → rpc}/rpc.js +0 -0
@@ -0,0 +1,622 @@
1
+ /**
2
+ * 查询个人记录
3
+ * @param {String} clientid 客户端ID
4
+ * @param {Object} param
5
+ */
6
+ exports.get_log = function(clientid, param) {
7
+ return this.push("get_suc_record", clientid, param);
8
+ }
9
+
10
+ /**
11
+ * 考勤打卡(无)
12
+ * @param {String} clientid 客户端ID
13
+ * @param {Object} uuid 用户唯一标识
14
+ * @param {String} avatar base64头像
15
+ * @param {Number} longtime 超时回馈
16
+ */
17
+ exports.sign_in = function(clientid, uuid, avatar) {
18
+ // return this.push("PullRecordOnlyPic", clientid, {
19
+ // "personID": uuid,
20
+ // "picinfo": avatar
21
+ // });
22
+ }
23
+
24
+ /**
25
+ * 下发二维码(无)
26
+ * @param {String} clientid
27
+ * @param {Object} param
28
+ * @param {Number} longtime 超时回馈
29
+ */
30
+ exports.push_qrcode = function(clientid, param) {
31
+ // return this.push("ShowQRCode", clientid, param);
32
+ }
33
+
34
+ /**
35
+ * 以图搜人(无)
36
+ * @param {String} clientid 客户端ID
37
+ * @param {Object} avatar 人脸照片
38
+ * @param {Number} longtime 超时回馈
39
+ */
40
+ exports.get_member_pic = function(clientid, avatar) {
41
+ // return this.push("GetPictureSearch", clientid, {
42
+ // "facesluiceId": clientid,
43
+ // "MaxSimilarity": 80,
44
+ // "MaxNum": 1,
45
+ // "picinfo": avatar
46
+ // });
47
+ }
48
+
49
+ /**
50
+ * 远程开门
51
+ * @param {String} clientid 客户端ID
52
+ * @param {String} uuid 用户唯一标识
53
+ * @param {Boolean} pass 是否可通行 true为是
54
+ * @param {String} tip 提示
55
+ */
56
+ exports.unlock = async function(clientid, uuid = '0', pass = false, tip = '没有访问权限') {
57
+ var res = await this.push("gpio control", clientid, {
58
+ // 0不开门,1开门
59
+ "ctrl_type": pass ? "on" : "off"
60
+ });
61
+ if (!res) {
62
+ return "请求超时!"
63
+ }
64
+ if (res.message !== "ACK") {
65
+ return res.code;
66
+ }
67
+ return
68
+ }
69
+
70
+ /**
71
+ * 删除成员
72
+ * @param {String} clientid 客户端ID
73
+ * @param {String} uuid 用户唯一标识
74
+ * @param {Number} longtime 超时回馈
75
+ */
76
+ exports.delete_member = async function(clientid, uuid) {
77
+ var res = await this.push("delete_face", clientid, {
78
+ "per_id": uuid,
79
+ "type": 0
80
+ });
81
+ if (!res) {
82
+ return "请求超时!"
83
+ }
84
+ if (res.message !== "ACK") {
85
+ return res.code;
86
+ }
87
+ return
88
+ }
89
+
90
+ exports.sleep = async function(longtime, param) {
91
+ return new Promise((resolve, reject) => {
92
+ setTimeout(() => {
93
+ resolve(param);
94
+ }, longtime);
95
+ });
96
+ }
97
+
98
+ /**
99
+ * 批量删除成员
100
+ * @param {String} clientid 客户端ID
101
+ * @param {Object} arr 成员列表
102
+ * @param {Number} longtime 超时回馈
103
+ */
104
+ exports.delete_member_batch = async function(clientid, arr, longtime) {
105
+ if (!this.drives[clientid]) {
106
+ this.drives[clientid] = {};
107
+ }
108
+ if (this.drives[clientid].pushing) {
109
+ return {
110
+ detail: "busy"
111
+ }
112
+ }
113
+ this.drives[clientid].pushing = 1;
114
+ this.drives[clientid].mode = "update";
115
+
116
+ var result;
117
+ var error = 0;
118
+ var success = 0;
119
+ var error_info = [];
120
+ var success_info = [];
121
+
122
+ var now = new Date().toStr("yyyy-MM-dd hh:mm:ss");
123
+ for (var i = 0; i < arr.length; i++) {
124
+ var customId = arr[i];
125
+ var res = await this.push("delete_face", clientid, {
126
+ "per_id": customId,
127
+ "type": 0
128
+ }, 10000);
129
+ if (!res) {
130
+ await this.sleep(60000);
131
+ res = await this.push("delete_face", clientid, {
132
+ "per_id": customId,
133
+ "type": 0
134
+ }, 10000);
135
+ }
136
+ if (!res) {
137
+ error++;
138
+ error_info.push({
139
+ customId,
140
+ errcode: -1,
141
+ time_create: now
142
+ });
143
+ } else if (res.message == "ACK") {
144
+ success++;
145
+ success_info.push({
146
+ customId,
147
+ time_create: now
148
+ });
149
+ } else {
150
+ error++;
151
+ // 407 人脸像素太大(大于 1072)
152
+ // 408 图片格式错误
153
+ // 410 获取到的特征数据为空
154
+ // 412 相似人脸禁止录入
155
+ // 419 缓存初始化中
156
+ // 420 图片长度小于 112
157
+ error_info.push({
158
+ customId,
159
+ errcode: res.code.toString(),
160
+ time_create: now
161
+ });
162
+ }
163
+ }
164
+ this.drives[clientid].pushing = 0;
165
+ this.drives[clientid].mode = "";
166
+
167
+ return {
168
+ error,
169
+ success,
170
+ error_info,
171
+ success_info,
172
+ result: 'ok'
173
+ };
174
+ }
175
+
176
+ /**
177
+ * 重启设备
178
+ * @param {String} clientid 设备sn
179
+ */
180
+ exports.reboot_device = async function(clientid) {
181
+ var res = await this.push("reboot_cam", clientid, {});
182
+ if (!res) {
183
+ return "请求超时!"
184
+ }
185
+ if (res.message !== "ACK") {
186
+ return res.code;
187
+ }
188
+ }
189
+
190
+ /**
191
+ * 设置设备时间
192
+ * @param {String} clientid 设备sn
193
+ * @param {String} datetime 日期时间
194
+ */
195
+ exports.set_device_time = async function(clientid, datetime) {
196
+ var res = await this.push("ss_set_timing", clientid, {
197
+ "body": {
198
+ "datetime": datetime
199
+ }
200
+ });
201
+ if (!res) {
202
+ return "请求超时!"
203
+ }
204
+
205
+ if (res.message !== "ACK") {
206
+ return res.code;
207
+ }
208
+ }
209
+
210
+ /**
211
+ * 恢复出厂设置
212
+ * @param {String} clientid 设备sn
213
+ * @param {Boolean} record 是否恢复控制记录,true为恢复
214
+ * @param {Boolean} member 是否恢复成员,true为恢复
215
+ * @param {Boolean} log 是否恢复请求日志,true为恢复
216
+ */
217
+ exports.reset_device = function(clientid, record = true, member = false, log = true) {
218
+ if (record) {
219
+ // 清空记录
220
+ this.push("delete_record", clientid, {});
221
+ }
222
+
223
+ if (member) {
224
+ // 删除所有成员
225
+ this.push("delete_face", clientid, {
226
+ type: 4
227
+ });
228
+ }
229
+ }
230
+
231
+ /**
232
+ * 查询下发进度(未完成)
233
+ * @param {String} clientid 设备sn
234
+ */
235
+ exports.get_progress = async function(clientid) {
236
+ if (!this.drives[clientid]) {
237
+ this.drives[clientid] = {};
238
+ }
239
+ return this.drives[clientid].pushing || 0;
240
+ }
241
+
242
+ /**
243
+ * 转换进入的消息
244
+ * @param {Object} push_topic
245
+ * @param {Object} msg
246
+ * @param {Object} topic
247
+ */
248
+ exports.convert_in = function(push_topic, msg, topic) {
249
+ var cg = this.config;
250
+ var method = msg[cg.method];
251
+ if (push_topic.indexOf("heartbeat") !== -1) {
252
+ method = "mqtt_heartbeat";
253
+ } else if (push_topic.indexOf("face/response") !== -1) {
254
+ method = "push_face";
255
+ }
256
+ var json = {
257
+ clientid: "",
258
+ id: msg[cg.msgid] || this.get_msgid(method, 'client'),
259
+ method
260
+ };
261
+ if (msg[cg.params]) {
262
+ json.params = msg[cg.params];
263
+ }
264
+ if (msg[cg.result]) {
265
+ json.result = {
266
+ code: msg.code,
267
+ message: msg[cg.result]
268
+ };
269
+ }
270
+ if (!json.params && !json.result) {
271
+ json.result = msg;
272
+ }
273
+ json.clientid = this.get_clientid(push_topic, json.params || json.result || {}, msg, topic).toLocaleUpperCase();
274
+ return json;
275
+ }
276
+
277
+ // exports.main = function(push_topic, params, msg, topic, index) {
278
+ // console.log(push_topic, params, msg, topic, index);
279
+ // }
280
+
281
+ /**
282
+ * 转换消息并推送
283
+ */
284
+ exports.push = function(method, clientid, params, longtime = 0) {
285
+ var cg = this.config;
286
+ var msg = {};
287
+ msg.client_id = clientid;
288
+ msg[cg.msgid] = this.get_msgid(method);
289
+ msg[cg.method] = method;
290
+ Object.assign(msg, params);
291
+ return this.pushS(clientid, msg);
292
+ }
293
+
294
+ /**
295
+ * 考勤补卡(无)
296
+ * @param {String} clientid 设备sn
297
+ * @param {Object} param 其他信息
298
+ * @param {Number} longtime 超时回馈
299
+ */
300
+ exports.replacement = function(clientid, param, longtime = 0) {
301
+ // return this.push("PullRecordOnlyName", clientid, param, longtime);
302
+ }
303
+
304
+ /**
305
+ * 查询人员名单
306
+ * @param {String} clientid 客户端ID
307
+ * @param {Number} longtime 超时回馈
308
+ */
309
+ exports.get_member = async function(clientid, uuid, name) {
310
+ var qy = {};
311
+ if (uuid) {
312
+ qy.uuid = uuid;
313
+ }
314
+ if (name) {
315
+ qy.name = name;
316
+ }
317
+ var res = await this.push("query_face", qy);
318
+ if (!res) {
319
+ return "请求超时!"
320
+ }
321
+ if (res.code) {
322
+ return res.pers_id;
323
+ }
324
+ return []
325
+ }
326
+
327
+ /**
328
+ * 查询人员名单
329
+ * @param {String} clientid 客户端ID
330
+ * @param {String} uuid 用户唯一标识
331
+ */
332
+ exports.get_member_one = async function(clientid, uuid) {
333
+ var list = await get_member(clientid, uuid);
334
+ if (list.length) {
335
+ return list[0]
336
+ }
337
+ return null;
338
+ }
339
+
340
+ /**
341
+ * 成员模型
342
+ * @param {Object} m 原始的成员
343
+ */
344
+ exports.member_model_out = function(m) {
345
+ var obj = {
346
+ "per_id": m.customId,
347
+ "per_name": m.name,
348
+ "idcardNum": m.nfc || '',
349
+ "img_url": this.fullUrl(m.avatar),
350
+ "idcardper": m.idcard,
351
+ "auth_type": 0,
352
+ // 1 待审核 | 2 已拒绝 | 3 已通过 | 4 黑名单 , 设备0为白名单,2为黑名单
353
+ "per_type": m.state == 4 ? 2 : 0,
354
+ "usr_type": m.gm,
355
+ "gender": m.sex == 1 ? '男' : '女'
356
+ }
357
+
358
+ if (typeof(m.time_valid_start) == "object") {
359
+ obj.s_time = m.time_valid_start.stamp();
360
+ } else {
361
+ obj.s_time = m.time_valid_start.toTime().stamp();
362
+ }
363
+ if (typeof(m.time_valid_end) == "object") {
364
+ obj.e_time = m.time_valid_end.stamp();
365
+ } else {
366
+ obj.e_time = m.time_valid_end.toTime().stamp();
367
+ }
368
+ return obj
369
+ }
370
+
371
+ /**
372
+ * 下发人员名单
373
+ * @param {String} clientid 设备ID
374
+ * @param {Object} user 人员信息
375
+ */
376
+ exports.update_member = async function(clientid, user) {
377
+ var member = this.member_model_out(user);
378
+ var res = await this.push("update_face_ex", clientid, member);
379
+ if (!res) {
380
+ return "请求超时!"
381
+ }
382
+ if (res.message !== "ACK") {
383
+ return res.code;
384
+ }
385
+ return
386
+ }
387
+
388
+ /**
389
+ * 批量下发人员名单(模拟) 设备本身没有批量下发,因此需要自己设计一个来模拟
390
+ * @param {String} clientid 客户端ID
391
+ * @param {Array} list 人员名单
392
+ * @param {Number} longtime 超时回馈
393
+ */
394
+ exports.update_member_batch = async function(clientid, list, longtime = 0) {
395
+ if (!this.drives[clientid]) {
396
+ this.drives[clientid] = {};
397
+ }
398
+ if (this.drives[clientid].pushing) {
399
+ return {
400
+ detail: "busy"
401
+ }
402
+ }
403
+ this.drives[clientid].pushing = 1;
404
+ this.drives[clientid].mode = "delete";
405
+
406
+ var result;
407
+ var error = 0;
408
+ var success = 0;
409
+ var error_info = [];
410
+ var success_info = [];
411
+
412
+ var now = new Date().toStr("yyyy-MM-dd hh:mm:ss");
413
+ for (var i = 0; i < list.length; i++) {
414
+ var user = list[i];
415
+ var res = await this.push("update_face_ex", clientid, this.member_model_out(user), 10000);
416
+ if (!res) {
417
+ await this.sleep(60000);
418
+ res = await this.push("update_face_ex", clientid, this.member_model_out(user), 10000);
419
+ }
420
+ if (!res) {
421
+ error++;
422
+ error_info.push({
423
+ customId: user.customId,
424
+ errcode: -1,
425
+ time_create: now
426
+ });
427
+ } else if (res.message == "ACK") {
428
+ success++;
429
+ success_info.push({
430
+ customId: user.customId,
431
+ time_create: now
432
+ });
433
+ } else {
434
+ error++;
435
+ // 407 人脸像素太大(大于 1072)
436
+ // 408 图片格式错误
437
+ // 410 获取到的特征数据为空
438
+ // 412 相似人脸禁止录入
439
+ // 419 缓存初始化中
440
+ // 420 图片长度小于 112
441
+ error_info.push({
442
+ customId: user.customId,
443
+ errcode: res.code.toString(),
444
+ time_create: now
445
+ });
446
+ }
447
+ }
448
+ this.drives[clientid].pushing = 0;
449
+ this.drives[clientid].mode = "";
450
+
451
+ return {
452
+ error,
453
+ success,
454
+ error_info,
455
+ success_info,
456
+ result: 'ok'
457
+ };
458
+ }
459
+
460
+ /**
461
+ * 播放语音
462
+ * @param {String} clientid 客户端ID
463
+ * @param {Number} type 语音类型 1为没有权限,2为鉴权失败,3为鉴权成功
464
+ */
465
+ exports.play_audio = async function(clientid, type = 3) {
466
+ var body = {};
467
+ switch (type) {
468
+ case 1:
469
+ // 权限过期
470
+ body.file_name = "deadline.wav"
471
+ break;
472
+ case 2:
473
+ // 鉴权失败
474
+ body.file_name = "failure.wav"
475
+ break;
476
+ case 3:
477
+ // 鉴权成功
478
+ body.file_name = "success.wav"
479
+ break;
480
+ default:
481
+ break;
482
+ }
483
+ body.type = 0;
484
+ var res = await this.push("trylisten_wav", clientid, {
485
+ body
486
+ });
487
+
488
+ if (!res) {
489
+ return "请求超时!"
490
+ }
491
+ if (res.message !== "ACK") {
492
+ return res.code;
493
+ }
494
+ return
495
+ }
496
+
497
+ /**
498
+ * 设置扫描二维码模式
499
+ * @param {String} clientid 客户端ID
500
+ * @param {Number} mode 模式
501
+ */
502
+ exports.set_qrcode_mode = async function(clientid, mode = 1) {
503
+ var res = await this.push("set_qrcode_mode", clientid, {
504
+ body: {
505
+ "enable": 0,
506
+ mode
507
+ }
508
+ });
509
+ if (!res) {
510
+ return "请求超时!"
511
+ }
512
+ if (res.message !== "ACK") {
513
+ return res.code;
514
+ }
515
+ return
516
+ }
517
+
518
+ /**
519
+ * 发送灯光
520
+ * @param {String} clientid 客户端ID
521
+ * @param {Number} color 颜色选项
522
+ */
523
+ exports.send_led = async function(clientid, color = 1) {
524
+ var res = await this.push("set_led_color_test", clientid, {
525
+ "body": {
526
+ color
527
+ }
528
+ });
529
+ if (!res) {
530
+ return "请求超时!"
531
+ }
532
+ if (res.message !== "ACK") {
533
+ return res.code;
534
+ }
535
+ return
536
+ }
537
+
538
+
539
+ /**
540
+ * 初始化函数, 用于定义开放给前端的函数
541
+ */
542
+ exports.init = function() {
543
+ var m = this.methods;
544
+ var _this = this;
545
+
546
+ m["mqtt_heartbeat"] = function(clientid, params) {
547
+ if (!_this.drives[clientid]) {
548
+ _this.drives[clientid] = {};
549
+ }
550
+ _this.drives[clientid].online = 1;
551
+ _this.drives[clientid].time_last = new Date().getTime();
552
+ // console.log("心跳", clientid, _this.drives[clientid]);
553
+ }
554
+
555
+ /**
556
+ * 在线通知
557
+ * @param {String} clientid 设备sn
558
+ * @param {Object} param 其他信息
559
+ */
560
+ m["mqtt_online"] = async function(clientid, params) {
561
+ _this.update_online(clientid, 1);
562
+ _this.set_qrcode_mode(clientid);
563
+ console.log("上线", clientid, _this.drives[clientid]);
564
+ };
565
+
566
+ m["push_face"] = async function(clientid, params, msg, id) {
567
+ var type = 1;
568
+ var action;
569
+ switch (msg.type) {
570
+ case "face_result":
571
+ type = 1;
572
+ break;
573
+ case "wgin_read":
574
+ type = 4;
575
+ break;
576
+ default:
577
+ break;
578
+ }
579
+ var log = {
580
+ customId: params.per_id,
581
+ name: params.name,
582
+ idcard: params.idcard,
583
+ clientid,
584
+ // (1刷脸验证|2远程开门|3智码开门|4刷卡验证)
585
+ type,
586
+ // 1白名单|2黑名单
587
+ person_type: params.matchRole || params.role || 0,
588
+ record_type: 1,
589
+ action,
590
+ nfc: params.wg_num,
591
+ // usec / ext_sec
592
+ time: params.ext_sec.toTime().toStr("yyyy-MM-dd hh:mm:ss"),
593
+ avatar: params.img_data,
594
+ sex: params.gender == '男' ? 1 : 2
595
+ }
596
+ $.server.exec_log(clientid, log);
597
+ }
598
+
599
+ m["send_qr_msg"] = async function(clientid, params, msg, id) {
600
+ var qrcode = params.data;
601
+ var {
602
+ uuid,
603
+ pass,
604
+ tip,
605
+ device
606
+ } = await $.server.exec_qrcode(clientid, qrcode);
607
+ if (device && device.online) {
608
+ await _this.unlock(clientid, uuid, pass, tip);
609
+ }
610
+ if (tip) {
611
+ if (tip.indexOf("过期") !== -1 || tip.indexOf("超限") !== -1) {
612
+ _this.play_audio(clientid, 1);
613
+ _this.send_led(clientid);
614
+ } else if (tip.indexOf("通行") !== -1) {
615
+ // _this.play_audio(clientid, 3);
616
+ } else {
617
+ _this.play_audio(clientid, 2);
618
+ _this.send_led(clientid);
619
+ }
620
+ }
621
+ }
622
+ };
@@ -0,0 +1,36 @@
1
+ {
2
+ // 名称, 由中英文和下“_”组成, 用于修改或卸载 例如: demo
3
+ "name": "ZS",
4
+ // mqtt 服务标题
5
+ "title": "新设备",
6
+ // mqtt 服务介绍
7
+ "description": "",
8
+ // 状态 0未启用,1启用
9
+ "state": 1,
10
+ // 订阅的主题
11
+ "topic": ["face/+/response", "face/response", "qr/response", "online/response", "heartbeat/response"],
12
+ // 主题回复
13
+ "topic_receive": ["face/${clientid}/request", "face/request"],
14
+ // 给客户端推送的主题
15
+ "topic_push": "face/${clientid}/request",
16
+ // 接收方式
17
+ "qos": 1,
18
+ // 推送方式
19
+ "qos_push": 0,
20
+ // 保持接收
21
+ "retain": true,
22
+ // 调用的脚本
23
+ "func_file": "./index.js",
24
+ // 客户端ID
25
+ "clientid": "sn",
26
+ // 消息ID
27
+ "msgid": "cmd_id",
28
+ // 请求方法
29
+ "method": "cmd",
30
+ // 参数
31
+ "params": "body",
32
+ // 结果
33
+ "result": "reply",
34
+ // 回复方法
35
+ "method_receive": "${method}"
36
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "app": "sys",
3
+ "name": "mqtt_engine",
4
+ "title": "通讯引擎",
5
+ "description": "这是MQTT通讯引擎,用于启动MQTT通讯和配置交换数据",
6
+ "version": "1.0",
7
+ "author": "自由人网络",
8
+ "web": "https://www.fman.top",
9
+ "state": 1,
10
+ "show": 0,
11
+ "func_file": "./index.js",
12
+ "func_name": "",
13
+ "lang_path": "./lang/",
14
+ "icon": "/sys/mqtt_engine/img/logo.png",
15
+ "cmd": "sys.mqtt_engine",
16
+ "end": true,
17
+ "sort": 10,
18
+ "options": [],
19
+ "show_user": 0,
20
+ "show_admin": 1
21
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ // 路由路径,注意:这里是泛路径,相当于/*
3
+ "path": "/sys/mqtt_engine",
4
+ // 默认文件,当直接访问这个路径时,如果存在默认文件,这直接访问该文件
5
+ "index": "index.html",
6
+ // 资源缓存寿命,单位:秒
7
+ "maxAge": 0,
8
+ // 是否恒久不变,一般资源文件可能变化,所以这里一般是false
9
+ "immutable": false,
10
+ // 是否使用brotli压缩方式
11
+ "brotli": true,
12
+ // 是否启用gzip压缩方式
13
+ "gzip": true,
14
+ // 是否限制访问指定拓展名的文件,多个
15
+ "extensions": null,
16
+ // 是否转换JS、vue代码为amd标准,true的情况下会把es6和commonJS都转成amd格式
17
+ "convert_amd": false
18
+ }