cld_async_data.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /**
  2. * CLD数据同步计划任务
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/7/26
  6. * @version
  7. */
  8. import ManagerModel from "../modules/users/models/manager_model";
  9. import DBManager from "../config/db/db_manager";
  10. import config from "../config/config";
  11. import fs from "fs";
  12. config.setToLocalDb();
  13. let connect = DBManager.connect();
  14. let counterFile = "./counter.txt";
  15. let main = async function () {
  16. // 读取计数器
  17. let id = fs.readFileSync(counterFile, "utf-8");
  18. let CLDAsyncUrl = 'http://cld.smartcost.com.cn/api/async-user';
  19. let managerModel = new ManagerModel();
  20. try {
  21. // 生成加密token
  22. let [encryptToken, time] = managerModel.generateCLDToken();
  23. let postData = {
  24. time: time,
  25. token: encryptToken,
  26. last_id: id,
  27. app: 'yanghu'
  28. };
  29. let postOption = {
  30. url: CLDAsyncUrl,
  31. form: postData,
  32. encoding: 'utf8'
  33. };
  34. let responseData = await managerModel.CLDRequest(postOption);
  35. let userList = responseData;
  36. if (userList.length <= 0) {
  37. throw {code: 30001, msg: "没有数据"};
  38. }
  39. let usernameList = [];
  40. for (let tmp of userList) {
  41. usernameList.push(tmp.username);
  42. }
  43. // 查找对应的数据
  44. let condition = {username: {"$in": usernameList}};
  45. let managerData = await managerModel.findDataByCondition(condition, null, false, 'username');
  46. // 准备插入数据库
  47. let current = new Date().getTime();
  48. let insertData = [];
  49. let lastId = 0;
  50. for (let tmp of userList) {
  51. if (managerData[tmp.username] !== undefined) {
  52. continue;
  53. }
  54. let userTmp = {
  55. username: tmp.username,
  56. password: '',
  57. token: '',
  58. create_time: current,
  59. office: tmp.office,
  60. can_login: 0
  61. };
  62. insertData.push(userTmp);
  63. lastId = tmp.sid;
  64. }
  65. if (insertData.length <= 0) {
  66. throw '没有需要操作的数据';
  67. }
  68. managerModel.setScene('cldInsert');
  69. let insertResult = await managerModel.createManager(insertData);
  70. if(insertResult.length > 0) {
  71. // 成功则更新id
  72. fs.writeFileSync(counterFile, lastId, "utf-8");
  73. }
  74. } catch (error) {
  75. // 重置起始标识(如果需要循环才开启,开启后后台删除则过一段时间又会插入回数据库)
  76. // let code = error.code !== undefined ? error.code : '';
  77. // if (code === 30001) {
  78. // fs.writeFileSync(counterFile, 0, "utf-8");
  79. // }
  80. console.log(error);
  81. }
  82. // 用完关闭
  83. connect.disconnect();
  84. };
  85. main();