| 
					
				 | 
			
			
				@@ -0,0 +1,154 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const { CloudQuery, CloudObject } = require("../lib/ncloud"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const { QuestionnaireResultList, QuestionnaireList, QuestionList, OptionList, UserInterestProfileList } = require("./data"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+importData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let DataMap = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    QuestionnaireResult: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Questionnaire: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Question: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Option: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    UserInterestProfile: {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function importData() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 导入问卷结果数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let questionnaireResultList = QuestionnaireResultList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let index = 0; index < questionnaireResultList.length; index++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let result = questionnaireResultList[index]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result = await importObject("QuestionnaireResult", result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 导入问卷数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let questionnaireList = QuestionnaireList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let index = 0; index < questionnaireList.length; index++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let questionnaire = questionnaireList[index]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        questionnaire = await importObject("Questionnaire", questionnaire); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 导入问题数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let questionList = QuestionList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let index = 0; index < questionList.length; index++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let question = questionList[index]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        question = await importObject("Question", question); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 导入选项数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let optionList = OptionList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let index = 0; index < optionList.length; index++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let option = optionList[index]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        option = await importObject("Option", option); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 导入用户兴趣画像数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let userInterestProfileList = UserInterestProfileList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let index = 0; index < userInterestProfileList.length; index++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let profile = userInterestProfileList[index]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        profile = await importObject("UserInterestProfile", profile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // console.log(DataMap) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function importObject(className, data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 查重 srcId 数据源列表中的 objectId 并非数据库生成的唯一 ID,因此需要有一个 srcId 字段进行记录,并查重 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let query = new CloudQuery(className); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let srcId = data.objectId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    query.equalTo("srcId", srcId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let importObj = await query.first(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log(importObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 导入前批量处理 Pointer 类型数据,进行重定向 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Object.keys(data)?.forEach(key => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let field = data[key]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let srcId = field?.objectId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (srcId) { // 是 Pointer 类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (key === "userId" || key === "questionnaireId" || key === "questionId") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data[key] = DataMap?.[key.replace("Id", "")]?.[srcId]?.toPointer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (Array.isArray(field)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data[key] = field.map(item => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return DataMap?.[item.className]?.[item.objectId]?.toPointer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 若未添加,则创建新对象并保存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!importObj?.id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        importObj = new CloudObject(className); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 保存或更新数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data.srcId = srcId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    importObj.set(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    importObj = await importObj.save(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    DataMap[className][srcId] = importObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/// 展示当前问卷内的问题及其选项 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+async function displayQuestionnaireDetails(questionnaireId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 查询问卷 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let questionnaireQuery = new CloudQuery("Questionnaire"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    questionnaireQuery.equalTo("objectId", questionnaireId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let questionnaire = await questionnaireQuery.first(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 检查问卷是否存在 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!questionnaire) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log("问卷未找到,无法展示问题和选项。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log(`问卷标题: ${questionnaire.title}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log(`问卷状态: ${questionnaire.status}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log("问题列表:"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 查询问题 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let questionQuery = new CloudQuery("Question"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    questionQuery.equalTo("questionnaireId", { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "__type": "Pointer", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "className": "Questionnaire", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "objectId": questionnaireId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let questions = await questionQuery.find(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 检查是否有问题 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (questions.length === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log("当前问卷没有问题。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 遍历问题并查询选项 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let question of questions) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 检查问题是否存在 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!question) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            console.log("问题未找到,无法展示选项。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            continue; // 跳过当前循环,继续下一个问题 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log(`  问题: ${question.questionText}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 查询选项 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let optionQuery = new CloudQuery("Option"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        optionQuery.equalTo("questionId", { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "__type": "Pointer", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "className": "Question", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "objectId": question.objectId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let options = await optionQuery.find(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 输出选项 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log("  选项:"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (options.length === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            console.log("    - 此问题没有选项。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let option of options) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                console.log(`    - ${option.optionText} (已选: ${option.isSelected})`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log(""); // 添加空行以便于阅读 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 示例调用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+displayQuestionnaireDetails("jbg6EYXk3G"); 
			 |