eraser 3 жил өмнө
parent
commit
60202a4473

BIN
Content/Blueprint/BP_GameMode.uasset


BIN
Content/Blueprint/Framework/Function/BP_Web_Interface.uasset


BIN
Content/Blueprint/UI/SubManu/Create/Blueprint/U_Create_Art_13/AtmosphereMap.uasset


BIN
Content/Blueprint/UI/SubManu/Create/Blueprint/U_Create_Art_13/CommentReport.uasset


BIN
Content/Blueprint/UI/SubManu/Create/Blueprint/U_Create_Art_13/Finish.uasset


BIN
Content/Blueprint/UI/SubManu/Create/Blueprint/U_Create_Art_13/MettingReport.uasset


BIN
Content/Blueprint/UI/SubManu/Create/Blueprint/U_Create_Art_13/SplitShot.uasset


+ 2 - 2
Source/Communication_Org/Communication_Org.Build.cs

@@ -8,13 +8,13 @@ public class Communication_Org : ModuleRules
 	{
 		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
 	
-		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });
+		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Http", "Json","JsonUtilities",});
 
 		PrivateDependencyModuleNames.AddRange(new string[] {  });
 
 		// Uncomment if you are using Slate UI
 		// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
-		
+
 		// Uncomment if you are using online features
 		// PrivateDependencyModuleNames.Add("OnlineSubsystem");
 

+ 512 - 88
Source/Communication_Org/Private/MyBlueprintFunctionLibrary.cpp

@@ -8,6 +8,40 @@
 #include "Misc/Timespan.h"
 #include <Runtime/Engine/Classes/Kismet/KismetMathLibrary.h>
 
+FString UMyBlueprintFunctionLibrary::MyText()
+{
+	int64 StartTimestamp = 1629431914;
+	//int64 EndTimestamp = 1629393979;
+	FDateTime StartTime = UnixTimestampToDateTime(StartTimestamp);
+	//FTimespan Duration = FTimespan(8, 0, 0);
+	StartTime = StartTime + (FDateTime::Now()-FDateTime::UtcNow());
+	//FDateTime EndTime = UnixTimestampToDateTime(EndTimestamp);
+	UE_LOG(LogTemp, Log, TEXT("StartTime======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+	//UE_LOG(LogTemp, Log, TEXT("EndTime======%s"), *EndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+
+
+	//FDateTime NowTime = FDateTime::UtcNow();
+	//UE_LOG(LogTemp, Log, TEXT("Now======%s"), *NowTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+	//获取时间戳
+	//int64 NowTimestamp = NowTime.ToUnixTimestamp();
+	//UE_LOG(LogTemp, Log, TEXT("%d"), NowTimestamp);
+
+
+	//EndTime = StartTime+ FTimespan::FromSeconds(30);
+	//UE_LOG(LogTemp, Log, TEXT("TimeUsed======%d"), (EndTime - StartTime).GetSeconds());
+	/*UE_LOG(LogTemp, Log, TEXT("StartTime1======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+	UE_LOG(LogTemp, Log, TEXT("StartTimestamp======%d"), DateTimeToUnixTimestamp(StartTime));
+	StartTime = UnixTimestampToDateTime(DateTimeToUnixTimestamp(StartTime));
+
+	UE_LOG(LogTemp, Log, TEXT("StartTime2======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+	UE_LOG(LogTemp, Log, TEXT("EndTime======%s"), *EndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+
+	
+	UE_LOG(LogTemp, Log, TEXT("TimeUsed1======%d"), (EndTime - StartTime).GetSeconds());*/
+
+	return TEXT("MyTest");
+}
+
 FDateTime UMyBlueprintFunctionLibrary::UnixTimestampToDateTime(int64 UnixTime)
 {
 	FDateTime Time = FDateTime::FromUnixTimestamp(UnixTime);
@@ -18,10 +52,64 @@ FDateTime UMyBlueprintFunctionLibrary::UnixTimestampToDateTime(int64 UnixTime)
 int64 UMyBlueprintFunctionLibrary::DateTimeToUnixTimestamp(FDateTime DateTime)
 {
 	int64 Timestamp = DateTime.ToUnixTimestamp();
-
 	return Timestamp;
 }
 
+int32 UMyBlueprintFunctionLibrary::GetCurrentIndex(FString RawDataJson)
+{
+	int32 CurrentIndex = 0;
+	TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
+	TSharedRef<TJsonReader<>> JsonReader2 = TJsonReaderFactory<>::Create(RawDataJson);
+	if (FJsonSerializer::Deserialize(JsonReader2, JsonObjectValue))
+	{
+		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
+
+			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
+			double EndTimeStamp = jsonMember->GetIntegerField(TEXT("EndTime"));
+			if (EndTimeStamp == 0)
+			{
+				CurrentIndex = i;
+				break;
+			}
+
+			//int32 Score = jsonMember->GetIntegerField(TEXT("Score"));
+			////UE_LOG(LogTemp, Log, TEXT("Score======%d"), Score);
+			//if (Score==-1)
+			//{
+			//	CurrentIndex = i;
+			//	break;
+			//}	
+		}
+	}
+
+	return CurrentIndex;
+}
+
+FString UMyBlueprintFunctionLibrary::GetCallBackJsonStr(FString RawDataJson)
+{
+	JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
+
+	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
+
+	FString JsonIDStr;
+	if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
+	{
+		double Code = JsonRootObject->GetNumberField(TEXT("Code"));
+
+		if (Code != 100)
+		{
+			return "";
+		}
+
+		JsonObjectPtr JsonExamObject = JsonRootObject->GetObjectField(TEXT("Exam"));
+
+		JsonIDStr = JsonExamObject->GetStringField(TEXT("ScoreStep"));
+		return JsonIDStr;
+	}
+
+	return "";
+}
+
 FString UMyBlueprintFunctionLibrary::GetTempScoresStr(FString RawDataJson)
 {
 	JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
@@ -152,7 +240,8 @@ int64 UMyBlueprintFunctionLibrary::GetStartTimestamp(FString RawDataJson)
 
 	if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
 	{
-		return JsonRootObject->GetNumberField(TEXT("StartTime"));
+		JsonObjectPtr ExamObj = JsonRootObject->GetObjectField(TEXT("Exam"));
+		return ExamObj->GetNumberField(TEXT("StartTime"));
 	}
 
 	return 0;
@@ -203,10 +292,8 @@ int32 UMyBlueprintFunctionLibrary::GetScore(FString RawDataJson, int32 ScoreInde
 	return Score;
 }
 
-FString UMyBlueprintFunctionLibrary::SetScoreJson(FString RawDataJson, FString ExamId, FString UserID, int32 Score, int32 ScoreIndex)
+FString UMyBlueprintFunctionLibrary::SetScoreJson(FString RawDataJson, FString ExamId, FString UserID, int32 Score, int32 ScoreIndex,int64 StartTimeStamp,int64 EndTimeStamp)
 {
-	//ABP_GameState * BP_GameState = Cast<ABP_GameState>(AGameState);
-
 	JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
 	JsonRootObject->SetStringField(TEXT("UserID"), UserID);
 	JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
@@ -229,7 +316,6 @@ FString UMyBlueprintFunctionLibrary::SetScoreJson(FString RawDataJson, FString E
 				double MaxScore = jsonMember->GetNumberField(TEXT("MaxScore"));
 				int32 Evaluation = Score / MaxScore * 100;
 
-	
 				FString EvaluationStr = TEXT("不及格");
 				if (Evaluation < 60)
 				{
@@ -261,7 +347,7 @@ FString UMyBlueprintFunctionLibrary::SetScoreJson(FString RawDataJson, FString E
 		JsonRootObject->SetStringField(TEXT("Score"), ScoresString);
 
 		// set start time
-		double StartTimeStamp = 0;
+		/*double StartTimeStamp = 0;
 		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
 
 			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
@@ -271,11 +357,11 @@ FString UMyBlueprintFunctionLibrary::SetScoreJson(FString RawDataJson, FString E
 				StartTimeStamp = STStamp;
 				break;
 			}
-		}
+		}*/
 		JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
 		FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
 
-		double EndTimeStamp = 0;
+		/*double EndTimeStamp = 0;
 		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
 
 			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
@@ -284,11 +370,17 @@ FString UMyBlueprintFunctionLibrary::SetScoreJson(FString RawDataJson, FString E
 			{
 				EndTimeStamp = ETStamp;
 			}
-		}
+		}*/
 		// set end time
 		//JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
 		JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
 		FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
+
+	/*	UE_LOG(LogTemp, Log, TEXT("StartTimeStamp======%d"), StartTimeStamp);
+		UE_LOG(LogTemp, Log, TEXT("AStartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+
+		UE_LOG(LogTemp, Log, TEXT("EndTimeStamp======%d"), EndTimeStamp);
+		UE_LOG(LogTemp, Log, TEXT("AEndTime======%s"), *AEndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));*/
 		// set TimeUsed
 		if (EndTimeStamp - StartTimeStamp > 0)
 		{
@@ -310,7 +402,7 @@ FString UMyBlueprintFunctionLibrary::SetScoreJson(FString RawDataJson, FString E
 	return OutPutString;
 }
 
-FString UMyBlueprintFunctionLibrary::SetOtherScoreJson(FString UserID, FString ExamId,FString ScoresStr, TArray<int32> Scores)
+FString UMyBlueprintFunctionLibrary::SetOtherScoreJson(FString UserID, FString ExamId,FString ScoresStr, TArray<int32> Scores, int64 StartTimeStamp, int64 EndTimeStamp)
 {
 	JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
 	JsonRootObject->SetStringField(TEXT("UserID"), UserID);
@@ -324,42 +416,158 @@ FString UMyBlueprintFunctionLibrary::SetOtherScoreJson(FString UserID, FString E
 		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
 			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
 			jsonMember->SetNumberField(TEXT("Score"), Scores[i]);	
+
+			double MaxScore = jsonMember->GetNumberField(TEXT("MaxScore"));
+			int32 Evaluation = Scores[i] / MaxScore * 100;
+
+			FString EvaluationStr = TEXT("不及格");
+			if (Evaluation < 60)
+			{
+				EvaluationStr = TEXT("不及格");
+			}
+			else if (Evaluation > 60 && Evaluation < 85)
+			{
+				EvaluationStr = TEXT("及格");
+			}
+			else
+			{
+				EvaluationStr = TEXT("优秀");
+			}
+
+			jsonMember->SetStringField(TEXT("Evaluation"), EvaluationStr);
+
+			auto RepeatCount = jsonMember->GetNumberField(TEXT("RepeatCount"));
+			RepeatCount++;
+			jsonMember->SetNumberField(TEXT("RepeatCount"), RepeatCount);
 		}
 		// set Score jsonstring
 		FString ScoresString;
 		TSharedRef<TJsonWriter<>> AWriter1 = TJsonWriterFactory<>::Create(&ScoresString);
 		FJsonSerializer::Serialize(JsonObjectValue, AWriter1);
 		JsonRootObject->SetStringField(TEXT("Score"), ScoresString);
+	
+		JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
+		FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
 
-		// set start time
-		double StartTimeStamp = 0;
+		// set end time
+		JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
+		FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
+		// set TimeUsed
+		if (EndTimeStamp - StartTimeStamp > 0)
+		{
+			JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
+		}
+		else
+		{
+			JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
+		}
+	}
+
+	// FStringにJsonを書き込むためのWriterを作成
+	FString OutPutString;
+	TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
+
+	//JsonをFStringに書き込み
+	FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
+	//UE_LOG(LogTemp, Log, TEXT("%s"), *OutPutString);
+	return OutPutString;
+}
+
+FDateTime UMyBlueprintFunctionLibrary::GetStartTime(FString RawDataJson, int32 ScoreIndex)
+{
+	double StartTime = -1;
+	TArray<int32> ScoreArr;
+
+	TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
+	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
+
+	if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
+	{
 		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
 
 			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
-			double STStamp = jsonMember->GetNumberField(TEXT("StartTime"));
-			if (STStamp != 0)
+
+			if (ScoreIndex == i)
 			{
-				StartTimeStamp = STStamp;
+				StartTime = jsonMember->GetNumberField(TEXT("StartTime"));
 				break;
 			}
 		}
-		
-		JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
-		FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
+	}
+
+	return UnixTimestampToDateTime(StartTime);
+}
+
+int32 UMyBlueprintFunctionLibrary::GetStartTimestampByIndex(FString RawDataJson, int32 ScoreIndex)
+{
+	double StartTime = -1;
+	TArray<int32> ScoreArr;
 
-		double EndTimeStamp = 0;
+	TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
+	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
+
+	if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
+	{
 		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
 
 			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
-			double ETStamp = jsonMember->GetNumberField(TEXT("EndTime"));
-			if (ETStamp != 0)
+
+			if (ScoreIndex == i)
 			{
-				EndTimeStamp = ETStamp; 
+				return jsonMember->GetNumberField(TEXT("StartTime"));
+				break;
 			}
 		}
-		// set end time
-		JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
+	}
+
+	return 0;
+}
+
+int32 UMyBlueprintFunctionLibrary::GetEndTimestampByIndex(FString RawDataJson, int32 ScoreIndex)
+{
+	double StartTime = -1;
+	TArray<int32> ScoreArr;
+
+	TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
+	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
+
+	if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
+	{
+		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
+
+			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
+
+			if (ScoreIndex == i)
+			{
+				return jsonMember->GetNumberField(TEXT("EndTime"));
+				break;
+			}
+		}
+	}
+
+	return 0;
+}
+
+FString UMyBlueprintFunctionLibrary::GetTotalUsedTimeStr(FString RawDataJson, FString UserID, FString ExamId)
+{
+	JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
+	JsonRootObject->SetStringField(TEXT("UserID"), UserID);
+	JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
+
+	TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
+	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
+
+	if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
+	{
+		TSharedPtr<FJsonObject> StartMember = (JsonObjectValue)[0]->AsObject();
+		TSharedPtr<FJsonObject> EndMember = (JsonObjectValue)[(JsonObjectValue).Num()-1]->AsObject();
+		// start time
+		double StartTimeStamp = StartMember->GetNumberField(TEXT("StartTime"));
+		FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
+		// end time
+		double EndTimeStamp = StartMember->GetNumberField(TEXT("EndTime"));
 		FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
+	
 		// set TimeUsed
 		if (EndTimeStamp - StartTimeStamp > 0)
 		{
@@ -381,29 +589,133 @@ FString UMyBlueprintFunctionLibrary::SetOtherScoreJson(FString UserID, FString E
 	return OutPutString;
 }
 
-FDateTime UMyBlueprintFunctionLibrary::GetStartTime(FString RawDataJson, int32 ScoreIndex)
+FString UMyBlueprintFunctionLibrary::SetEndTimeAndTotalUsedTimeAndTotalScore(FString RawDataJson, FString UserID, FString ExamId, FDateTime EndTime, int32 Index, int64 StartTimeStamp, int64 EndTimeStamp)
 {
-	double StartTime = -1;
-	TArray<int32> ScoreArr;
+	//UE_LOG(LogTemp, Log, TEXT("RawDataJson===%s"), *RawDataJson);
+
+	JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
+	JsonRootObject->SetStringField(TEXT("UserID"), UserID);
+	JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
 
 	TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
 	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
 
 	if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
 	{
+		int32 TotalScore = 0;
+
 		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
 
 			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
 
-			if (ScoreIndex == i)
+			TotalScore+=jsonMember->GetNumberField(TEXT("Score"));
+
+			if (Index == i)
 			{
-				StartTime = jsonMember->GetNumberField(TEXT("StartTime"));
+				jsonMember->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
+
+				double StartTimeNum = jsonMember->GetNumberField(TEXT("StartTime"));
+				FDateTime AStartTime = UnixTimestampToDateTime(StartTimeNum);
+				int32 TimeUsed = UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds());
+				jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed);
+
 				break;
 			}
 		}
+		
+		JsonRootObject->SetNumberField(TEXT("TimeUsed"), TotalScore);
+
+		FString newScoreString = "";
+		TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&newScoreString);
+		FJsonSerializer::Serialize(JsonObjectValue, Writer);
+		JsonRootObject->SetStringField(TEXT("Score"), newScoreString);
+
+		TSharedPtr<FJsonObject> StartMember = (JsonObjectValue)[0]->AsObject();
+		TSharedPtr<FJsonObject> EndMember = (JsonObjectValue)[(JsonObjectValue).Num() - 1]->AsObject();
+		
 	}
 
-	return UnixTimestampToDateTime(StartTime);
+	// set start time
+	JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
+	FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
+
+	// set end time
+	JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
+	FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
+	// set TimeUsed
+	if (EndTimeStamp - StartTimeStamp > 0)
+	{
+		//JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
+		JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round(EndTimeStamp - StartTimeStamp));
+	}
+	else
+	{
+		JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
+	}
+
+	// FStringにJsonを書き込むためのWriterを作成
+	FString OutPutString;
+	TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
+
+	//JsonをFStringに書き込み
+	FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
+	//UE_LOG(LogTemp, Log, TEXT("OutPutString===%s"), *OutPutString);
+	return OutPutString;
+}
+
+FString UMyBlueprintFunctionLibrary::SetTotalEndTimeAndTotalUsedTimeAndTotalScore(FString RawDataJson, FString UserID, FString ExamId, int64 StartTimeStamp, int64 EndTimeStamp)
+{
+	UE_LOG(LogTemp, Log, TEXT("RawDataJson===%s"), *RawDataJson);
+
+	JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
+	JsonRootObject->SetStringField(TEXT("UserID"), UserID);
+	JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
+
+	TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
+	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
+
+	if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
+	{
+		int32 TotalScore = 0;
+
+		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
+
+			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
+
+			TotalScore += jsonMember->GetNumberField(TEXT("Score"));
+		}
+
+		JsonRootObject->SetNumberField(TEXT("TimeUsed"), TotalScore);
+	}
+
+	// set start time
+	JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
+	FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
+
+	// set end time
+	//int64 EndTimeStamp = DateTimeToUnixTimestamp(EndTime);
+	JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
+	//FDateTime AEndTime = EndTime;
+
+	
+	// set TimeUsed
+	if (EndTimeStamp - StartTimeStamp > 0)
+	{
+		JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round(EndTimeStamp - StartTimeStamp));
+	}
+	else
+	{
+		JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
+	}
+
+	// FStringにJsonを書き込むためのWriterを作成
+	FString OutPutString;
+	TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
+
+	//JsonをFStringに書き込み
+	FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
+	UE_LOG(LogTemp, Log, TEXT("OutPutString===%s"), *OutPutString);
+	return OutPutString;
 }
 
 FDateTime UMyBlueprintFunctionLibrary::GetExpectTime(FString RawDataJson, int32 ScoreIndex)
@@ -474,7 +786,7 @@ bool UMyBlueprintFunctionLibrary::IsOverTime(FString RawDataJson, int32 ScoreInd
 	return EndDateTime > ExpectDataTime ?1:0;
 }
 
-FString UMyBlueprintFunctionLibrary::SetStartTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime StartTime, int32 ScoreIndex)
+FString UMyBlueprintFunctionLibrary::SetStartTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime StartTime, int32 ScoreIndex, int64 StartTimeStamp, int64 EndTimeStamp)
 {
 	//UE_LOG(LogTemp, Log, TEXT("ScoresStr======%s"), *ScoresStr);
 	//UE_LOG(LogTemp, Log, TEXT("StartTime======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
@@ -502,8 +814,8 @@ FString UMyBlueprintFunctionLibrary::SetStartTimeJson(FString ScoresStr, FString
 				if (ATime == 0)
 				{
 					jsonMember->SetNumberField(TEXT("StartTime"), DateTimeToUnixTimestamp(StartTime));
-
-					//UE_LOG(LogTemp, Log, TEXT("StartTimestamp======%d"), DateTimeToUnixTimestamp(StartTime));
+					/*UE_LOG(LogTemp, Log, TEXT("StartTime11======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+					UE_LOG(LogTemp, Log, TEXT("StartTimestamp11======%d"), DateTimeToUnixTimestamp(StartTime));*/
 				}
 
 				break;
@@ -516,32 +828,9 @@ FString UMyBlueprintFunctionLibrary::SetStartTimeJson(FString ScoresStr, FString
 		JsonRootObject->SetStringField(TEXT("Score"), AStr);
 
 		// set start time
-		double StartTimeStamp = 0;
-		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
-
-			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
-			double STStamp = jsonMember->GetNumberField(TEXT("StartTime"));
-			if (STStamp != 0)
-			{
-				StartTimeStamp = STStamp;
-				break;
-			}
-		}
-
 		JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
 		FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
 
-		double EndTimeStamp = 0;
-		UE_LOG(LogTemp, Log, TEXT("(JsonObjectValue).Num() - 1======%d"), (JsonObjectValue).Num() - 1);
-		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
-
-			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
-			double ETStamp = jsonMember->GetNumberField(TEXT("EndTime"));
-			if (ETStamp != 0)
-			{
-				EndTimeStamp = ETStamp;
-			}
-		}
 		// set end time
 		JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
 		FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
@@ -565,7 +854,7 @@ FString UMyBlueprintFunctionLibrary::SetStartTimeJson(FString ScoresStr, FString
 	return OutPutString;
 }
 
-FString UMyBlueprintFunctionLibrary::SetEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 ScoreIndex)
+FString UMyBlueprintFunctionLibrary::SetEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 ScoreIndex, int64 StartTimeStamp, int64 EndTimeStamp)
 {
 	//UE_LOG(LogTemp, Log, TEXT("xxxxxxxxxxxxxxxxx"));
 	JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
@@ -607,7 +896,7 @@ FString UMyBlueprintFunctionLibrary::SetEndTimeJson(FString ScoresStr, FString E
 		JsonRootObject->SetStringField(TEXT("Score"), AStr);
 
 		// set start time
-		double StartTimeStamp = 0;
+		/*double StartTimeStamp = 0;
 		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
 
 			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
@@ -617,12 +906,12 @@ FString UMyBlueprintFunctionLibrary::SetEndTimeJson(FString ScoresStr, FString E
 				StartTimeStamp = STStamp;
 				break;
 			}
-		}
+		}*/
 
 		JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
 		FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
 
-		double EndTimeStamp = 0;
+		/*double EndTimeStamp = 0;
 		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
 
 			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
@@ -631,12 +920,17 @@ FString UMyBlueprintFunctionLibrary::SetEndTimeJson(FString ScoresStr, FString E
 			{
 				EndTimeStamp = ETStamp;
 			}
-		}
+		}*/
 		// set end time
-		JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
-		FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
-		UE_LOG(LogTemp, Log, TEXT("AEndTime======%s"), *AEndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+		JsonRootObject->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
+		FDateTime AEndTime = UnixTimestampToDateTime(DateTimeToUnixTimestamp(EndTime));
+
+		/*UE_LOG(LogTemp, Log, TEXT("StartTimeStamp======%d"), StartTimeStamp);
 		UE_LOG(LogTemp, Log, TEXT("AStartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+
+		UE_LOG(LogTemp, Log, TEXT("EndTimeStamp======%d"), EndTimeStamp);
+		UE_LOG(LogTemp, Log, TEXT("AEndTime======%s"), *AEndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));*/
+		
 		// set TimeUsed
 		if (EndTimeStamp - StartTimeStamp > 0)
 		{
@@ -658,7 +952,7 @@ FString UMyBlueprintFunctionLibrary::SetEndTimeJson(FString ScoresStr, FString E
 }
 
 
-FString UMyBlueprintFunctionLibrary::SetScoreAndEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 Score, int32 ScoreIndex)
+FString UMyBlueprintFunctionLibrary::SetScoreAndStartTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime StartTime, int32 Score, int32 ScoreIndex, int64 StartTimeStamp, int64 EndTimeStamp)
 {
 	JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
 	JsonRootObject->SetStringField(TEXT("UserID"), UserID);
@@ -675,16 +969,39 @@ FString UMyBlueprintFunctionLibrary::SetScoreAndEndTimeJson(FString ScoresStr, F
 
 			if (ScoreIndex == i)
 			{
-				jsonMember->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
+				jsonMember->SetNumberField(TEXT("StartTime"), DateTimeToUnixTimestamp(StartTime));
 
-				double StartTimeNum = jsonMember->GetNumberField(TEXT("StartTime"));
-				FDateTime AStartTime = UnixTimestampToDateTime(StartTimeNum);
+				auto AEndTimeNum = jsonMember->GetNumberField(TEXT("EndTime"));
+				FDateTime AEndTime = UnixTimestampToDateTime(AEndTimeNum);
 
-				int32 TimeUsed = UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds());
+				int32 TimeUsed = UKismetMathLibrary::Round((AEndTime - StartTime).GetSeconds());
 				jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed);
 
-
 				jsonMember->SetNumberField(TEXT("Score"), Score);
+
+				double MaxScore = jsonMember->GetNumberField(TEXT("MaxScore"));
+				int32 Evaluation = Score / MaxScore * 100;
+
+				FString EvaluationStr = TEXT("不及格");
+				if (Evaluation < 60)
+				{
+					EvaluationStr = TEXT("不及格");
+				}
+				else if (Evaluation > 60 && Evaluation < 85)
+				{
+					EvaluationStr = TEXT("及格");
+				}
+				else
+				{
+					EvaluationStr = TEXT("优秀");
+				}
+
+				jsonMember->SetStringField(TEXT("Evaluation"), EvaluationStr);
+
+				auto RepeatCount = jsonMember->GetNumberField(TEXT("RepeatCount"));
+				RepeatCount++;
+				jsonMember->SetNumberField(TEXT("RepeatCount"), RepeatCount);
+
 				break;
 			}
 		}
@@ -695,34 +1012,119 @@ FString UMyBlueprintFunctionLibrary::SetScoreAndEndTimeJson(FString ScoresStr, F
 		JsonRootObject->SetStringField(TEXT("Score"), AStr);
 
 		// set start time
-		double StartTimeStamp = 0;
+
+		JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
+		FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
+
+		// set end time
+		JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
+		FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
+
+
+		// set TimeUsed
+		if (EndTimeStamp - StartTimeStamp > 0)
+		{
+			JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
+		}
+		else
+		{
+			JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
+		}
+	}
+	// FStringにJsonを書き込むためのWriterを作成
+	FString OutPutString;
+	TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
+
+	//JsonをFStringに書き込み
+	FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
+	//UE_LOG(LogTemp, Log, TEXT("SetStartTimeJson =====%s"), *OutPutString);
+	return OutPutString;
+
+}
+
+
+FString UMyBlueprintFunctionLibrary::SetScoreAndEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 Score, int32 ScoreIndex, int64 StartTimeStamp, int64 EndTimeStamp)
+{
+	JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
+	JsonRootObject->SetStringField(TEXT("UserID"), UserID);
+	JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
+
+	TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
+	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(ScoresStr);
+
+	if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
+	{
 		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
 
 			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
-			double STStamp = jsonMember->GetNumberField(TEXT("StartTime"));
-			if (STStamp != 0)
+
+			if (ScoreIndex == i)
 			{
-				StartTimeStamp = STStamp;
+				jsonMember->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
+
+				auto StartTimeNum = jsonMember->GetNumberField(TEXT("StartTime"));
+				FDateTime AStartTime = UnixTimestampToDateTime(StartTimeNum);
+
+				int32 TimeUsed = UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds());
+				jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed);
+
+				/*UE_LOG(LogTemp, Log, TEXT("StartTimeStamp======%d"), StartTimeNum);
+				UE_LOG(LogTemp, Log, TEXT("AStartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+
+				UE_LOG(LogTemp, Log, TEXT("EndTimeStamp======%d"), DateTimeToUnixTimestamp(EndTime));
+				UE_LOG(LogTemp, Log, TEXT("EndTime======%s"), *EndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+
+				UE_LOG(LogTemp, Log, TEXT("Timeused======%d"), UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds()));*/
+
+
+				jsonMember->SetNumberField(TEXT("Score"), Score);
+
+				double MaxScore = jsonMember->GetNumberField(TEXT("MaxScore"));
+				int32 Evaluation = Score / MaxScore * 100;
+
+				FString EvaluationStr = TEXT("不及格");
+				if (Evaluation < 60)
+				{
+					EvaluationStr = TEXT("不及格");
+				}
+				else if (Evaluation > 60 && Evaluation < 85)
+				{
+					EvaluationStr = TEXT("及格");
+				}
+				else
+				{
+					EvaluationStr = TEXT("优秀");
+				}
+
+				jsonMember->SetStringField(TEXT("Evaluation"), EvaluationStr);
+
+				auto RepeatCount = jsonMember->GetNumberField(TEXT("RepeatCount"));
+				RepeatCount++;
+				jsonMember->SetNumberField(TEXT("RepeatCount"), RepeatCount);
+
 				break;
 			}
 		}
+		FString AStr;
+		TSharedRef<TJsonWriter<>> Writer1 = TJsonWriterFactory<>::Create(&AStr);
+		//JsonをFStringに書き込み
+		FJsonSerializer::Serialize(JsonObjectValue, Writer1);
+		JsonRootObject->SetStringField(TEXT("Score"), AStr);
 
+		// set start time
+		
 		JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
 		FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
 
-		double EndTimeStamp = 0;
-		for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
-
-			TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
-			double ETStamp = jsonMember->GetNumberField(TEXT("EndTime"));
-			if (ETStamp != 0)
-			{
-				EndTimeStamp = ETStamp;
-			}
-		}
 		// set end time
-		JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
-		FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
+		JsonRootObject->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
+		FDateTime AEndTime = UnixTimestampToDateTime(DateTimeToUnixTimestamp(EndTime));
+
+		/*UE_LOG(LogTemp, Log, TEXT("StartTimeStamp======%d"), StartTimeStamp);
+		UE_LOG(LogTemp, Log, TEXT("AStartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
+
+		UE_LOG(LogTemp, Log, TEXT("EndTimeStamp======%d"), EndTimeStamp);
+		UE_LOG(LogTemp, Log, TEXT("AEndTime======%s"), *AEndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));*/
 		// set TimeUsed
 		if (EndTimeStamp - StartTimeStamp > 0)
 		{
@@ -744,6 +1146,29 @@ FString UMyBlueprintFunctionLibrary::SetScoreAndEndTimeJson(FString ScoresStr, F
 
 }
 
+bool UMyBlueprintFunctionLibrary::CanGoNextStep(FString RawDataJson, int32 MyIndex)
+{
+	JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
+
+	TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
+	TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
+
+	if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
+	{
+		TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[(MyIndex-1)]->AsObject();
+	
+		double AScore = jsonMember->GetNumberField(TEXT("Score"));
+		double AStartTimeStamp = jsonMember->GetNumberField(TEXT("StartTime"));
+		double AEndTimeStamp = jsonMember->GetNumberField(TEXT("EndTime"));
+
+		if (AScore != -1 && AStartTimeStamp != 0 && AEndTimeStamp != 0)
+		{
+			return true;
+		}
+	}
+	return false;
+}
+
 bool UMyBlueprintFunctionLibrary::IsSubmit(FString RawDataJson)
 {
 	bool bSubmit = true;
@@ -768,7 +1193,6 @@ bool UMyBlueprintFunctionLibrary::IsSubmit(FString RawDataJson)
 	return bSubmit;
 }
 
-
 FString UMyBlueprintFunctionLibrary::GetSubmitJsonString(FString UserID, FString ProjectName,FString RawDataJson)
 {
 	bool bSubmit = true;

+ 32 - 6
Source/Communication_Org/Public/MyBlueprintFunctionLibrary.h

@@ -19,6 +19,8 @@ class COMMUNICATION_ORG_API UMyBlueprintFunctionLibrary : public UBlueprintFunct
 	GENERATED_BODY()
 
 public:	
+	UFUNCTION(BlueprintPure, Category = "Text")
+		static FString MyText();
 	
 	UFUNCTION(BlueprintPure, Category = "UnixTimestamp")
 		static FDateTime UnixTimestampToDateTime(int64 UnixTime);
@@ -26,6 +28,12 @@ public:
 	UFUNCTION(BlueprintPure, Category = "UnixTimestamp")
 		static int64 DateTimeToUnixTimestamp(FDateTime DateTime);
 
+	UFUNCTION(BlueprintPure, Category = "Json")
+		static int32 GetCurrentIndex(FString RawDataJson);
+
+	UFUNCTION(BlueprintPure, Category = "Json")
+		static FString GetCallBackJsonStr(FString RawDataJson);
+
 	UFUNCTION(BlueprintPure, Category = "Json")
 		static FString GetTempScoresStr(FString RawDataJson);
 
@@ -54,31 +62,49 @@ public:
 		static int32 GetScore(FString RawDataJson, int32 ScoreIndex);
 
 	UFUNCTION(BlueprintPure, Category = "Json")
-		static FString SetScoreJson(FString RawDataJson, FString ExamId, FString UserID, int32 Score, int32 ScoreIndex);
+		static FString SetScoreJson(FString RawDataJson, FString ExamId, FString UserID, int32 Score, int32 ScoreIndex,int64 StartTimeStamp, int64 EndTimeStamp);
 
 	UFUNCTION(BlueprintPure, Category = "Json")
-		static FString SetOtherScoreJson(FString UserID, FString ExamId, FString ScoresStr, TArray<int32> Scores);
+		static FString SetOtherScoreJson(FString UserID, FString ExamId, FString ScoresStr, TArray<int32> Scores, int64 StartTimeStamp, int64 EndTimeStamp);
 
 	UFUNCTION(BlueprintPure, Category = "Json")
 		static FDateTime GetStartTime(FString RawDataJson, int32 ScoreIndex);
 
+	UFUNCTION(BlueprintPure, Category = "Json")
+		static int32 GetStartTimestampByIndex(FString RawDataJson, int32 ScoreIndex);
+
+	UFUNCTION(BlueprintPure, Category = "Json")
+		static int32 GetEndTimestampByIndex(FString RawDataJson, int32 ScoreIndex);
+
+	UFUNCTION(BlueprintPure, Category = "Json")
+		static FString GetTotalUsedTimeStr(FString RawDataJson,FString UserID, FString ExamId);
+
+	UFUNCTION(BlueprintPure, Category = "Json")
+		static FString SetEndTimeAndTotalUsedTimeAndTotalScore(FString RawDataJson, FString UserID, FString ExamId, FDateTime EndTime,int32 Index, int64 StartTimeStamp, int64 EndTimeStamp);
+
+	UFUNCTION(BlueprintPure, Category = "Json")
+		static FString SetTotalEndTimeAndTotalUsedTimeAndTotalScore(FString RawDataJson, FString UserID, FString ExamId,int64 StartTimeStamp, int64 EndTimeStamp);
+
 	UFUNCTION(BlueprintPure, Category = "Json")
 		static FDateTime GetExpectTime(FString RawDataJson, int32 ScoreIndex);
 
 	UFUNCTION(BlueprintPure, Category = "Json")
 		static bool IsOverTime(FString RawDataJson, int32 ScoreIndex);
 
-	
+	UFUNCTION(BlueprintPure, Category = "Json")
+		static FString SetStartTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime StartTime, int32 ScoreIndex,int64 StartTimeStamp, int64 EndTimeStamp);
 
 	UFUNCTION(BlueprintPure, Category = "Json")
-		static FString SetStartTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime StartTime, int32 ScoreIndex);
+		static FString SetEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 ScoreIndex, int64 StartTimeStamp, int64 EndTimeStamp);
 
 	UFUNCTION(BlueprintPure, Category = "Json")
-		static FString SetEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 ScoreIndex);
+		static FString SetScoreAndStartTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime StartTime, int32 Score, int32 ScoreIndex, int64 StartTimeStamp, int64 EndTimeStamp);
 
+	UFUNCTION(BlueprintPure, Category = "Json")
+		static FString SetScoreAndEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 Score, int32 ScoreIndex, int64 StartTimeStamp, int64 EndTimeStamp);
 
 	UFUNCTION(BlueprintPure, Category = "Json")
-		static FString SetScoreAndEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 Score, int32 ScoreIndex);
+		static bool CanGoNextStep(FString RawDataJson,int32 MyIndex);
 
 	UFUNCTION(BlueprintPure, Category = "Json")
 		static bool IsSubmit(FString RawDataJson);