flexbiz-server 12.3.25 → 12.3.27

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 (386) hide show
  1. package/package.json +1 -1
  2. package/server/app.js +7 -7
  3. package/server/cluster.js +5 -5
  4. package/server/controllers/controller.js +1 -1
  5. package/server/controllers/controllerUtils.js +3 -3
  6. package/server/controllers/importFromExcelHandler.js +3 -3
  7. package/server/controllers/importFromGsHandler.js +3 -3
  8. package/server/controllers/importFromJsonHandler.js +2 -2
  9. package/server/controllers/importHandler.js +18 -17
  10. package/server/controllers/viewHandler.js +4 -4
  11. package/server/global.js +8 -7
  12. package/server/libs/WorkerStaticPool.js +14 -12
  13. package/server/libs/tinhgiatb.js +35 -35
  14. package/server/models/account.js +4 -4
  15. package/server/models/afflink.js +2 -2
  16. package/server/models/app.js +1 -1
  17. package/server/models/approve.js +3 -2
  18. package/server/models/assabcihandler.js +1 -1
  19. package/server/models/assbank.js +1 -1
  20. package/server/models/assbooking.js +4 -3
  21. package/server/models/assbuy.js +3 -2
  22. package/server/models/asscashwithdraw.js +3 -2
  23. package/server/models/assfindhash.js +2 -2
  24. package/server/models/assinvestment.js +5 -4
  25. package/server/models/assissue.js +1 -1
  26. package/server/models/asskey.js +2 -2
  27. package/server/models/assneedtobuy.js +3 -3
  28. package/server/models/assperiod.js +4 -5
  29. package/server/models/assproduct.js +9 -8
  30. package/server/models/assprofitsharing.js +3 -2
  31. package/server/models/assreceiver.js +3 -2
  32. package/server/models/assrequest.js +3 -3
  33. package/server/models/asssell.js +4 -3
  34. package/server/models/asstransaction.js +3 -2
  35. package/server/models/asstransfer.js +3 -3
  36. package/server/models/assuser_identity.js +2 -2
  37. package/server/models/asswithdraw.js +3 -3
  38. package/server/models/attend.js +2 -2
  39. package/server/models/banggiaban.js +4 -4
  40. package/server/models/bangtinhluong.js +3 -2
  41. package/server/models/base.js +2 -1
  42. package/server/models/bds_area.js +2 -2
  43. package/server/models/bds_block.js +2 -2
  44. package/server/models/bds_building.js +1 -1
  45. package/server/models/bds_floor.js +2 -2
  46. package/server/models/bds_floordetail.js +4 -3
  47. package/server/models/bds_nhadat.js +5 -4
  48. package/server/models/bds_nhomnhadat.js +2 -1
  49. package/server/models/bds_phanloainhadat.js +2 -1
  50. package/server/models/bg1.js +3 -2
  51. package/server/models/bg2.js +3 -2
  52. package/server/models/cache.js +1 -1
  53. package/server/models/calllog.js +2 -2
  54. package/server/models/campaign.js +1 -1
  55. package/server/models/cart.js +3 -3
  56. package/server/models/cddiem.js +1 -1
  57. package/server/models/cddt.js +2 -2
  58. package/server/models/cdkh.js +2 -2
  59. package/server/models/cdkhtheongay.js +2 -2
  60. package/server/models/cdnphep.js +2 -2
  61. package/server/models/cdtk.js +2 -2
  62. package/server/models/cdtktheongay.js +2 -2
  63. package/server/models/cdvt.js +3 -2
  64. package/server/models/cdvtnpp.js +2 -2
  65. package/server/models/cdvttheongay.js +3 -2
  66. package/server/models/chamcong.js +3 -2
  67. package/server/models/checkin.js +1 -1
  68. package/server/models/checkinactivity.js +2 -1
  69. package/server/models/checkinkpi.js +3 -2
  70. package/server/models/checkinlocation.js +2 -2
  71. package/server/models/chitieukpi.js +2 -2
  72. package/server/models/chudethaoluan.js +3 -2
  73. package/server/models/ckgtluong.js +1 -1
  74. package/server/models/colleague.js +1 -1
  75. package/server/models/comment.js +1 -1
  76. package/server/models/congdoansx.js +3 -3
  77. package/server/models/congtacvien.js +1 -1
  78. package/server/models/congthuctinhgiaban.js +4 -4
  79. package/server/models/consultant.js +2 -2
  80. package/server/models/contract.js +4 -3
  81. package/server/models/counter.js +1 -1
  82. package/server/models/ctds.js +3 -2
  83. package/server/models/ctds2.js +4 -4
  84. package/server/models/currency.js +1 -1
  85. package/server/models/customer.js +5 -5
  86. package/server/models/databanle.js +5 -4
  87. package/server/models/datlich.js +3 -3
  88. package/server/models/department.js +2 -2
  89. package/server/models/dh2.js +4 -3
  90. package/server/models/diagram.js +2 -1
  91. package/server/models/dinhmucsx.js +3 -2
  92. package/server/models/dkhoc.js +3 -2
  93. package/server/models/dknphep.js +2 -2
  94. package/server/models/dmban.js +3 -2
  95. package/server/models/dmbp.js +3 -2
  96. package/server/models/dmca.js +1 -1
  97. package/server/models/dmchietkhau.js +6 -5
  98. package/server/models/dmchietkhauhd.js +4 -4
  99. package/server/models/dmcpmh.js +2 -2
  100. package/server/models/dmdiemthuong.js +3 -2
  101. package/server/models/dmdoi.js +3 -3
  102. package/server/models/dmdoituongdanhgia.js +1 -1
  103. package/server/models/dmdt.js +3 -3
  104. package/server/models/dmdvt.js +1 -1
  105. package/server/models/dmgiaban.js +4 -3
  106. package/server/models/dmgiamua.js +3 -2
  107. package/server/models/dmgiathitruong.js +3 -2
  108. package/server/models/dmgiathitruong_ngay.js +1 -1
  109. package/server/models/dmgiathitruong_theodoi.js +2 -2
  110. package/server/models/dmhoahonghd.js +5 -4
  111. package/server/models/dmhoahongnpp.js +5 -4
  112. package/server/models/dmkc.js +2 -2
  113. package/server/models/dmkho.js +2 -2
  114. package/server/models/dmkhuyenmai.js +4 -3
  115. package/server/models/dmkhuyenmaihd.js +3 -2
  116. package/server/models/dmletet.js +1 -1
  117. package/server/models/dmlo.js +2 -2
  118. package/server/models/dmloaicong.js +3 -2
  119. package/server/models/dmloaitask.js +2 -2
  120. package/server/models/dmloaits.js +2 -2
  121. package/server/models/dmnckkm.js +3 -2
  122. package/server/models/dmnghiepvu.js +2 -1
  123. package/server/models/dmnguonvon.js +2 -2
  124. package/server/models/dmnhnv.js +3 -3
  125. package/server/models/dmnv.js +3 -3
  126. package/server/models/dmnvt.js +4 -3
  127. package/server/models/dmphatdichvu.js +3 -2
  128. package/server/models/dmphi.js +2 -2
  129. package/server/models/dmqct.js +2 -2
  130. package/server/models/dmqddvt.js +1 -1
  131. package/server/models/dmtanggiamts.js +2 -2
  132. package/server/models/dmto.js +3 -3
  133. package/server/models/dmtt.js +3 -2
  134. package/server/models/dmvt.js +6 -6
  135. package/server/models/dmyt.js +2 -1
  136. package/server/models/dn0.js +3 -2
  137. package/server/models/dnm.js +3 -3
  138. package/server/models/dokho.js +2 -2
  139. package/server/models/domain.js +2 -2
  140. package/server/models/dvcs.js +1 -1
  141. package/server/models/ecomcategories.js +3 -2
  142. package/server/models/ecomcategories_cty.js +3 -3
  143. package/server/models/ecomproductlines.js +2 -2
  144. package/server/models/ecompromotion_flashsales.js +2 -2
  145. package/server/models/ecompromotion_freeships.js +2 -2
  146. package/server/models/endpoint.js +2 -1
  147. package/server/models/events.js +1 -1
  148. package/server/models/evoucher.js +3 -2
  149. package/server/models/experiencejourney.js +2 -2
  150. package/server/models/experiencejourneydata.js +4 -4
  151. package/server/models/experiencejourneypersona.js +1 -1
  152. package/server/models/experiencejourneystage.js +1 -1
  153. package/server/models/exportexceltemplate.js +2 -2
  154. package/server/models/fbconversation.js +1 -1
  155. package/server/models/fbmessage.js +1 -1
  156. package/server/models/fbpage.js +2 -2
  157. package/server/models/fieldright.js +2 -2
  158. package/server/models/file.js +3 -2
  159. package/server/models/financialroadmap.js +1 -1
  160. package/server/models/folder.js +3 -2
  161. package/server/models/follow.js +1 -1
  162. package/server/models/form.js +2 -2
  163. package/server/models/forminfo.js +2 -2
  164. package/server/models/formvalue.js +2 -2
  165. package/server/models/giaoca.js +1 -1
  166. package/server/models/giatb.js +2 -2
  167. package/server/models/group.js +3 -2
  168. package/server/models/gt_ctgt.js +2 -2
  169. package/server/models/gt_hspb.js +2 -1
  170. package/server/models/gt_sltk.js +2 -2
  171. package/server/models/gt_thcppstk.js +2 -2
  172. package/server/models/hanmucton.js +2 -2
  173. package/server/models/hd1.js +3 -2
  174. package/server/models/hd2.js +4 -4
  175. package/server/models/hd3.js +3 -3
  176. package/server/models/hd4.js +3 -2
  177. package/server/models/hd7.js +3 -2
  178. package/server/models/hd8.js +3 -2
  179. package/server/models/hde.js +3 -2
  180. package/server/models/hlink.js +1 -1
  181. package/server/models/hlinkvalue.js +1 -1
  182. package/server/models/hmcn.js +2 -1
  183. package/server/models/hmcnct.js +2 -2
  184. package/server/models/hspbts.js +1 -1
  185. package/server/models/htl.js +1 -1
  186. package/server/models/importexceltemplate.js +2 -2
  187. package/server/models/introducebonus.js +3 -2
  188. package/server/models/introducecode.js +2 -2
  189. package/server/models/introducer.js +3 -2
  190. package/server/models/kbbtpb.js +2 -1
  191. package/server/models/kbmPttct.js +1 -1
  192. package/server/models/kbmTkgtgt.js +2 -2
  193. package/server/models/kbm_bcdkt.js +1 -1
  194. package/server/models/kbm_kqhdkd.js +1 -1
  195. package/server/models/kbm_lcttgt.js +1 -1
  196. package/server/models/kbm_lctttt.js +1 -1
  197. package/server/models/kbm_pttct.js +2 -2
  198. package/server/models/kbm_tkgtgt.js +2 -1
  199. package/server/models/kbmbcdkt.js +1 -1
  200. package/server/models/kbmbcqt.js +2 -1
  201. package/server/models/kbmkqhdkd.js +1 -1
  202. package/server/models/kbmlcttgt.js +1 -1
  203. package/server/models/kbmlctttt.js +1 -1
  204. package/server/models/kbmtmbctc.js +1 -1
  205. package/server/models/kehoachdtcp.js +2 -2
  206. package/server/models/kehoachmh.js +3 -2
  207. package/server/models/keyresult.js +1 -1
  208. package/server/models/khunghangthanhvien.js +2 -2
  209. package/server/models/label.js +2 -2
  210. package/server/models/labelinfo.js +1 -1
  211. package/server/models/lenhcapphat.js +3 -2
  212. package/server/models/lenhsx.js +3 -2
  213. package/server/models/lienhe.js +3 -3
  214. package/server/models/like_module.js +2 -2
  215. package/server/models/link.js +2 -2
  216. package/server/models/listinfo.js +71 -66
  217. package/server/models/loaidiem.js +2 -2
  218. package/server/models/lock.js +1 -1
  219. package/server/models/log.js +2 -2
  220. package/server/models/mailaccount.js +1 -1
  221. package/server/models/mailgroup.js +2 -1
  222. package/server/models/mailreceived.js +2 -2
  223. package/server/models/mailschedule.js +1 -1
  224. package/server/models/mailsent.js +1 -1
  225. package/server/models/mailtemplate.js +1 -1
  226. package/server/models/maudanhgia.js +1 -1
  227. package/server/models/menuinfo.js +2 -2
  228. package/server/models/message.js +2 -1
  229. package/server/models/message2.js +3 -2
  230. package/server/models/message2setting.js +1 -1
  231. package/server/models/moduleinfo.js +2 -2
  232. package/server/models/momo.js +2 -2
  233. package/server/models/news.js +3 -2
  234. package/server/models/newsfeed.js +2 -2
  235. package/server/models/note.js +1 -1
  236. package/server/models/notification.js +3 -3
  237. package/server/models/okr.js +3 -3
  238. package/server/models/okrdiagram.js +2 -2
  239. package/server/models/onepay.js +2 -2
  240. package/server/models/opportunity.js +3 -3
  241. package/server/models/options.js +1 -1
  242. package/server/models/originimportid.js +1 -1
  243. package/server/models/otp.js +1 -1
  244. package/server/models/parameter.js +1 -1
  245. package/server/models/participant.js +3 -3
  246. package/server/models/partner.js +1 -1
  247. package/server/models/payload.js +1 -1
  248. package/server/models/pbl.js +3 -2
  249. package/server/models/pc0.js +3 -3
  250. package/server/models/pc1.js +3 -3
  251. package/server/models/pc2.js +4 -3
  252. package/server/models/pc3.js +3 -2
  253. package/server/models/pc5.js +3 -2
  254. package/server/models/pc6.js +3 -3
  255. package/server/models/pdn.js +2 -2
  256. package/server/models/pdx.js +3 -3
  257. package/server/models/phieudanhgia.js +2 -2
  258. package/server/models/pht.js +3 -2
  259. package/server/models/phucap.js +2 -2
  260. package/server/models/pkc.js +2 -2
  261. package/server/models/pkh.js +1 -1
  262. package/server/models/pkk.js +3 -2
  263. package/server/models/pkt.js +2 -2
  264. package/server/models/pn1.js +3 -2
  265. package/server/models/pn2.js +3 -2
  266. package/server/models/pn3.js +3 -2
  267. package/server/models/pn5.js +3 -2
  268. package/server/models/pn6.js +3 -2
  269. package/server/models/pn9.js +3 -2
  270. package/server/models/pnc.js +3 -3
  271. package/server/models/pnh.js +3 -2
  272. package/server/models/pnk.js +3 -2
  273. package/server/models/po1.js +3 -2
  274. package/server/models/ppb.js +1 -1
  275. package/server/models/profile.js +2 -1
  276. package/server/models/pt1.js +3 -2
  277. package/server/models/pt5.js +3 -2
  278. package/server/models/ptl.js +1 -1
  279. package/server/models/ptthanhtoan.js +2 -2
  280. package/server/models/purchase_contract.js +4 -3
  281. package/server/models/pxc.js +1 -1
  282. package/server/models/pxh.js +3 -2
  283. package/server/models/pxk.js +2 -1
  284. package/server/models/qts.js +3 -2
  285. package/server/models/qts_dieuchinh.js +1 -1
  286. package/server/models/qts_dieuchuyen.js +3 -2
  287. package/server/models/quanhuyen.js +2 -2
  288. package/server/models/reason.js +2 -2
  289. package/server/models/reportinfo.js +3 -2
  290. package/server/models/right.js +3 -3
  291. package/server/models/rpt.js +1 -1
  292. package/server/models/rptform.js +2 -2
  293. package/server/models/rptobject.js +1 -1
  294. package/server/models/sale_contract.js +3 -3
  295. package/server/models/schedule.js +1 -1
  296. package/server/models/schedule_log.js +1 -1
  297. package/server/models/service.js +1 -1
  298. package/server/models/shipbook.js +3 -2
  299. package/server/models/shortcut.js +2 -2
  300. package/server/models/smsaccount.js +1 -1
  301. package/server/models/smssend.js +2 -2
  302. package/server/models/so1.js +5 -5
  303. package/server/models/so2.js +3 -2
  304. package/server/models/so3.js +3 -3
  305. package/server/models/so5.js +4 -3
  306. package/server/models/so9.js +5 -4
  307. package/server/models/socai.js +6 -6
  308. package/server/models/socainpp.js +6 -6
  309. package/server/models/socaitmp.js +5 -5
  310. package/server/models/sodiemthuong.js +3 -3
  311. package/server/models/sokho.js +5 -4
  312. package/server/models/sokhocapphat.js +5 -4
  313. package/server/models/sokhokhongton.js +6 -5
  314. package/server/models/sokhonpp.js +5 -4
  315. package/server/models/sokhott.js +5 -4
  316. package/server/models/sophanbokh.js +1 -1
  317. package/server/models/sosanxuat.js +3 -2
  318. package/server/models/sotinhkh.js +2 -1
  319. package/server/models/spdd_ck.js +2 -2
  320. package/server/models/spdd_dk.js +2 -2
  321. package/server/models/step.js +1 -1
  322. package/server/models/strategicdiagram.js +1 -1
  323. package/server/models/strategicgoal.js +3 -3
  324. package/server/models/strategickpi.js +3 -2
  325. package/server/models/strategicobjective.js +4 -3
  326. package/server/models/strategicplan.js +4 -3
  327. package/server/models/subscribe.js +2 -2
  328. package/server/models/support.js +1 -1
  329. package/server/models/synctime.js +2 -2
  330. package/server/models/sysconfig.js +2 -2
  331. package/server/models/sysgroup.js +1 -1
  332. package/server/models/tableinfo.js +1 -1
  333. package/server/models/task.js +4 -4
  334. package/server/models/taskreg.js +3 -2
  335. package/server/models/tc.js +2 -2
  336. package/server/models/tdttco.js +3 -3
  337. package/server/models/tdttco_tt.js +1 -1
  338. package/server/models/tdttno.js +3 -3
  339. package/server/models/tdttno_tt.js +2 -2
  340. package/server/models/templaterpt.js +1 -1
  341. package/server/models/templatestore.js +2 -2
  342. package/server/models/templatevoucher.js +1 -1
  343. package/server/models/tinhthanh.js +2 -2
  344. package/server/models/tokens.js +2 -2
  345. package/server/models/tontucthoi.js +2 -2
  346. package/server/models/trangthai.js +2 -2
  347. package/server/models/trangthaiapp.js +3 -2
  348. package/server/models/transaction.js +6 -5
  349. package/server/models/trialinfo.js +1 -1
  350. package/server/models/user.js +5 -6
  351. package/server/models/usergroup.js +4 -3
  352. package/server/models/vanchuyen.js +3 -2
  353. package/server/models/vat.js +2 -2
  354. package/server/models/vatra.js +3 -2
  355. package/server/models/vatvao.js +3 -2
  356. package/server/models/versioninfo.js +2 -2
  357. package/server/models/vietqrbanks.js +2 -2
  358. package/server/models/vsocai.js +3 -3
  359. package/server/models/waitevent.js +1 -1
  360. package/server/models/wallet.js +1 -1
  361. package/server/models/warranty.js +1 -1
  362. package/server/models/xaphuong.js +1 -1
  363. package/server/models/xhd.js +3 -2
  364. package/server/models/ytdd_ck.js +3 -2
  365. package/server/models/ytdd_dk.js +3 -2
  366. package/server/models/zalo.js +1 -1
  367. package/server/modules/vouchers/vo-bc1.js +7 -6
  368. package/server/modules/vouchers/vo-bn1.js +9 -9
  369. package/server/modules/vouchers/vo-dh2.js +25 -25
  370. package/server/modules/vouchers/vo-hd2.js +105 -105
  371. package/server/modules/vouchers/vo-pbl.js +12 -12
  372. package/server/modules/vouchers/vo-so1.js +60 -59
  373. package/server/modules/vouchers/vo-so7.js +50 -49
  374. package/server/modules/vouchers/vo-so9.js +44 -43
  375. package/server/workers/backupApp.js +1 -1
  376. package/server/workers/calcGrid.js +1 -0
  377. package/server/workers/customerOnImport.js +1 -1
  378. package/server/workers/dmvtOnImport.js +1 -1
  379. package/server/workers/excelParser.js +1 -1
  380. package/server/workers/inputWorker.js +2 -1
  381. package/server/workers/pushNotify.js +1 -1
  382. package/server/workers/reportWorker.js +2 -2
  383. package/server/workers/restoreApp.js +1 -1
  384. package/server/workers/runScript.js +1 -1
  385. package/server/workers/sendEmail.js +1 -1
  386. package/server/workers/webhook.js +1 -1
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "flexbiz-server",
3
3
  "main": "./server/app.js",
4
4
  "description": "Flexible Server",
5
- "version": "12.3.25",
5
+ "version": "12.3.27",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
package/server/app.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';require("events").EventEmitter.defaultMaxListeners=1E7;
2
- const express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),_global=require("./global"),User=global.getModel("user"),defaultConfigs=require("./defaultConfigs"),crypto=require("crypto"),mainServer=function($app$$,$options$$={cluster:!0,port:443,useSocket:!0},$callbackServer$$=null){const $configs$$=global.configs={...defaultConfigs,...$options$$.configs};$configs$$.admins||($configs$$.admins=
3
- $configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$options$$.port||$configs$$.PORT||443;require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,$res$$,
4
- $next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});var $compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=
2
+ const os=require("os"),express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),crypto=require("crypto"),mainServer=function($app$$,$options$$={cluster:!0,port:443,useSocket:!0},$callbackServer$$=null){const $configs$$=global.configs={...defaultConfigs,...$options$$.configs},$User$$=global.getModel("user");$configs$$.admins||
3
+ ($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$options$$.port||$configs$$.PORT||443;require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,
4
+ $res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});var $compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=
5
5
  require("cookie-parser");$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));$res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("compression");
6
6
  $app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=$req$jscomp$2_size$$.headers["content-lenght"])&&$req$jscomp$2_size$$>$limitFileSize$$)return $res$$.status(400).send({error:"File too large"});$next$$()});$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=
7
7
  require("multer")({dest:$compress_cookieParser_morgan_multer_root_dir_uploads_session$$,limits:{files:1,fileSize:$limitFileSize$$}});$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$);$app$$.use(cors({credentials:!0,exposedHeaders:["set-cookie","uid"],origin:($origin$$,$callback$$)=>{$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});!0!==$options$$.lite&&($app$$.use("/",express.static($configs$$.paths.public||__dirname+"/public")),$app$$.use("/admin",express.static($configs$$.paths.admin||
@@ -9,11 +9,11 @@ __dirname+"/admin")),$app$$.use("/templates",express.static($configs$$.paths.tem
9
9
  require("rotating-file-stream");const $logDirectory$$=$configs$$.paths.log||__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$accessLogStream_rfs$$=$accessLogStream_rfs$$("access.log",{interval:"1d",path:$logDirectory$$});$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$("combined",{stream:$accessLogStream_rfs$$,skip:function($req$$,$res$$){return 400>$res$$.statusCode}}));$app$$.use(function($err$$,$req$$,$res$$,$next$$){console.error($err$$.stack);
10
10
  $res$$.status(500).send("Server Error!")});global.mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}).then(async()=>{console.log("Connected to Database");const $redis$$=require("redis");global.clientRedis=$redis$$.createClient();global.clientRedis.on("error",$err$$=>console.error("Redis Client Error",$err$$));global.clientRedis.on("end",()=>{console.error("Redis connection closed.")});global.clientRedis.on("connect",function(){console.log("redis connected");0!=$options$$.createRedisCache&&
11
11
  require("./libs/redis-cache").set();$options$$.start_abci_handler&&global.getModel("assabcihandler").start();!0!==$options$$.lite?require("./route")($app$$,()=>{if(!1!==$options$$.createServer){var $StaticPool_StaticPool$jscomp$1_StaticPool$$=require("sticky-session");if($configs$$.use_ssl){var $server_sslConfig$$=require("./sslConfig");$server_sslConfig$$=https.createServer($server_sslConfig$$($options$$.sslDir),$app$$)}else $server_sslConfig$$=http.createServer($app$$);$server_sslConfig$$.timeout=
12
- 6E5;!1!==$options$$.useSocket?User.initSocket($server_sslConfig$$):User.initClientSockets();if(!1!==$options$$.cluster){if(!$StaticPool_StaticPool$jscomp$1_StaticPool$$.listen($server_sslConfig$$,global.port))$server_sslConfig$$.once("listening",function(){console.log("server started on",global.port)});$StaticPool_StaticPool$jscomp$1_StaticPool$$=require("cluster");$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+$worker$$.process.pid+
12
+ 6E5;!1!==$options$$.useSocket?$User$$.initSocket($server_sslConfig$$):$User$$.initClientSockets();if(!1!==$options$$.cluster){if(!$StaticPool_StaticPool$jscomp$1_StaticPool$$.listen($server_sslConfig$$,global.port))$server_sslConfig$$.once("listening",function(){console.log("server started on",global.port)});$StaticPool_StaticPool$jscomp$1_StaticPool$$=require("cluster");$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+$worker$$.process.pid+
13
13
  " died",$code$$,$signal$$)});$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("online",function($worker$$){console.info("worker "+$worker$$.process.pid+" is online")})}else $server_sslConfig$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")})}$options$$.start_input_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.inputMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||
14
- 0,5,3E5),global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("load input data pool")}));$options$$.start_import_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,5,36E5),global.importDataMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("load import data pool")}));
15
- $options$$.start_report_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,5,3E5),global.reportMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("load report pool")}));$callbackServer$$&&$callbackServer$$()}):require("./route")($app$$,()=>{$callbackServer$$&&$callbackServer$$()},!0)})}).catch($err$$=>
16
- {console.log("Not Connected to Database ERROR! ",$err$$)});return $app$$};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});process.on("uncaughtException",function($err$jscomp$3_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);console.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
14
+ 0,os.cpus().length,3E5,2),global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Crud pool ready")}));$options$$.start_import_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,2,36E5),global.importDataMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Import pool ready")}));
15
+ $options$$.start_report_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,os.cpus().length,3E5,2),global.reportMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Report pool ready")}));$callbackServer$$&&$callbackServer$$()}):require("./route")($app$$,()=>{$callbackServer$$&&$callbackServer$$()},
16
+ !0)})}).catch($err$$=>{console.log("Not Connected to Database ERROR! ",$err$$)});return $app$$};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});process.on("uncaughtException",function($err$jscomp$3_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);console.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
17
17
  Error: ${$err$jscomp$3_error$$.message}
18
18
  Stack: ${$err$jscomp$3_error$$.stack}
19
19
  `;try{const $logDirectory$$=__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);fs.writeFile(`${$logDirectory$$}/error-${(new Date).getTime()}.txt`,$err$jscomp$3_error$$,()=>{console.log("wrote log error")})}catch($e$$){console.log($e$$)}process.exit(1)});module.exports=mainServer;
package/server/cluster.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';require("events").EventEmitter.defaultMaxListeners=1E7;
2
- const express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),crypto=require("crypto"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),sslConfig=require("./sslConfig"),clusterServer=function($app$$,$sslDir$$,$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$={},$_port_accessLogStream_rfs$$=9999,$options$$={start_import_data_pool:!1,start_report_pool:!0,
3
- useAgenda:!0,createRedisCache:!0}){const $configs$$=global.configs={...defaultConfigs,...$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$,cluster:0!=$options$$.cluster};$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$_port_accessLogStream_rfs$$;require("moment-timezone").tz.setDefault($configs$$.timezone||
2
+ const os=require("os"),express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),crypto=require("crypto"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),sslConfig=require("./sslConfig"),clusterServer=function($app$$,$sslDir$$,$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$={},$_port_accessLogStream_rfs$$=9999,$options$$={start_import_data_pool:!1,
3
+ start_report_pool:!0,useAgenda:!0,createRedisCache:!0}){const $configs$$=global.configs={...defaultConfigs,...$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$,cluster:0!=$options$$.cluster};$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$_port_accessLogStream_rfs$$;require("moment-timezone").tz.setDefault($configs$$.timezone||
4
4
  "Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,$res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",
5
5
  resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("cookie-parser");$app$$.use($_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));
6
6
  $res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("compression");$app$$.use($_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=
@@ -14,9 +14,9 @@ function($error$$){if($error$$)return console.log($error$$);console.log("created
14
14
  ($init_system_data_server$$=!0);for(let $i$$=0;$i$$<$configs$$.adminUsers.length;$i$$++){let $adminUser$$=$configs$$.adminUsers[$i$$],$u$$=await $StaticPool_StaticPool$jscomp$1_StaticPool$$.findOne({email:$adminUser$$.email});$u$$||($adminUser$$.local={name:$adminUser$$.name,email:$adminUser$$.email,active:!0},$u$$=new $StaticPool_StaticPool$jscomp$1_StaticPool$$($adminUser$$),$u$$.local.password=$u$$.generateHash($adminUser$$.email+$adminUser$$.defaultPassword),$u$$.save(function($error$$,$user$$){if($error$$)return console.error($error$$);
15
15
  $user$$&&console.log("da tao thanh cong user "+$user$$.email)}))}const $async$$=require("async");$init_system_data_server$$&&$initSysData$$();require("./route")($app$$);$init_system_data_server$$=$configs$$.use_ssl?https.createServer(sslConfig($sslDir$$),$app$$):http.createServer($app$$);$init_system_data_server$$.timeout=6E5;$StaticPool_StaticPool$jscomp$1_StaticPool$$.initSocket($init_system_data_server$$);if(!1!==$options$$.cluster){if(!require("sticky-session").listen($init_system_data_server$$,
16
16
  global.port))$init_system_data_server$$.once("listening",function(){console.log("server cluster started on",global.port)});$StaticPool_StaticPool$jscomp$1_StaticPool$$=require("cluster");$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+$worker$$.process.pid+" died",$code$$,$signal$$)});$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("online",function($worker$$){console.info("worker "+$worker$$.process.pid+" is online");global.clientRedis.set("lastworker",
17
- JSON.stringify({pid:$worker$$.process.pid}))})}else $init_system_data_server$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")});$options$$.start_input_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.inputMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,5,3E5),global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("load input data pool")}));
18
- $options$$.start_import_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,5,36E5),global.importDataMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.error("load import data pool")}));$options$$.start_report_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),
19
- global.reportMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,5,3E5),global.reportMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.error("load report pool")}))})}).catch($err$$=>{console.error("Not Connected to Database ERROR!",$err$$)})};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});
17
+ JSON.stringify({pid:$worker$$.process.pid}))})}else $init_system_data_server$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")});$options$$.start_input_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.inputMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",0,os.cpus().length,3E5,2),global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Crud pool ready")}));
18
+ $options$$.start_import_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",0,2,36E5),global.importDataMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.error("Import pool ready")}));$options$$.start_report_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=
19
+ new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/reportWorker.js",0,os.cpus().length,3E5,2),global.reportMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.error("Report pool ready")}))})}).catch($err$$=>{console.error("Not Connected to Database ERROR!",$err$$)})};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});
20
20
  process.on("uncaughtException",function($err$jscomp$3_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);console.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
21
21
  Error: ${$err$jscomp$3_error$$.message}
22
22
  Stack: ${$err$jscomp$3_error$$.stack}
@@ -34,7 +34,7 @@ controller.prototype.get=function($route_name$$,$shareRoute$$=!1){const $ctrl$$=
34
34
  user:$user$$,params:$params$$}=$req$$;try{handlers.findHandler($ctrl$$,{query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$user_agent$$,ip:$ip$$,shareRoute:$shareRoute$$,originalUrl:$req$$.originalUrl},($e$jscomp$16_result$$,$returnvalue$$)=>{if($e$jscomp$16_result$$)return $res$$.status(400).send($e$jscomp$16_result$$);({result:$e$jscomp$16_result$$}=$returnvalue$$);if(0==$e$jscomp$16_result$$.length)return $res$$.status(404).send({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});
35
35
  $res$$.send($e$jscomp$16_result$$[0])})}catch($e$$){console.error($e$$),$res$$.status(400).send($e$$)}})};
36
36
  controller.prototype.postAgainHandler=function($user$$,$condition$$,$callback$jscomp$0$$,$options$$={req:null}){let $model$$=this.model,$ctrl$$=this;if(!$ctrl$$.post)return $callback$jscomp$0$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n xong"});const $update_tk_vt$$=$condition$$.update_tk_vt;delete $condition$$.update_tk_vt;const $user_update$$={date_updated:new Date,user_updated:$user$$.email};$model$$.find($condition$$).sort({ngay_ct:1}).lean().exec(function($e$jscomp$0$$,
37
- $objsrepost$$){console.log("start repost",$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);setImmediate(()=>{if($e$jscomp$0$$)return console.error("postAgain: find",$e$jscomp$0$$),$callback$jscomp$0$$({error:$e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$});async.mapSeries($objsrepost$$,function($obj$$,$callback$$){setImmediate(async()=>{console.log("postAgain: handle data before post",$obj$$.ma_ct,$obj$$.so_ct,$obj$$.ngay_ct,"by",$user$$.email);if($ctrl$$.reposting)try{await $ctrl$$.reposting($user$$,
37
+ $objsrepost$$){console.log("start repost",$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);setImmediate(()=>{if($e$jscomp$0$$)return console.error("postAgain: find",$e$jscomp$0$$),$callback$jscomp$0$$({error:$e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$});async.map($objsrepost$$,function($obj$$,$callback$$){setImmediate(async()=>{console.log("postAgain: handle data before post",$obj$$.ma_ct,$obj$$.so_ct,$obj$$.ngay_ct,"by",$user$$.email);if($ctrl$$.reposting)try{await $ctrl$$.reposting($user$$,
38
38
  $obj$$)}catch($e$$){return $callback$$({error:"Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u tr\u01b0\u1edbc khi repost ch\u1ee9ng t\u1eeb:"+$obj$$.so_ct+", L\u1ed7i: "+($e$$.message||$e$$.error||"")})}$update_tk_vt$$&&$obj$$.details&&(console.log("postAgain: update tk_vt..."),await $obj$$.details.filter($d$$=>$d$$.ma_vt).asyncJoinModel2($obj$$.id_app,global.getModel("dmvt"),{where:"ma_vt",fields:"tk_vt"}),$user_update$$.details=$obj$$.details);try{console.log("postAgain: update voucher..."),
39
39
  await $model$$.updateOne({_id:$obj$$._id},{...$user_update$$})}catch($e$$){return console.error("postAgain: error update data before repost",$e$$),$callback$$({error:"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u ch\u1ee9ng t\u1eeb "+$obj$$.so_ct+",Error:"+$e$$.message||$e$$.error||""})}console.log("postAgain: posting...");postData($obj$$,$ctrl$$,function($e$$,$rs$$){console.log("postAgain: reported",$obj$$.ma_ct,$obj$$.so_ct,$obj$$.ngay_ct,"by",$user$$.email);if($e$$)return $callback$$({error:$e$$.message||
40
40
  $e$$.error||"Kh\u00f4ng th\u1ec3 post s\u1ed5 s\u00e1ch ch\u1ee9ng t\u1eeb:"+$obj$$.so_ct});$callback$$(null,$rs$$)},{req:$options$$.req})})},function($e$$){if($e$$)return console.error("postAgain: Error",$e$$),$callback$jscomp$0$$({error:$e$$.message||$e$$.error||$e$$});console.log("postAgain: finished",$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);$callback$jscomp$0$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n xong"})})})})};
@@ -40,15 +40,15 @@ if(0>$str_func$$.indexOf("async ")){0>$str_func$$.indexOf("return ")&&($str_func
40
40
  })`,$admins_of_user_sandbox_us$$)();_.isArray($cust_users_will_receive$$)?$users_will_receive$$=$cust_users_will_receive$$:console.error("handle user will receive notify:",$cust_users_will_receive$$,$p$jscomp$0$$.handle_receivers)}}catch($e$$){console.error("pushNotification",$e$$)}}$ctrl$$.options||($ctrl$$.options={});$ctrl$$.options.onEmitEvent||($ctrl$$.options.onEmitEvent=($obj$$,$users_will_receive$$,$next$$,$_notificationData$$)=>{$next$$(null,$users_will_receive$$,$_notificationData$$)});
41
41
  $ctrl$$.options.onEmitEvent(Object.assign({},$obj$jscomp$0$$),$users_will_receive$$,($e$$,$_users_will_receive$$,$_notificationData$$)=>{setImmediate(()=>{if($e$$)return console.error("Error emit events",$e$$);$_users_will_receive$$=_.uniq($_users_will_receive$$);0<$_users_will_receive$$.length&&app.emitEvent($obj$jscomp$0$$.id_app,`${$ctrl$$.name.toLowerCase()}:${$eventName$$}`,$_notificationData$$||$notificationData$$,$exclude_token$$,$_users_will_receive$$,!$_justFireEvents$$)})},Object.assign({},
42
42
  $notificationData$$),Object.assign({},$p$jscomp$0$$))})}))}})},PostBook=require("../libs/post-book"),Sokho=global.getModel("sokho"),Sokhott=global.getModel("sokhott"),Sokhokhongton=global.getModel("sokhokhongton"),Tdttno=global.getModel("tdttno"),Tdttno_tt=global.getModel("tdttno_tt"),Tdttco_tt=global.getModel("tdttco_tt"),Tdttco=global.getModel("tdttco"),Vatra=global.getModel("vatra"),Vatvao=global.getModel("vatvao"),deletePost=function($user$$,$obj$$,$callback$jscomp$1$$){$obj$$.toObject&&($obj$$=
43
- $obj$$.toObject());if(!$obj$$._id)return console.error("Error when delete post: obj does not have _id",$obj$$),$callback$jscomp$1$$("Error when delete post: obj does not have _id",$obj$$);async.series({delete_model_books_registed:$callback$jscomp$0$$=>{setImmediate(()=>{if(!global.model_books)return $callback$jscomp$0$$();async.mapSeries(global.model_books.filter($d$$=>"sokho"!==$d$$&&"sokhonpp"!==$d$$&&"sokhott"!==$d$$&&"sokhokhongton"!==$d$$&&"socai"!==$d$$&&"socaitmp"!==$d$$),($bookName$$,$callback$$)=>
43
+ $obj$$.toObject());if(!$obj$$._id)return console.error("Error when delete post: obj does not have _id",$obj$$),$callback$jscomp$1$$("Error when delete post: obj does not have _id",$obj$$);async.series({delete_model_books_registed:$callback$jscomp$0$$=>{setImmediate(()=>{if(!global.model_books)return $callback$jscomp$0$$();async.map(global.model_books.filter($d$$=>"sokho"!==$d$$&&"sokhonpp"!==$d$$&&"sokhott"!==$d$$&&"sokhokhongton"!==$d$$&&"socai"!==$d$$&&"socaitmp"!==$d$$),($bookName$$,$callback$$)=>
44
44
  {setImmediate(()=>{let $book$$=mongoose.models[$bookName$$.toLowerCase()];$book$$?$book$$.deleteMany({id_ct:$obj$$._id.toString()},$e$$=>{$callback$$($e$$)}):$callback$$()})},$e$$=>{$callback$jscomp$0$$($e$$)})})},sk:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokho,function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},sktt:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokhott,
45
45
  function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},skkhongton:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokhokhongton,function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},sknpp:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,global.getModel("sokhonpp"),function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},
46
46
  vsc:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vsocai"))return $callback$$();vsocai.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},sc:$callback$$=>{setImmediate(()=>{Socai.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},sctmp:$callback$$=>{setImmediate(()=>{global.getModel("socaitmp").deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},vatra:$callback$$=>
47
47
  {setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vatra"))return $callback$$();Vatra.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},vatvao:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vatvao"))return $callback$$();Vatvao.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttno:$callback$$=>{setImmediate(async()=>{let $tdtts$$=await Tdttno.find({id_ct:$obj$$._id.toString()},
48
48
  {_id:1,tat_toan:1}).lean();if(0<$tdtts$$.length){if(0<$tdtts$$.filter($t$$=>$t$$.tat_toan).length)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttno_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}Tdttno.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttco:$callback$$=>{setImmediate(async()=>{let $tdtts$$=await Tdttco.find({id_ct:$obj$$._id.toString()},{_id:1,tat_toan:1}).lean();if(0<$tdtts$$.length){if(0<$tdtts$$.filter($t$$=>
49
- $t$$.tat_toan).length)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttco_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}Tdttco.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttno_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttno_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);$obj$$.tdttnos?async.mapSeries($obj$$.tdttnos,
49
+ $t$$.tat_toan).length)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttco_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}Tdttco.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttno_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttno_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);$obj$$.tdttnos?async.map($obj$$.tdttnos,
50
50
  function($detail$$,$callback$$){setImmediate(()=>{Tdttno.findOneAndUpdate({_id:$detail$$.id_tdtt},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){$e$$&&console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})},tdttco_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttco_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);
51
- $obj$$.tdttcos?async.mapSeries($obj$$.tdttcos,function($detail$$,$callback$$){setImmediate(()=>{Tdttco.findOneAndUpdate({_id:$detail$$.id_tdtt},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){$e$$&&console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})}},function($e$$){$e$$&&console.error("delete books",$e$$);$callback$jscomp$1$$($e$$,$obj$$)})},runWebhooks=async($ctrl$$,$obj$$,$action$$,$voucher_options$$)=>
51
+ $obj$$.tdttcos?async.map($obj$$.tdttcos,function($detail$$,$callback$$){setImmediate(()=>{Tdttco.findOneAndUpdate({_id:$detail$$.id_tdtt},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){$e$$&&console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})}},function($e$$){$e$$&&console.error("delete books",$e$$);$callback$jscomp$1$$($e$$,$obj$$)})},runWebhooks=async($ctrl$$,$obj$$,$action$$,$voucher_options$$)=>
52
52
  {$voucher_options$$||($voucher_options$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$ctrl$$.name},{option:1}).lean()||{}).option);if($voucher_options$$&&$voucher_options$$.option_webhooks&&($ctrl$$=$voucher_options$$.option_webhooks.find($w$$=>$w$$.action.toUpperCase()===$action$$.toUpperCase()&&$w$$.url))){$voucher_options$$=path.dirname(__dirname)+"/workers/webhook.js";if(!fs.existsSync($voucher_options$$))return console.error("webhook process is not exitst");global.webhookPool||
53
53
  (global.webhookPool=new StaticPool($voucher_options$$,0,1));global.webhookPool.exec({data:$obj$$,webhook_configs:$ctrl$$},$response$$=>{$response$$.error?console.error("runWebhooks",$response$$.error):console.log($response$$)})}},getNextSequence=async function($id_app$$,$ma_ct$$,$field$$,$callback$$,$options$$={}){var $condition_qct_qcts$$={status:!0,field:$field$$,id_app:$id_app$$,$and:[{$or:[{ma_ct:"#",ma_ct_khac:{$regex:$ma_ct$$,$options:"i"}},{cac_ma_ct:$ma_ct$$.toLowerCase()},{ma_ct:$ma_ct$$.toUpperCase()}]}]};
54
54
  $options$$.id_qct&&($condition_qct_qcts$$._id=$options$$.id_qct);if($options$$.ngay_ct){let $start_date$$=moment($options$$.ngay_ct).startOf("date").toDate(),$end_date$$=moment($options$$.ngay_ct).endOf("date").toDate();$condition_qct_qcts$$.$and.push({$or:[{tu_ngay:null},{tu_ngay:{$lte:$end_date$$}}]});$condition_qct_qcts$$.$and.push({$or:[{den_ngay:null},{den_ngay:{$gte:$start_date$$}}]})}$options$$.toObject&&($options$$=$options$$.toObject());$condition_qct_qcts$$=await dmqct.find($condition_qct_qcts$$).lean();
@@ -8,6 +8,6 @@ var $columns$$=$req$$.columns;$columns$$._error||($columns$$._error="Error");let
8
8
  let $data_new$$=[],$row_master$$,$row_master_exists$$;async.mapSeries($data$$,($row$$,$cb$$)=>{setImmediate(()=>{$row_master$$={exfields:{}};$row_master_exists$$=null;$master_columns$$.forEach(function($column$$){if(0===$column$$.indexOf("exfields.")){let $_c$$=$column$$.replace("exfields.","");$row_master$$.exfields[$_c$$]=$row$$[$column$$]}else $row_master$$[$column$$]=$row$$[$column$$]});for(let $i$$=0;$i$$<$data_new$$.length;$i$$++){let $m$$=$data_new$$[$i$$],$is_eq$$=!0;$master_columns$$.forEach(function($column$$){_.isEqual($m$$[$column$$],
9
9
  $row_master$$[$column$$])||($is_eq$$=!1)});$is_eq$$&&($row_master_exists$$=$m$$)}$row_master_exists$$?$row_master$$=$row_master_exists$$:$data_new$$.push($row_master$$);let $row_detail$$;for(let $detail_name$$ in $details$$)$row_detail$$={},$details$$[$detail_name$$].columns.forEach(function($column$$){$row$$[$detail_name$$+"$"+$column$$]&&($row_detail$$[$column$$]=$row$$[$detail_name$$+"$"+$column$$])}),$row_master$$[$detail_name$$]||($row_master$$[$detail_name$$]=[]),0<_.keys($row_detail$$).length&&
10
10
  $row_master$$[$detail_name$$].push($row_detail$$);$cb$$()})},()=>{$req$$.data=$data_new$$;setImmediate(()=>{$callback$$()})})},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data||[],$columns$$=$req$$.columns;for(let $row$$ of $data$$){let $_first$$=$row$$._first;$_first$$&&0<$_first$$.length&&_.extend($row$$,$_first$$[0])}const $log$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"IMPORTEXCEL",data:{data:$data$$,columns:$columns$$}},
11
- $req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("parse value",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,async($e$$,$rs$$)=>{$log$$.result={error:$e$$,result:$rs$$};await $log$$.save();if($e$$)return console.error("import",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,
12
- $callback$$($e$$)):$callback$$({error:$e$$.message||$e$$,message:$e$$.message||$e$$});0===$rs$$.rows_error.length?($req$$.result=$rs$$,$callback$$()):($e$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", "),$callback$$({message:$e$$,error:$rs$$.error||$rs$$}))},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};
13
- module.exports=importFromExcel;
11
+ $req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("parse value",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,async($e$$,$rs$$)=>{$log$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $log$$.save();if($e$$)return console.error("import",$e$$),$e$$.error?($e$$.message=
12
+ $e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.message||$e$$,message:$e$$.message||$e$$});0===$rs$$.rows_error.length?($req$$.result=$rs$$,$callback$$()):($e$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", "),$callback$$({message:$e$$,error:$rs$$.error||$rs$$}))},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,
13
+ $req$$.result)})};module.exports=importFromExcel;
@@ -5,6 +5,6 @@ configs.google_credentials;if(!$app_google_credentials_id_app$$)return $callback
5
5
  range:$range$$});if(0==$response$$.data.values.length)return $callback$$({error:"Sheet n\u00e0y kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u"});let $columns$$=$response$$.data.values[0].map($c$$=>{let $field$$=$listinfo$$.fields.find($f$$=>$f$$.name.toLowerCase()==($c$$||"").toString().toLowerCase());return $field$$?$field$$.name:($field$$=$listinfo$$.fields.find($f$$=>$f$$.header.toLowerCase()==($c$$||"").toString().toLowerCase()))?$field$$.name:$c$$}),$data$$=$response$$.data.values.slice(1).map($row$$=>
6
6
  {let $n_row$$={};$columns$$.forEach(($c$$,$index$$)=>{$n_row$$[$c$$]=$row$$[$index$$]});return $n_row$$});$req$$.data=$data$$;$callback$$()}catch($e$$){return $error$$=(($e$$.response||{}).data||{}).error||$e$$,$credentials$$&&403==$error$$.code?$callback$$({error:`Kh\u00f4ng th\u1ec3 truy c\u1eadp v\u00e0o google sheet. H\u00e3y ph\u00e2n quy\u1ec1n cho t\u00e0i kho\u1ea3n ${$credentials$$.client_email} c\u00f3 quy\u1ec1n \u0111\u1ecdc google sheet tr\u00ean`}):$callback$$($error$$)}})},function($callback$$){let $data$$=
7
7
  $req$$.data;if($ctrl$$.options.onImport)$ctrl$$.options.onImport($req$$.user,$data$$,[],function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return console.error("onImport from json:",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$new_data$$||$data$$;$callback$$()})});else $req$$.data=$data$$,$callback$$()},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data;const $log$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,
8
- id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$log$$.result={error:$e$$,result:$rs$$};await $log$$.save();if($e$$)return console.error("import from json",
9
- $ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||
10
- "true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromGs;
8
+ id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$log$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $log$$.save();
9
+ if($e$$)return console.error("import from json",$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},
10
+ {replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromGs;
@@ -2,5 +2,5 @@
2
2
  $callback$$()}catch($e$$){return console.error("importFromJson",$e$$),$callback$$({error:$e$$.message||$e$$})}}else if($req$$.body){if(!$req$$.body.map)return $callback$$({error:"D\u1eef li\u1ec7u \u0111\u1ec3 import ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng"});try{$req$$.data=$req$$.body.map($row_rs$$=>{$row_rs$$=_.isString($row_rs$$)?JSONParser($row_rs$$):$row_rs$$;delete $row_rs$$.id_app;delete $row_rs$$._id;return $row_rs$$})}catch($e$$){return console.error("importFromJson",$e$$),$callback$$({error:$e$$.message||
3
3
  $e$$})}$callback$$()}else return $callback$$({error:"Kh\u00f4ng t\u00ecm th\u1ea5y d\u1eef li\u1ec7u c\u1ea7n import"})},function($callback$$){let $data$$=$req$$.data;if($ctrl$$.options.onImport)$ctrl$$.options.onImport($req$$.user,$data$$,[],function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return console.error("onImport from json:",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$new_data$$||$data$$;$callback$$()})});else $req$$.data=$data$$,$callback$$()},
4
4
  function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data;const $logData$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,
5
- $req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$logData$$.result=$rs$$;await $logData$$.save();if($e$$)return console.error("import from json",$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>
6
- [...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromJSON;
5
+ $req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$logData$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $logData$$.save();if($e$$)return console.error("import from json",$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=
6
+ [...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromJSON;
@@ -1,20 +1,21 @@
1
1
  'use strict';const async=require("async"),_=require("lodash"),{JSONParser}=require("../libs/utils"),createHandler=require("./createHandler"),create=async($user$$,$ctrl$$,$data$$,$callback$$,$id_be_supply_by_user$$,$req$$,$action$$="add")=>{$req$$=$req$$||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.id_be_supply_by_user=$id_be_supply_by_user$$;$req$$.action=$action$$;return createHandler($ctrl$$,$req$$,$callback$$)},updateHandler=require("./updateHandler"),update=async function($user$$,$ctrl$$,
2
2
  $id$$,$data$$,$callback$$,$action$$,$req$$,$_action$$="update"){$req$$=$req$$||{};$req$$.action=$action$$;$req$$._action=$_action$$;$req$$.user=$user$$;$req$$.id=$id$$;$req$$.data=$data$$;return updateHandler($ctrl$$,$req$$,$callback$$)};
3
3
  async function importHandler($user$$,$ctrl$$,$id_app$$,$data$$,$callback_main$$,$options$$={replace:!0,req:null}){const $model$$=$ctrl$$.model;let $replace$$=$options$$.replace,$rows_error$$=[];var $custs_listInfo_tk_dt$$=global.getModel("listinfo");let $info$$=await $custs_listInfo_tk_dt$$.findOne({code:$ctrl$$.name.toLowerCase()}).lean(),$modelJoins$$=[];$info$$&&(await $custs_listInfo_tk_dt$$.updateModel($info$$,$ctrl$$.model),$modelJoins$$=($info$$.fields||[]).filter($f$$=>$f$$.ref_model&&"_id"==
4
- $f$$.ref_field));$data$$=$data$$.filter($row$$=>{let $has_data$$=!1;for(let $key$$ in $row$$)if($row$$[$key$$]){$has_data$$=!0;break}return $has_data$$});$custs_listInfo_tk_dt$$=[];$model$$.schema.paths.ma_kh&&($custs_listInfo_tk_dt$$=$data$$.filter($r$$=>$r$$.ten_kh));$model$$.schema.paths.details&&($custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kh)));$custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.map($kh$$=>
5
- {$kh$$.ma_kh||($kh$$.ma_kh=$kh$$.ten_kh.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kh:$kh$$.ma_kh,ten_kh:$kh$$.ten_kh,dia_chi:$kh$$.dia_chi||"",dien_thoai:$kh$$.dien_thoai||"",ma_so_thue:$kh$$.ma_so_thue||""}});$custs_listInfo_tk_dt$$=await $custs_listInfo_tk_dt$$.asyncGroupBy(["ma_kh","ten_kh","dia_chi","dien_thoai","ma_so_thue"],[]);for($dvts_kh$$ of $custs_listInfo_tk_dt$$)$dvts_kh$$.id_app=$id_app$$,$dvts_kh$$.user_created=$user$$.email,await global.getModel("customer").asyncCreateCustomer($dvts_kh$$);
6
- var $dvts_kh$$=[];$model$$.schema.paths.ma_kho&&($dvts_kh$$=$data$$.filter($r$$=>$r$$.ten_kho));$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kho)));$dvts_kh$$=$dvts_kh$$.map($kh$$=>{$kh$$.ma_kho||($kh$$.ma_kho=$kh$$.ten_kho.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kho:$kh$$.ma_kho,ten_kho:$kh$$.ten_kho}});$dvts_kh$$=await $dvts_kh$$.asyncGroupBy(["ma_kho",
7
- "ten_kho"],[]);for($kho_vts$$ of $dvts_kh$$)$kho_vts$$.id_app=$id_app$$,$kho_vts$$.user_created=$user$$.email,$kho_vts$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho_vts$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho_vts$$);var $kho_vts$$=[];$model$$.schema.paths.ma_vt&&($kho_vts$$=$data$$.filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt));$model$$.schema.paths.details&&($kho_vts$$=$kho_vts$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),
8
- []).filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)));$kho_vts$$=$kho_vts$$.map($vt$$=>({ma_vt:$vt$$.ma_vt,ten_vt:$vt$$.ten_vt,ma_dvt:$vt$$.ma_dvt||"Kh\u00f4ng \u0111\u01a1n v\u1ecb t\u00ednh",user_created:$user$$.email}));$kho_vts$$=await $kho_vts$$.asyncGroupBy(["ma_vt","ten_vt","ma_dvt"],[]);if(0<$kho_vts$$.length){$dvts_kh$$=await $kho_vts$$.asyncGroupBy(["ma_dvt"],[]);for($dvt_tk_vt$$ of $dvts_kh$$)$dvt_tk_vt$$.id_app=$id_app$$,$dvt_tk_vt$$.ten_dvt=$dvt_tk_vt$$.ma_dvt,$dvt_tk_vt$$.status=!0,$dvt_tk_vt$$.user_created=
9
- $user$$.email,await global.getModel("dmdvt").findOne({ma_dvt:$dvt_tk_vt$$.ma_dvt,id_app:$id_app$$}).lean()||(console.log("create dvt",$dvt_tk_vt$$),await global.getModel("dmdvt").create($dvt_tk_vt$$));var $dvt_tk_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^156",$options:"i"}},{tk:1}).lean()||{}).tk;$dvts_kh$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^632",$options:"i"}},{tk:1}).lean()||{}).tk;$custs_listInfo_tk_dt$$=(await global.getModel("account").findOne({id_app:$id_app$$,
10
- loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(let $vt$$ of $kho_vts$$)$vt$$.id_app=$id_app$$,$vt$$.tk_vt=$dvt_tk_vt$$,$vt$$.tk_gv=$dvts_kh$$,$vt$$.tk_dt=$custs_listInfo_tk_dt$$,$vt$$.status=!0,$vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$vt$$.ma_vt,id_app:$id_app$$}).lean()||(console.log("create product",$vt$$),await global.getModel("dmvt").create($vt$$),await global.getModel("dmqddvt").create({id_app:$id_app$$,status:!0,ma_vt:$vt$$.ma_vt,ma_dvt:$vt$$.ma_dvt,
11
- tu:1,ma:1}))}$data$$.forEach($r$$=>{delete $r$$.ten_dvcs;global.mongoose.Types.ObjectId.isValid($r$$._id)&&delete $r$$._id});await $data$$.filter($r$$=>$r$$.ma_dvcs).asyncJoinModel2($id_app$$,global.getModel("dvcs"),{where:{ma_dvcs:"_id"},fields:"ten_dvcs"});async.mapSeries($data$$,function($row$$,$callback$$){const $row_keys$$=Object.keys($row$$);$row_keys$$.filter($key$$=>$ctrl$$.model.schema.paths[$key$$]).forEach($key$$=>{let $data_type$$=$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase(),
12
- $data_value$$=$row$$[$key$$];if($data_value$$&&_.isString($data_value$$)&&("mixed"==$data_type$$||"array"==$data_type$$)&&($data_value$$=$data_value$$.trim(),0==$data_value$$.indexOf("[")||0==$data_value$$.indexOf("{")))try{$row$$[$key$$]=JSONParser($data_value$$)}catch($e$$){delete $row$$[$key$$],console.error("Error parse data",$e$$)}});setImmediate(async()=>{for(let $i$$=0;$i$$<$modelJoins$$.length;$i$$++){let $field_ref$$=$modelJoins$$[$i$$];if($row$$[$field_ref$$.name]){let $new_data_ref$$=await global.getModel("originimportid").findOne({id_app:$id_app$$,
13
- old_id:$row$$[$field_ref$$.name]}).lean();$new_data_ref$$&&($row$$[$field_ref$$.name]=$new_data_ref$$.new_id)}}delete $row$$.__v;let $old_id$$=$row$$._id;$row$$.ma_dvcs&&!$row$$.ten_dvcs&&delete $row$$.ma_dvcs;$row$$.id_app&&$id_app$$!=$row$$.id_app&&delete $row$$._id;delete $row$$.id_app;if($replace$$&&($ctrl$$.unique&&0<$ctrl$$.unique.length||$row$$._id)){let $query$$={};if($ctrl$$.unique&&0<$ctrl$$.unique.length){if($ctrl$$.options.unique_imp&&null!=$row$$[$ctrl$$.options.unique_imp]&&void 0!=
14
- $row$$[$ctrl$$.options.unique_imp]&&""!=$row$$[$ctrl$$.options.unique_imp])$query$$[$ctrl$$.options.unique_imp]=$row$$[$ctrl$$.options.unique_imp];else if($ctrl$$.unique.forEach(function($k$$){0<=$row_keys$$.indexOf($k$$)&&($query$$[$k$$]=$row$$[$k$$],void 0==$query$$[$k$$]&&delete $query$$[$k$$])}),1>Object.keys($query$$).length)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, D\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i \u0111\u1ee7 c\u00e1c gi\u00e1 tr\u1ecb:"+$ctrl$$.unique.join(","));
15
- 0!=$ctrl$$.require_id_app&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;$ctrl$$.model.find($query$$).lean().exec(function($error$$,$rss$$){if($error$$)return $callback$$($error$$);if(1<$rss$$.length)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, \u0111\u1ed1i t\u01b0\u1ee3ng "+Object.values($query$$).join("-")+" \u0111\u00e3 t\u1ed3n t\u1ea1i nhi\u1ec1u h\u01a1n m\u1ed9t l\u1ea7n");setImmediate(async()=>{let $foundObject$$;1===$rss$$.length&&($foundObject$$=$rss$$[0]);$foundObject$$?
16
- ($row$$.id_app=$foundObject$$.id_app,$row$$._id=$foundObject$$._id.toString(),($ctrl$$.unique||[]).forEach(function($k$$){$row$$[$k$$]=$foundObject$$[$k$$]}),update($user$$,$ctrl$$,$foundObject$$._id,$row$$,function($e$$){if($e$$){let $_e$$=$e$$;_.isArray($_e$$)||($_e$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$$})}$callback$$()},"import",$options$$.req,"import")):create($user$$,$ctrl$$,$row$$,function($e$$,$new_row$$){setImmediate(async()=>{if($e$$){var $_e$jscomp$1_i$$=
17
- $e$$;_.isArray($_e$jscomp$1_i$$)||($_e$jscomp$1_i$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$jscomp$1_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},{new:!0,upsert:!0}),$_e$jscomp$1_i$$=0;$_e$jscomp$1_i$$<$data$$.length;$_e$jscomp$1_i$$++){const $_r$$=$data$$[$_e$jscomp$1_i$$];
18
- for(let $key$$ in $_r$$)"_id"!=$key$$&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})})}else create($user$$,$ctrl$$,$row$$,function($e$$,$new_row$$){setImmediate(async()=>{if($e$$){console.error("error import data, creating...",$e$$);var $_e$jscomp$2_i$$=$e$$;_.isArray($_e$jscomp$2_i$$)||($_e$jscomp$2_i$$=[{error:$e$$.error||
19
- $e$$,code:$e$$.code}]);$rows_error$$.push({error:$_e$jscomp$2_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},{new:!0,upsert:!0}),$_e$jscomp$2_i$$=0;$_e$jscomp$2_i$$<$data$$.length;$_e$jscomp$2_i$$++){const $_r$$=$data$$[$_e$jscomp$2_i$$];for(let $key$$ in $_r$$)"_id"!=$key$$&&$_r$$[$key$$]==$old_id$$&&
20
- ($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})},function($error$$){setImmediate(()=>{if($error$$)return $callback_main$$($error$$);$callback_main$$(null,{rows_imported:$data$$.length-$rows_error$$.length,rows_error:$rows_error$$})})})}module.exports=importHandler;
4
+ $f$$.ref_field));$data$$=$data$$.filter($row$$=>{let $has_data$$=!1;for(let $key$$ in $row$$)if($row$$[$key$$]){$has_data$$=!0;break}return $has_data$$});if(1E4<$data$$.length)return $callback_main$$("S\u1ed1 d\u00f2ng import t\u1ed1i \u0111a 1 l\u1ea7n l\u00e0 10000.");console.log("\u0110ang import t\u1edbi",$ctrl$$.name,$data$$.length," d\u00f2ng d\u1eef li\u1ec7u...");$custs_listInfo_tk_dt$$=[];$model$$.schema.paths.ma_kh&&($custs_listInfo_tk_dt$$=$data$$.filter($r$$=>$r$$.ten_kh));$model$$.schema.paths.details&&
5
+ ($custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kh)));$custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.map($kh$$=>{$kh$$.ma_kh||($kh$$.ma_kh=$kh$$.ten_kh.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kh:$kh$$.ma_kh,ten_kh:$kh$$.ten_kh,dia_chi:$kh$$.dia_chi||"",dien_thoai:$kh$$.dien_thoai||"",ma_so_thue:$kh$$.ma_so_thue||""}});$custs_listInfo_tk_dt$$=await $custs_listInfo_tk_dt$$.asyncGroupBy(["ma_kh",
6
+ "ten_kh","dia_chi","dien_thoai","ma_so_thue"],[]);for($dvts_kh$$ of $custs_listInfo_tk_dt$$)$dvts_kh$$.id_app=$id_app$$,$dvts_kh$$.user_created=$user$$.email,await global.getModel("customer").asyncCreateCustomer($dvts_kh$$);var $dvts_kh$$=[];$model$$.schema.paths.ma_kho&&($dvts_kh$$=$data$$.filter($r$$=>$r$$.ten_kho));$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kho)));$dvts_kh$$=$dvts_kh$$.map($kh$$=>
7
+ {$kh$$.ma_kho||($kh$$.ma_kho=$kh$$.ten_kho.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kho:$kh$$.ma_kho,ten_kho:$kh$$.ten_kho}});$dvts_kh$$=await $dvts_kh$$.asyncGroupBy(["ma_kho","ten_kho"],[]);for($kho_vts$$ of $dvts_kh$$)$kho_vts$$.id_app=$id_app$$,$kho_vts$$.user_created=$user$$.email,$kho_vts$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho_vts$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho_vts$$);var $kho_vts$$=[];$model$$.schema.paths.ma_vt&&
8
+ ($kho_vts$$=$data$$.filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt));$model$$.schema.paths.details&&($kho_vts$$=$kho_vts$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)));$kho_vts$$=$kho_vts$$.map($vt$$=>({ma_vt:$vt$$.ma_vt,ten_vt:$vt$$.ten_vt,ma_dvt:$vt$$.ma_dvt||"Kh\u00f4ng \u0111\u01a1n v\u1ecb t\u00ednh",user_created:$user$$.email}));$kho_vts$$=await $kho_vts$$.asyncGroupBy(["ma_vt","ten_vt","ma_dvt"],[]);if(0<$kho_vts$$.length){$dvts_kh$$=
9
+ await $kho_vts$$.asyncGroupBy(["ma_dvt"],[]);for($dvt_tk_vt$$ of $dvts_kh$$)$dvt_tk_vt$$.id_app=$id_app$$,$dvt_tk_vt$$.ten_dvt=$dvt_tk_vt$$.ma_dvt,$dvt_tk_vt$$.status=!0,$dvt_tk_vt$$.user_created=$user$$.email,await global.getModel("dmdvt").findOne({ma_dvt:$dvt_tk_vt$$.ma_dvt,id_app:$id_app$$}).lean()||(console.log("create dvt",$dvt_tk_vt$$),await global.getModel("dmdvt").create($dvt_tk_vt$$));var $dvt_tk_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^156",$options:"i"}},
10
+ {tk:1}).lean()||{}).tk;$dvts_kh$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^632",$options:"i"}},{tk:1}).lean()||{}).tk;$custs_listInfo_tk_dt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(let $vt$$ of $kho_vts$$)$vt$$.id_app=$id_app$$,$vt$$.tk_vt=$dvt_tk_vt$$,$vt$$.tk_gv=$dvts_kh$$,$vt$$.tk_dt=$custs_listInfo_tk_dt$$,$vt$$.status=!0,$vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$vt$$.ma_vt,
11
+ id_app:$id_app$$}).lean()||(console.log("create product",$vt$$),await global.getModel("dmvt").create($vt$$),await global.getModel("dmqddvt").create({id_app:$id_app$$,status:!0,ma_vt:$vt$$.ma_vt,ma_dvt:$vt$$.ma_dvt,tu:1,ma:1}))}$data$$.forEach($r$$=>{delete $r$$.ten_dvcs;global.mongoose.Types.ObjectId.isValid($r$$._id)&&delete $r$$._id});await $data$$.filter($r$$=>$r$$.ma_dvcs).asyncJoinModel2($id_app$$,global.getModel("dvcs"),{where:{ma_dvcs:"_id"},fields:"ten_dvcs"});async.map($data$$,function($row$$,
12
+ $callback$$){const $row_keys$$=Object.keys($row$$);$row_keys$$.filter($key$$=>$ctrl$$.model.schema.paths[$key$$]).forEach($key$$=>{let $data_type$$=$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase(),$data_value$$=$row$$[$key$$];if($data_value$$&&_.isString($data_value$$)&&("mixed"==$data_type$$||"array"==$data_type$$)&&($data_value$$=$data_value$$.trim(),0==$data_value$$.indexOf("[")||0==$data_value$$.indexOf("{")))try{$row$$[$key$$]=JSONParser($data_value$$)}catch($e$$){delete $row$$[$key$$],
13
+ console.error("Error parse data",$e$$)}});setImmediate(async()=>{for(let $i$$=0;$i$$<$modelJoins$$.length;$i$$++){let $field_ref$$=$modelJoins$$[$i$$];if($row$$[$field_ref$$.name]){let $new_data_ref$$=await global.getModel("originimportid").findOne({id_app:$id_app$$,old_id:$row$$[$field_ref$$.name]}).lean();$new_data_ref$$&&($row$$[$field_ref$$.name]=$new_data_ref$$.new_id)}}delete $row$$.__v;let $old_id$$=$row$$._id;$row$$.ma_dvcs&&!$row$$.ten_dvcs&&delete $row$$.ma_dvcs;$row$$.id_app&&$id_app$$!=
14
+ $row$$.id_app&&delete $row$$._id;delete $row$$.id_app;if($replace$$&&($ctrl$$.unique&&0<$ctrl$$.unique.length||$row$$._id)){let $query$$={};if($ctrl$$.unique&&0<$ctrl$$.unique.length){if($ctrl$$.options.unique_imp&&null!=$row$$[$ctrl$$.options.unique_imp]&&void 0!=$row$$[$ctrl$$.options.unique_imp]&&""!=$row$$[$ctrl$$.options.unique_imp])$query$$[$ctrl$$.options.unique_imp]=$row$$[$ctrl$$.options.unique_imp];else if($ctrl$$.unique.forEach(function($k$$){0<=$row_keys$$.indexOf($k$$)&&($query$$[$k$$]=
15
+ $row$$[$k$$],void 0==$query$$[$k$$]&&delete $query$$[$k$$])}),1>Object.keys($query$$).length)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, D\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i \u0111\u1ee7 c\u00e1c gi\u00e1 tr\u1ecb:"+$ctrl$$.unique.join(","));0!=$ctrl$$.require_id_app&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;$ctrl$$.model.find($query$$).lean().exec(function($error$$,$rss$$){if($error$$)return $callback$$($error$$);if(1<$rss$$.length)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, \u0111\u1ed1i t\u01b0\u1ee3ng "+
16
+ Object.values($query$$).join("-")+" \u0111\u00e3 t\u1ed3n t\u1ea1i nhi\u1ec1u h\u01a1n m\u1ed9t l\u1ea7n");setImmediate(async()=>{let $foundObject$$;1===$rss$$.length&&($foundObject$$=$rss$$[0]);$foundObject$$?($row$$.id_app=$foundObject$$.id_app,$row$$._id=$foundObject$$._id.toString(),($ctrl$$.unique||[]).forEach(function($k$$){$row$$[$k$$]=$foundObject$$[$k$$]}),update($user$$,$ctrl$$,$foundObject$$._id,$row$$,function($e$$){if($e$$){let $_e$$=$e$$;_.isArray($_e$$)||($_e$$=[{error:$e$$.error||
17
+ $e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$$})}$callback$$()},"import",$options$$.req,"import")):create($user$$,$ctrl$$,$row$$,function($e$$,$new_row$$){setImmediate(async()=>{if($e$$){var $_e$jscomp$1_i$$=$e$$;_.isArray($_e$jscomp$1_i$$)||($_e$jscomp$1_i$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$jscomp$1_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,
18
+ old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},{new:!0,upsert:!0}),$_e$jscomp$1_i$$=0;$_e$jscomp$1_i$$<$data$$.length;$_e$jscomp$1_i$$++){const $_r$$=$data$$[$_e$jscomp$1_i$$];for(let $key$$ in $_r$$)"_id"!=$key$$&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})})}else create($user$$,
19
+ $ctrl$$,$row$$,function($e$$,$new_row$$){setImmediate(async()=>{if($e$$){console.error("error import data, creating...",$e$$);var $_e$jscomp$2_i$$=$e$$;_.isArray($_e$jscomp$2_i$$)||($_e$jscomp$2_i$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({error:$_e$jscomp$2_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},
20
+ {new:!0,upsert:!0}),$_e$jscomp$2_i$$=0;$_e$jscomp$2_i$$<$data$$.length;$_e$jscomp$2_i$$++){const $_r$$=$data$$[$_e$jscomp$2_i$$];for(let $key$$ in $_r$$)"_id"!=$key$$&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})},function($error$$){setImmediate(()=>{if($error$$)return $callback_main$$($error$$);console.log("\u0110\u00e3 import t\u1edbi",
21
+ $ctrl$$.name,$data$$.length," d\u00f2ng d\u1eef li\u1ec7u");$callback_main$$(null,{rows_imported:$data$$.length-$rows_error$$.length,rows_error:$rows_error$$})})})}module.exports=importHandler;
@@ -1,11 +1,11 @@
1
1
  'use strict';const async=require("async"),_=require("lodash"),redisCache=require("../libs/redis-cache"),view=async($user$$,$self$$,$rows$$,$next$$,$options$$)=>{const $model$$=$self$$.model;let $fields_load$$="";$options$$&&$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&($fields_load$$=$options$$.req.query.fields);let $schema_paths$$=$model$$.schema.paths;for(let $index$$=0;$index$$<$rows$$.length;$index$$++){const $item$$=$rows$$[$index$$];delete $item$$.__v;$item$$.stt_sorted=
2
2
  $index$$;delete $item$$.from_cached;_.has($schema_paths$$,"exfields")&&!$item$$.exfields&&($item$$.exfields={})}let $items$$=[];$options$$&&$options$$.req&&$options$$.req.query_cache&&!$options$$.req.query.refresh_required?await new Promise($resolve$$=>{setImmediate(async()=>{let $cacheData$$=await redisCache.getCacheReport($options$$.req.user.email,($options$$.req.user.current_id_app||"system").toString(),$self$$.name,$options$$.req.query_cache,0,$options$$.req.query.page);if($cacheData$$)for(let $index$$=
3
- 0;$index$$<$rows$$.length;$index$$++){const $item$$=$rows$$[$index$$];let $cacheds$$=$cacheData$$.filter($r$$=>$r$$._id===$item$$._id.toString());if(0<$cacheds$$.length)for(let $cached$$ of $cacheds$$)$cached$$.from_cached=!0,$items$$.push($cached$$);else $items$$.push($item$$)}else $items$$=$rows$$;$resolve$$()})}):$items$$=$rows$$;async.series({_Participant_created:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,"id_app")&&await $items$$.filter($item$$=>$item$$.user_created&&!$item$$.from_cached).asyncJoinModel2($user$$.current_id_app,
3
+ 0;$index$$<$rows$$.length;$index$$++){const $item$$=$rows$$[$index$$];let $cacheds$$=$cacheData$$.filter($r$$=>$r$$._id===$item$$._id.toString());if(0<$cacheds$$.length)for(let $cached$$ of $cacheds$$)$cached$$.from_cached=!0,$items$$.push($cached$$);else $items$$.push($item$$)}else $items$$=$rows$$;$resolve$$()})}):$items$$=$rows$$;async.parallel({_Participant_created:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,"id_app")&&await $items$$.filter($item$$=>$item$$.user_created&&!$item$$.from_cached).asyncJoinModel2($user$$.current_id_app,
4
4
  "participant",{where:{user_created:"email"},fields:{name_user_created:"name"}});await $items$$.filter($item$$=>$item$$.user_created&&!$item$$.name_user_created&&!$item$$.from_cached).asyncJoinModel2(null,"user",{where:{user_created:"email"},fields:{name_user_created:"name"}});$callback$$(null)})},_Participant_updated:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,"id_app")&&await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.from_cached).asyncJoinModel2($user$$.current_id_app,
5
- global.getModel("participant"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.name_user_updated&&!$item$$.from_cached).asyncJoinModel2(null,global.getModel("user"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});$callback$$(null)})},_approve:$callback$$=>{!$fields_load$$||0<=$fields_load$$.indexOf("approve_data")?async.mapSeries($items$$,($item$$,$next$$)=>{setImmediate(()=>{global.getModel("approve").find({id_ct:$item$$._id.toString()},
5
+ global.getModel("participant"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.name_user_updated&&!$item$$.from_cached).asyncJoinModel2(null,global.getModel("user"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});$callback$$(null)})},_approve:$callback$$=>{!$fields_load$$||0<=$fields_load$$.indexOf("approve_data")?async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{global.getModel("approve").find({id_ct:$item$$._id.toString()},
6
6
  {title:1,trang_thai:1,user_approved:1,user_approved_name:1,date_approved:1,user_denied:1,user_denied_name:1,date_denied:1}).lean().exec(async($e$$,$rs$$)=>{setImmediate(async()=>{$item$$.approve_data=$rs$$||[];await $item$$.approve_data.filter($r$$=>$r$$.user_approved).asyncJoinModel2($item$$.id_app,global.getModel("participant"),{where:{user_approved:"email"},fields:{user_approved_name:"name",signature_image:"signature_image"}});await $item$$.approve_data.filter($r$$=>$r$$.user_denied).asyncJoinModel2($item$$.id_app,
7
- global.getModel("participant"),{where:{user_denied:"email"},fields:{user_denied_name:"name",signature_image:"signature_image"}});$next$$(null)})})})},()=>{$callback$$(null)}):$callback$$(null)},transfer_ct:$callback$$=>{if(_.has($schema_paths$$,"id_ct_chuyen")&&$user$$.current_app_info&&$user$$.current_app_info.options&&$user$$.current_app_info.options.id_app_thue)async.mapSeries($items$$,($item$$,$next$$)=>{setImmediate(()=>{$model$$.findOne({id_app:$user$$.current_app_info.options.id_app_thue,id_ct_chuyen:$item$$._id.toString()},
8
- {_id:1}).lean().exec(async($e$$,$rs$$)=>{$rs$$&&($item$$.id_ct_nhan=$rs$$._id);$next$$(null)})})},()=>{$callback$$(null)});else return $callback$$()},posted:$callback$$=>{$options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)?async.mapSeries($items$$,($item$$,$next$$)=>{setImmediate(async()=>{let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book,$exists$$=await global.getModel($book$$).findOne({id_ct:$item$$._id.toString()},
7
+ global.getModel("participant"),{where:{user_denied:"email"},fields:{user_denied_name:"name",signature_image:"signature_image"}});$next$$(null)})})})},()=>{$callback$$(null)}):$callback$$(null)},transfer_ct:$callback$$=>{if(_.has($schema_paths$$,"id_ct_chuyen")&&$user$$.current_app_info&&$user$$.current_app_info.options&&$user$$.current_app_info.options.id_app_thue)async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{$model$$.findOne({id_app:$user$$.current_app_info.options.id_app_thue,id_ct_chuyen:$item$$._id.toString()},
8
+ {_id:1}).lean().exec(async($e$$,$rs$$)=>{$rs$$&&($item$$.id_ct_nhan=$rs$$._id);$next$$(null)})})},()=>{$callback$$(null)});else return $callback$$()},posted:$callback$$=>{$options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)?async.map($items$$,($item$$,$next$$)=>{setImmediate(async()=>{let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book,$exists$$=await global.getModel($book$$).findOne({id_ct:$item$$._id.toString()},
9
9
  {_id:1});$item$$[`${$book$$}_posted`]=!!$exists$$;$next$$()})},()=>{$callback$$(null)}):$callback$$()}},$e$jscomp$0$$=>{if($e$jscomp$0$$)return $next$$($e$jscomp$0$$);if($options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)){let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;$items$$=$items$$.filter($r$$=>$options$$.req.query.show_posted_book?$r$$[`${$book$$}_posted`]:!$r$$[`${$book$$}_posted`])}let $items_need_view$$=
10
10
  $items$$.filter($i$$=>!$i$$.from_cached),$items_cached$$=$items$$.filter($i$$=>$i$$.from_cached);async.series({view:$callback$$=>{if($self$$.view)try{$self$$.view($user$$,$items_need_view$$,function($error$$,$rs$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||$items_need_view$$;$callback$$(null,$items_need_view$$)})},$options$$)}catch($e$$){console.error("Error on view of",name,$e$$),$callback$$(null,$items_need_view$$)}else $callback$$(null,$items_need_view$$)},
11
11
  dynamicView:$callback$$=>{$self$$.dynamicView?$self$$.dynamicView($user$$,$items_need_view$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||$items_need_view$$;$callback$$(null,$items_need_view$$)}):$callback$$(null,$items_need_view$$)},viewRequired:$callback$$=>{$items$$=[...$items_cached$$,...$items_need_view$$].sort(($a$$,$b$$)=>$a$$.stt_sorted-$b$$.stt_sorted);if($self$$.viewRequired)try{$self$$.viewRequired($user$$,$items$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);
package/server/global.js CHANGED
@@ -6,13 +6,14 @@ global.getModel=$model_name$$=>{$model_name$$=$model_name$$.split(".js")[0];"kbm
6
6
  if(((global.configs||{}).paths||{}).models&&($_requireFields_model_model_path_mySchema$$=((global.configs||{}).paths||{}).models+"/"+$model_name$$+".js",fs.existsSync($_requireFields_model_model_path_mySchema$$)))return require($_requireFields_model_model_path_mySchema$$);$_requireFields_model_model_path_mySchema$$=__dirname+"/models/"+$model_name$$+".js";if(fs.existsSync($_requireFields_model_model_path_mySchema$$))return require($_requireFields_model_model_path_mySchema$$);console.error("model",
7
7
  $model_name$$,"is not exists. create new model");$_requireFields_model_model_path_mySchema$$={...require("./models/listinfo").requireFields};$_requireFields_model_model_path_mySchema$$=new global.Schema($_requireFields_model_model_path_mySchema$$,{strict:!1});return global.mongoose.model($model_name$$,$_requireFields_model_model_path_mySchema$$)};global.getLib=$lib_name$$=>require("./libs/"+$lib_name$$);
8
8
  const pointSchema=new global.mongoose.Schema({type:{type:String,enum:["Point"],required:!0,default:"Point"},coordinates:{type:[Number],required:!0}}),polygonSchema=new global.mongoose.Schema({type:{type:String,enum:["Polygon"],required:!0,default:"Polygon"},coordinates:{type:[[[Number]]],required:!0}});global.customTypes={Point:pointSchema,Polygon:polygonSchema};const EventEmitter=require("events");class GlobalEmitter extends EventEmitter{}global.globalEvents=new GlobalEmitter;
9
- const Message=global.getModel("message"),Notification=global.getModel("notification"),User=global.getModel("user"),Sysconfig=global.getModel("sysconfig");global.getSysConfig=async $cf_code$$=>{if($cf_code$$=await Sysconfig.findOne({code:$cf_code$$}))return $cf_code$$.value};global.asyncCountUnRead=async $email$$=>new Promise($resolve$$=>{setImmediate(()=>{Message.countDocuments({email:$email$$,read:!1},($e$$,$rs$$)=>{$resolve$$($rs$$||0)})})});
10
- global.alertMessage=function($email$$){setImmediate(()=>{Message.countDocuments({email_owner:$email$$,email_receiver:$email$$,read:!1},function($error$$,$count$$){$error$$?console.log($error$$):User.emitEvent($email$$,"message:count",$count$$,!1)})})};
11
- global.createNotification=function($email_sender$$,$email_receiver$$,$title$$,$content$$,$fn$$,$exfields$$,$emitEvent$$,$c_token$$,$send_email$$){Notification.createNotification($email_sender$$,$email_receiver$$,$title$$,$content$$,$fn$$,$exfields$$,$emitEvent$$,$c_token$$,$send_email$$)};
12
- global.getNotifies=function($email$$,$fn$$){async.parallel({colls:function($callback$$){$callback$$(null,[])},notifications:function($callback$$){Notification.find({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$colls_raw$$){setImmediate(()=>{if($error$$)$callback$$($error$$);else{const $colls$$=$colls_raw$$.map(function($c$$){return $c$$.toObject()});$callback$$(null,$colls$$)}})})},apps:function($callback$$){$callback$$(null,[])}},function($error$$,$rs$$){setImmediate(()=>
13
- {$fn$$($error$$,$rs$$)})})};global.sendNotification=function($email$$,$_id$$,$notify$$,$push_to_mobile_and_web$$=!0){setImmediate(()=>{$notify$$||($notify$$={email_sender:"H\u1ec7 th\u1ed1ng"});const $obj_notify$$={_id:$_id$$,code:"notification",action:"view"};$obj_notify$$.body=$notify$$.content||$notify$$.title||"";$obj_notify$$.sender=$notify$$.email_sender;$obj_notify$$.title=$notify$$.title||"";$obj_notify$$.content=$notify$$.content||"";User.emitEvent($email$$,"notify:new",$obj_notify$$,$push_to_mobile_and_web$$)})};
14
- global.alertNotification=function($email$$){setImmediate(()=>{Notification.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?console.log($error$$):User.emitEvent($email$$,"notify:count",$count$$,!1)})})})};
15
- global.asyncCountNotifications=async function($email$$){return new Promise($resolve$$=>{setImmediate(()=>{Notification.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?(console.log($error$$),$resolve$$(0)):$resolve$$($count$$)})})})})};const {RateLimiterRedis,RateLimiterQueue,RateLimiterMemory}=require("rate-limiter-flexible");
9
+ global.getSysConfig=async $cf_code$$=>{if($cf_code$$=await global.getModel("sysconfig").findOne({code:$cf_code$$}))return $cf_code$$.value};global.asyncCountUnRead=async $email$$=>{const $Message$$=global.getModel("message");return new Promise($resolve$$=>{setImmediate(()=>{$Message$$.countDocuments({email:$email$$,read:!1},($e$$,$rs$$)=>{$resolve$$($rs$$||0)})})})};
10
+ global.alertMessage=function($email$$){const $Message$$=global.getModel("message"),$User$$=global.getModel("user");setImmediate(()=>{$Message$$.countDocuments({email_owner:$email$$,email_receiver:$email$$,read:!1},function($error$$,$count$$){$error$$?console.log($error$$):$User$$.emitEvent($email$$,"message:count",$count$$,!1)})})};
11
+ global.createNotification=function($email_sender$$,$email_receiver$$,$title$$,$content$$,$fn$$,$exfields$$,$emitEvent$$,$c_token$$,$send_email$$){global.getModel("notification").createNotification($email_sender$$,$email_receiver$$,$title$$,$content$$,$fn$$,$exfields$$,$emitEvent$$,$c_token$$,$send_email$$)};
12
+ global.getNotifies=function($email$$,$fn$$){const $Notification$$=global.getModel("notification");async.parallel({colls:function($callback$$){$callback$$(null,[])},notifications:function($callback$$){$Notification$$.find({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$colls_raw$$){setImmediate(()=>{if($error$$)$callback$$($error$$);else{const $colls$$=$colls_raw$$.map(function($c$$){return $c$$.toObject()});$callback$$(null,$colls$$)}})})},apps:function($callback$$){$callback$$(null,
13
+ [])}},function($error$$,$rs$$){setImmediate(()=>{$fn$$($error$$,$rs$$)})})};
14
+ global.sendNotification=function($email$$,$_id$$,$notify$$,$push_to_mobile_and_web$$=!0){const $User$$=global.getModel("user");setImmediate(()=>{$notify$$||($notify$$={email_sender:"H\u1ec7 th\u1ed1ng"});const $obj_notify$$={_id:$_id$$,code:"notification",action:"view"};$obj_notify$$.body=$notify$$.content||$notify$$.title||"";$obj_notify$$.sender=$notify$$.email_sender;$obj_notify$$.title=$notify$$.title||"";$obj_notify$$.content=$notify$$.content||"";$User$$.emitEvent($email$$,"notify:new",$obj_notify$$,
15
+ $push_to_mobile_and_web$$)})};global.alertNotification=function($email$$){const $Notification$$=global.getModel("notification"),$User$$=global.getModel("user");setImmediate(()=>{$Notification$$.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?console.log($error$$):$User$$.emitEvent($email$$,"notify:count",$count$$,!1)})})})};
16
+ global.asyncCountNotifications=async function($email$$){const $Notification$$=global.getModel("notification");return new Promise($resolve$$=>{setImmediate(()=>{$Notification$$.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?(console.log($error$$),$resolve$$(0)):$resolve$$($count$$)})})})})};const {RateLimiterRedis,RateLimiterQueue,RateLimiterMemory}=require("rate-limiter-flexible");
16
17
  global.createRateLimiterMiddleware=async($config$$,$keyPrefix$$)=>{const $total_points$$=$config$$.points||1E3;var $duration_limiterFlexible$$=$config$$.duration||1;const $insuranceLimiter$$=new RateLimiterMemory({points:$total_points$$,duration:$duration_limiterFlexible$$});$duration_limiterFlexible$$=new RateLimiterRedis({keyPrefix:$keyPrefix$$,storeClient:global.clientRedis,points:$total_points$$,duration:$duration_limiterFlexible$$,blockDuration:$config$$.blockDuration||0,inmemoryBlockOnConsumed:$total_points$$+
17
18
  1,inmemoryBlockDuration:10,insuranceLimiter:$insuranceLimiter$$});const $rateLimiter$$=new RateLimiterQueue($duration_limiterFlexible$$,{maxQueueSize:$config$$.maxQueueSize||1E4});return async($req$$,$res$$,$next$$)=>{let $key$$=($req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress).replace("::ffff:","");const $origin$$=($req$$.headers.origin||$req$$.headers.referer||"").toString().toLowerCase().replace("https://","").replace("http://","").replace("www.","").split("/").join("").trim();
18
19
  let $trust_domains$$=((global.configs||{}).trust_domains||"").toString().toLowerCase().split(","),$points$$;if($origin$$&&0>$trust_domains$$.indexOf($origin$$)&&($check_query_trust_Key$$={domain:$origin$$},$check_query_trust_Key$$=await global.getModel("domain").findOne($check_query_trust_Key$$).lean())){if($check_query_trust_Key$$.not_allow)return $res$$.status(400).send({error:"Access is not allowed"});$points$$=$check_query_trust_Key$$.points;$trust_domains$$.push($origin$$)}var $check_query_trust_Key$$=
@@ -1,12 +1,14 @@
1
- 'use strict';const {Worker}=require("worker_threads"),fs=require("fs"),_=require("lodash"),crypto=require("crypto"),redisCache=require("./redis-cache");
2
- class WorkerPool{constructor($filename_i$$,$maxQueue_worker$$=0,$maxWorkers$$=2,$defaultTimeout$$=3E5){if(!fs.existsSync($filename_i$$))throw Error("Worker file does not exist");this.filename=$filename_i$$;this.maxWorkers=$maxWorkers$$;(this.maxQueue=$maxQueue_worker$$)&&this.maxQueue<$maxWorkers$$&&(this.maxQueue=$maxWorkers$$);this.defaultTimeout=$defaultTimeout$$;this.queue=[];this.queue_running=[];this.workers={};for($filename_i$$=0;$filename_i$$<$maxWorkers$$;$filename_i$$++)$maxQueue_worker$$=
3
- this.createWorker(),this.workers[$maxQueue_worker$$.id]=$maxQueue_worker$$}createWorker(){const $wk$$={id:`worker-${crypto.randomBytes(20).toString("hex")}`,isBusy:!1};$wk$$.worker=new Worker(this.filename);$wk$$.worker.on("message",async $message$$=>{try{let $task$$;($task$$=$message$$.id_task?this.queue_running.find($q$$=>$q$$.id==$message$$.id_task):$wk$$.task)&&clearTimeout($task$$.timeoutId);if($task$$&&$task$$.callback)if($message$$.id_task&&$message$$.id_task!==$task$$.id)console.error("K\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 kh\u00f4ng \u0111\u00fang cho task",
4
- $task$$.id,$message$$);else{$task$$.finished=new Date;$task$$.status=5;$task$$.message="\u0110\u00e3 th\u1ef1c hi\u1ec7n xong";$task$$.result=$message$$&&$message$$.map?void 0:$message$$;try{let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}this.queue_running=this.queue_running.filter($q$$=>
5
- $q$$.id!==$task$$.id);$task$$.callback($message$$,$task$$.id)}delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()}catch($e$$){console.error($e$$)}});$wk$$.worker.on("error",$error$$=>{console.error("Worker error:",$error$$);this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==($wk$$.task||{}).id);delete this.workers[$wk$$.id];$error$$=this.createWorker();this.workers[$error$$.id]=$error$$});$wk$$.worker.on("exit",$code$jscomp$1_newWorker$$=>{console.log(`Worker exited with code ${$code$jscomp$1_newWorker$$}`);
6
- this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==($wk$$.task||{}).id);delete this.workers[$wk$$.id];$code$jscomp$1_newWorker$$=this.createWorker();this.workers[$code$jscomp$1_newWorker$$.id]=$code$jscomp$1_newWorker$$});return $wk$$}async processQueue(){for(const $wk$$ of Object.values(this.workers))if(!$wk$$.isBusy&&!$wk$$.task&&0<this.queue.length){const $task$$=this.queue.shift();if($task$$){$task$$.status=2;$task$$.message="\u0110ang th\u1ef1c hi\u1ec7n";this.queue_running.push($task$$);
7
- try{let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$wk$$.isBusy=!0;$wk$$.task=$task$$;$wk$$.worker.postMessage($task$$.params);$task$$.timeoutId=setTimeout(async()=>{this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id);try{$task$$.finished=new Date;$task$$.status=9;
8
- $task$$.message="\u0110\u00e3 h\u1ebft th\u1eddi gian th\u1ef1c hi\u1ec7n";let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$task$$.callback&&$task$$.callback({error:"Task timed out"},$task$$.id);delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()},$task$$.timeout||this.defaultTimeout)}}}async pushToQueue($params$$,
9
- $callback$$,$timeout$$=0){$params$$.id_task||($params$$.id_task=`task-${crypto.randomBytes(20).toString("hex")}`);$timeout$$=$timeout$$||this.defaultTimeout;const $task$$={id:$params$$.id_task,start:new Date,params:_.cloneDeep($params$$),timeout:$timeout$$,status:0};delete $task$$.params.configs;delete $task$$.params.user;delete $task$$.params.configs;delete $task$$.params.data;$task$$.params.req&&(delete $task$$.params.req.user,delete $task$$.params.req.body,delete ($task$$.params.req.query||{}).access_token);
10
- try{await redisCache.setObject($params$$.id_task,$task$$),this.queue.push({id:$params$$.id_task,params:$params$$,callback:$callback$$,timeout:$timeout$$,status:0}),this.processQueue()}catch($e$$){console.error("L\u1ed7i \u0111\u1ea9y task t\u1edbi queue",$e$$),$callback$$({error:$e$$.error||$e$$.message||$e$$})}}async exec($args_params$$,$callback$$=()=>{},$timeout$$=0){if(0<this.maxQueue&&this.queue.length>=this.maxQueue)$callback$$({error:"Queue is full"});else if($args_params$$.load)for(let $i$$=
11
- 0;$i$$<this.maxWorkers;$i$$++){let $params$$=_.cloneDeep($args_params$$);this.pushToQueue($params$$,$callback$$,$timeout$$)}else $args_params$$=_.cloneDeep($args_params$$),this.pushToQueue($args_params$$,$callback$$,$timeout$$)}fullQueue(){return 0<this.maxQueue&&this.queue.length>=this.maxQueue}busy(){return 0==Object.values(this.workers).filter($w$$=>!$w$$.isBusy).length}destroy(){for(const $worker$$ of Object.values(this.workers))$worker$$.terminate();this.workers={};this.queue=[]}}
12
- module.exports=WorkerPool;
1
+ 'use strict';const {Worker}=require("worker_threads"),fs=require("fs"),_=require("lodash"),crypto=require("crypto"),moment=require("moment"),redisCache=require("./redis-cache");
2
+ class WorkerPool{constructor($filename_i$$,$maxQueue_worker$$=0,$maxWorkers$$=1,$defaultTimeout$$=3E5,$pre_created_workers$$=0){if(!fs.existsSync($filename_i$$))throw Error("Worker file does not exist");this.filename=$filename_i$$;this.maxWorkers=$maxWorkers$$;(this.maxQueue=$maxQueue_worker$$)&&this.maxQueue<$maxWorkers$$&&(this.maxQueue=$maxWorkers$$);this.defaultTimeout=$defaultTimeout$$;this.pre_created_workers=$pre_created_workers$$;this.queue=[];this.queue_running=[];this.workers={};console.log("\u0110ang t\u1ea1o s\u1eb5n",
3
+ $pre_created_workers$$,"workes/",$maxWorkers$$);for($filename_i$$=0;$filename_i$$<Math.min($pre_created_workers$$,$maxWorkers$$);$filename_i$$++)$maxQueue_worker$$=this.createWorker(),this.workers[$maxQueue_worker$$.id]=$maxQueue_worker$$}workerIsAlive($wk$$){return!$wk$$.worker||0>=$wk$$.worker.threadId||moment().diff(moment($wk$$.time_responded),"seconds")>(($wk$$.task||{}).timeout||1E4)/1E3?!1:!0}createWorker(){const $wk$$={id:`worker-${crypto.randomBytes(20).toString("hex")}`,isBusy:!1,time_responded:new Date};
4
+ $wk$$.worker=new Worker(this.filename);$wk$$.worker.on("message",async $message$$=>{$wk$$.time_responded=new Date;if("pong"!==$message$$)try{let $task$$;($task$$=$message$$.id_task?this.queue_running.find($q$$=>$q$$.id==$message$$.id_task):$wk$$.task)&&clearTimeout($task$$.timeoutId);if($task$$&&$task$$.callback)if($message$$.id_task&&$message$$.id_task!==$task$$.id)console.error("K\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 kh\u00f4ng \u0111\u00fang cho task",$task$$.id,$message$$);else{$task$$.finished=new Date;
5
+ $task$$.status=5;$task$$.message="\u0110\u00e3 th\u1ef1c hi\u1ec7n xong";$task$$.result=$message$$&&$message$$.map?void 0:$message$$;try{let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id);$task$$.callback($message$$,
6
+ $task$$.id)}delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()}catch($e$$){console.error($e$$)}});$wk$$.worker.on("error",$error$$=>{console.error("Worker error:",$error$$);$wk$$.worker.terminate()});$wk$$.worker.on("exit",async $code$$=>{console.error(`Worker exited with code ${$code$$}. Creating new worker...`);if($wk$$.task){let $task$$=this.queue_running.find($q$$=>$q$$.id==$wk$$.task.id_task);if($task$$){clearTimeout($task$$.timeoutId);$task$$.finished=new Date;$task$$.status=9;$task$$.message=
7
+ "\u0110\u00e3 c\u00f3 l\u1ed7i x\u1ea3y ra trong h\u1ec7 th\u1ed1ng. H\u00e3y th\u1eed l\u1ea1i";let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;try{await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$task$$.callback&&$task$$.callback({error:$message$$},$task$$.id);this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id)}}delete this.workers[$wk$$.id];
8
+ $code$$=this.createWorker();this.workers[$code$$.id]=$code$$});return $wk$$}async processQueue($id_worker$$){for(let $i$$=0;$i$$<this.maxWorkers&&0!=this.queue.length;$i$$++){let $wk$$=Object.values(this.workers).find($w$$=>!$w$$.isBusy&&!$w$$.task&&(!$id_worker$$||$id_worker$$==$w$$.id));if(!$wk$$)if(Object.keys(this.workers).length<this.maxWorkers)console.log("T\u1ea1o th\u00eam worker m\u1edbi...",", s\u1ed1 l\u01b0\u1ee3ng workers hi\u1ec7n t\u1ea1i",Object.values(this.workers).length,", max:",
9
+ this.maxWorkers),$wk$$=this.createWorker(),this.workers[$wk$$.id]=$wk$$;else break;if($wk$$){this.workerIsAlive($wk$$)||(console.error("Worker",$wk$$.id,"kh\u00f4ng c\u00f2n ho\u1ea1t \u0111\u1ed9ng. T\u1ea1o l\u1ea1i..."),delete this.workers[$wk$$.id],$wk$$=this.createWorker(),this.workers[$wk$$.id]=$wk$$);const $task$$=this.queue.shift();if($task$$){$task$$.status=2;$task$$.message="\u0110ang th\u1ef1c hi\u1ec7n";this.queue_running.push($task$$);try{let {finished:$finished$$,status:$status$$,message:$message$$,
10
+ result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$wk$$.isBusy=!0;$wk$$.task=$task$$;$task$$.params.id_worker=$wk$$.id;$wk$$.worker.postMessage($task$$.params);$task$$.timeoutId=setTimeout(async()=>{this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id);$task$$.finished=new Date;$task$$.status=9;$task$$.message="\u0110\u00e3 h\u1ebft th\u1eddi gian th\u1ef1c hi\u1ec7n";
11
+ let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;try{await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$task$$.callback&&$task$$.callback({error:$message$$},$task$$.id);delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()},$task$$.timeout||this.defaultTimeout)}}}}async pushToQueue($params$$,$callback$$,$timeout$$=0,$id_worker$$){$params$$.id_task||
12
+ ($params$$.id_task=`task-${crypto.randomBytes(20).toString("hex")}`);$timeout$$=$timeout$$||this.defaultTimeout;const $task$$={id:$params$$.id_task,start:new Date,params:_.cloneDeep($params$$),timeout:$timeout$$,status:0};delete $task$$.params.configs;delete $task$$.params.user;delete $task$$.params.configs;delete $task$$.params.data;$task$$.params.req&&(delete $task$$.params.req.user,delete $task$$.params.req.body,delete ($task$$.params.req.query||{}).access_token);try{await redisCache.setObject($params$$.id_task,
13
+ $task$$),this.queue.push({id:$params$$.id_task,params:$params$$,callback:$callback$$,timeout:$timeout$$,status:0}),this.processQueue($id_worker$$)}catch($e$$){console.error("L\u1ed7i \u0111\u1ea9y task t\u1edbi queue",$e$$),$callback$$({error:$e$$.error||$e$$.message||$e$$})}}async exec($args_params$$,$callback$$=()=>{},$timeout$$=0){if(0<this.maxQueue&&this.queue.length>=this.maxQueue)$callback$$({error:"Queue is full"});else if($args_params$$.load)for(let $id_worker$$ of Object.keys(this.workers)){let $params$$=
14
+ _.cloneDeep($args_params$$);this.pushToQueue($params$$,$callback$$,$timeout$$,$id_worker$$)}else $args_params$$=_.cloneDeep($args_params$$),this.pushToQueue($args_params$$,$callback$$,$timeout$$)}fullQueue(){return 0<this.maxQueue&&this.queue.length>=this.maxQueue}busy(){return 0==Object.values(this.workers).filter($w$$=>!$w$$.isBusy).length}destroy(){for(const $worker$$ of Object.values(this.workers))$worker$$.terminate();this.workers={};this.queue=[]}}module.exports=WorkerPool;