import-data.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // import-data.js
  2. const { CloudQuery, CloudObject } = require("../lib/ncloud");
  3. const { DepartList, DoctorList, HotDotList, DrugList, RealDoctorList, IllnessList } = require("./data"); // 确保正确导入所有集合
  4. // 添加所有集合到 DataMap
  5. const DataMap = {
  6. Doctor: {},
  7. Department: {},
  8. HotDot: {},
  9. Drug: {},
  10. RealDoctor: {},
  11. Illness: {},
  12. };
  13. // 开始导入数据
  14. inportDapartAndDoctor();
  15. async function inportDapartAndDoctor() {
  16. try {
  17. // 导入药品数据
  18. // let drugList = DrugList;
  19. // console.log(`开始导入 Drug 数据,共 ${drugList.length} 条`);
  20. // for (let index = 0; index < drugList.length; index++) {
  21. // let drug = drugList[index];
  22. // drug = await importObject("Drug", drug);
  23. // }
  24. // 导入疾病数据
  25. // let illnessList = IllnessList;
  26. // console.log(`开始导入 Illness 数据,共 ${illnessList.length} 条`);
  27. // for (let index = 0; index < illnessList.length; index++) {
  28. // let illness = illnessList[index];
  29. // illness = await importObject("Illness", illness);
  30. // }
  31. // 如果需要导入其他数据(科室、医生、热点),可以取消注释以下代码
  32. // 导入科室数据
  33. // let departList = DepartList;
  34. // console.log(`开始导入 Department 数据,共 ${departList.length} 条`);
  35. // for (let index = 0; index < departList.length; index++) {
  36. // let depart = departList[index];
  37. // depart = await importObject("Department", depart);
  38. // }
  39. // 导入医生数据
  40. // let doctorList = DoctorList;
  41. // console.log(`开始导入 Doctor 数据,共 ${doctorList.length} 条`);
  42. // for (let index = 0; index < doctorList.length; index++) {
  43. // let doctor = doctorList[index];
  44. // doctor = await importObject("Doctor", doctor);
  45. // }
  46. // 导入热点数据
  47. let hotDotList = HotDotList;
  48. console.log(`开始导入 HotDot 数据,共 ${hotDotList.length} 条`);
  49. for (let index = 0; index < hotDotList.length; index++) {
  50. let hotDot = hotDotList[index];
  51. hotDot = await importObject("HotDot", hotDot);
  52. }
  53. console.log("数据导入完成");
  54. } catch (error) {
  55. console.error("导入过程中发生错误:", error);
  56. }
  57. }
  58. async function importObject(className, data) {
  59. try {
  60. // 查重 srcId 数据源中的 objectId 并非数据库生成的唯一ID,因此需要有一个 srcId 字段进行记录,并查重
  61. let query = new CloudQuery(className);
  62. let srcId = data.objectId;
  63. query.equalTo("srcId", srcId);
  64. let importObj = await query.first();
  65. console.log(`查重结果 [${className}]:`, importObj ? `已存在 objectId: ${importObj.id}` : "不存在,准备导入");
  66. // 导入前批量处理 Pointer 类型数据,进行重定向
  67. Object.keys(data)?.forEach(key => {
  68. let field = data[key];
  69. let fieldObjId = field?.objectId;
  70. if (fieldObjId && typeof field === 'object' && field.__type === 'Pointer') { // 是 Pointer 类型字段
  71. if (key === "depart") {
  72. data[key] = DataMap["Department"]?.[fieldObjId]?.toPointer();
  73. }
  74. // 如果有其他 Pointer 类型的字段,可以在这里处理
  75. if (key === "doctor") {
  76. data[key] = DataMap["Doctor"]?.[fieldObjId]?.toPointer();
  77. }
  78. }
  79. // 处理 treats 字段
  80. if (key === "treats" && Array.isArray(field)) {
  81. data[key] = field.map(item => ({
  82. "__type": "Pointer",
  83. "className": "Illness",
  84. "objectId": item.objectId
  85. }));
  86. }
  87. });
  88. // 若未添加,则创建新对象并保存
  89. if (!importObj?.id) {
  90. importObj = new CloudObject(className);
  91. }
  92. // 保存或更新数据
  93. data.srcId = srcId;
  94. importObj.set(data);
  95. importObj = await importObj.save();
  96. DataMap[className][srcId] = importObj;
  97. console.log(`成功导入 ${className} 对象,objectId: ${importObj.id}`);
  98. return importObj;
  99. } catch (error) {
  100. console.error(`导入 ${className} 类别的对象时发生错误:`, error);
  101. }
  102. }