// Fill out your copyright notice in the Description page of Project Settings. #include "MyBlueprintFunctionLibrary.h" #include "JsonUtilities/Public/JsonUtilities.h" #include "Runtime/Json/Public/Serialization/JsonReader.h" #include "Misc/DateTime.h" #include "Misc/Timespan.h" #include 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); return Time; } int64 UMyBlueprintFunctionLibrary::DateTimeToUnixTimestamp(FDateTime DateTime) { int64 Timestamp = DateTime.ToUnixTimestamp(); return Timestamp; } int32 UMyBlueprintFunctionLibrary::GetCurrentIndex(FString RawDataJson) { //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson); int32 CurrentIndex = 0; TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader2 = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader2, JsonObjectValue)) { CurrentIndex = (JsonObjectValue).Num(); for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); double EndTimeStamp = jsonMember->GetIntegerField(TEXT("EndTime")); //UE_LOG(LogTemp, Log, TEXT("EndTimeStamp======%d"), EndTimeStamp); if (EndTimeStamp == 0) { CurrentIndex = i; break; } } } return CurrentIndex; } FString UMyBlueprintFunctionLibrary::GetCallBackJsonStr(FString RawDataJson) { JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); TSharedRef> 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()); TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); FString JsonIDStr; if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject)) { const TArray< TSharedPtr > *JsonArrayValue; if (JsonRootObject->TryGetArrayField(TEXT("TempScores"), JsonArrayValue)) { TSharedRef> Writer = TJsonWriterFactory<>::Create(&JsonIDStr); FJsonSerializer::Serialize(*JsonArrayValue, Writer); //UE_LOG(LogTemp, Log, TEXT("ScoresStr=%s"), *JsonIDStr); return JsonIDStr; } } return TEXT(""); } FString UMyBlueprintFunctionLibrary::CreateExamJson(FString UserID, FString ExamId, FString DataJsonStr) { //FString DataJson = TEXT("[{\"Seq\":1,\"Title\":\"原理认知\",\"StartTime\":0,\"EndTime\":0,\"TimeUsed\":0,\"ExpectTime\":40,\"MaxScore\":11,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":2,\"Title\":\"实景考察\",\"StartTime\":0,\"EndTime\":0,\"TimeUsed\":0,\"ExpectTime\":10,\"MaxScore\":6,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":3,\"Title\":\"设备认知\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":5,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":4,\"Title\":\"设备搭建\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":5,\"MaxScore\":2,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":5,\"Title\":\"设备连接\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":5,\"MaxScore\":2,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":6,\"Title\":\"线上建组\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":2,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":7,\"Title\":\"研读分析剧本\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":8,\"Title\":\"线上互动研讨会\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":9,\"Title\":\"自主空间设计\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":10,\"Title\":\"自主设计气氛图\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":11,\"Title\":\"虚拟资产创作\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":13,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":12,\"Title\":\"虚景空间设计\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":13,\"Title\":\"实景空间设计\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":14,\"Title\":\"虚景实景拟合\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":15,\"Title\":\"光线调节\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":16,\"Title\":\"选择摄影画面\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":17,\"Title\":\"撰写报告\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":30,\"MaxScore\":1,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":18,\"Title\":\"气氛图互评\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":11,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":19,\"Title\":\"空间设计互评\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":11,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":20,\"Title\":\"会议纪要互评\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":11,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"},{\"Seq\":21,\"Title\":\"实验报告互评\",\"StartTime\":0,\"EndTime\":0,\"ExpectTime\":10,\"MaxScore\":21,\"Score\":-1,\"RepeatCount\":0,\"Evaluation\":\"\",\"ScoringModel\":\"赋分模型\",\"Remarks\":\"备注\"}]"); JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); JsonRootObject->SetStringField(TEXT("UserID"), UserID); JsonRootObject->SetStringField(TEXT("ExamId"), ExamId); JsonRootObject->SetStringField(TEXT("Score"), DataJsonStr); JsonRootObject->SetNumberField(TEXT("StartTime"), 0); JsonRootObject->SetNumberField(TEXT("EndTime"), 0); JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0); // FStringにJsonを書き込むためのWriterを作成 FString OutPutString; TSharedRef> Writer = TJsonWriterFactory<>::Create(&OutPutString); //JsonをFStringに書き込み FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer); //UE_LOG(LogTemp, Log, TEXT("OutPutString======%s"), *OutPutString); return OutPutString; } FString UMyBlueprintFunctionLibrary::ParseExamIdFromCreateExam(FString RawDataJson) { JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson); FString JsonIDStr; if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject)) { JsonObjectPtr JsonExamObject = JsonRootObject->GetObjectField(TEXT("Exam")); JsonIDStr = JsonExamObject->GetStringField(TEXT("ID")); return JsonIDStr; } return TEXT(""); } FString UMyBlueprintFunctionLibrary::GetExamUsingId(FString RawDataJson) { JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson); FString JsonIDStr; if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject)) { JsonObjectPtr JsonExamObject = JsonRootObject->GetObjectField(TEXT("User")); JsonIDStr = JsonExamObject->GetStringField(TEXT("ExamUsingId")); return JsonIDStr; } return TEXT(""); } FString UMyBlueprintFunctionLibrary::GetScoresStr(FString RawDataJson) { JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); FString ScoresStr; if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject)) { JsonObjectPtr JsonExamObject = JsonRootObject->GetObjectField(TEXT("Exam")); ScoresStr = JsonExamObject->GetStringField(TEXT("ScoreStep")); return ScoresStr; } //UE_LOG(LogTemp, Log, TEXT("ScoresStr=%s"), *ScoresStr); return TEXT(""); } TArray UMyBlueprintFunctionLibrary::GetScores(FString RawDataJson) { TArray ScoreArr; TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader2 = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader2, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); ScoreArr.Add(jsonMember->GetIntegerField(TEXT("Score"))); } } return ScoreArr; } int64 UMyBlueprintFunctionLibrary::GetStartTimestamp(FString RawDataJson) { int64 StartTimestamp = 0; JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject)) { JsonObjectPtr ExamObj = JsonRootObject->GetObjectField(TEXT("Exam")); return ExamObj->GetNumberField(TEXT("StartTime")); } return 0; } FString UMyBlueprintFunctionLibrary::ParseAndGetScores(FString RawDataJson) { //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson); JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); FString ScoreArrStr; if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject)) { ScoreArrStr = JsonRootObject->GetStringField(TEXT("Score")); //UE_LOG(LogTemp, Log, TEXT("ScoreArrStr=%s"), *ScoreArrStr); } return ScoreArrStr; } int32 UMyBlueprintFunctionLibrary::GetScore(FString RawDataJson, int32 ScoreIndex) { double Score = -1; TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); TArray ScoreArr; if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); if (ScoreIndex == i) { Score = jsonMember->GetIntegerField(TEXT("Score")); //UE_LOG(LogTemp, Log, TEXT("Score====%d"), Score); break; } } } return Score; } FString UMyBlueprintFunctionLibrary::SetScoreJson(FString RawDataJson, FString ExamId, FString UserID, 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 > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); TArray ScoreArr; if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); if (ScoreIndex == i) { 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; } } // set Score jsonstring FString ScoresString; TSharedRef> AWriter1 = TJsonWriterFactory<>::Create(&ScoresString); FJsonSerializer::Serialize(JsonObjectValue, AWriter1); JsonRootObject->SetStringField(TEXT("Score"), ScoresString); // set start time /*double StartTimeStamp = 0; for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr 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; for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); double ETStamp = jsonMember->GetNumberField(TEXT("EndTime")); if (ETStamp != 0) { 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) { JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp)); //UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds())); } else { JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0); } } // FStringにJsonを書き込むためのWriterを作成 FString OutPutString; TSharedRef> Writer = TJsonWriterFactory<>::Create(&OutPutString); //JsonをFStringに書き込み FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer); //UE_LOG(LogTemp, Log, TEXT("OutPutString======%s"), *OutPutString); return OutPutString; } FString UMyBlueprintFunctionLibrary::SetOtherScoreJson(FString UserID, FString ExamId,FString ScoresStr, TArray Scores, int64 StartTimeStamp, int64 EndTimeStamp) { JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); JsonRootObject->SetStringField(TEXT("UserID"), UserID); JsonRootObject->SetStringField(TEXT("ExamId"), ExamId); TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(ScoresStr); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr 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> AWriter1 = TJsonWriterFactory<>::Create(&ScoresString); FJsonSerializer::Serialize(JsonObjectValue, AWriter1); JsonRootObject->SetStringField(TEXT("Score"), ScoresString); 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"), (EndTimeStamp - StartTimeStamp));//UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds())); } else { JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0); } } // FStringにJsonを書き込むためのWriterを作成 FString OutPutString; TSharedRef> 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 ScoreArr; TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); if (ScoreIndex == i) { StartTime = jsonMember->GetNumberField(TEXT("StartTime")); break; } } } return UnixTimestampToDateTime(StartTime); } int32 UMyBlueprintFunctionLibrary::GetStartTimestampByIndex(FString RawDataJson, int32 ScoreIndex) { double StartTime = -1; TArray ScoreArr; TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); if (ScoreIndex == i) { return jsonMember->GetNumberField(TEXT("StartTime")); break; } } } return 0; } int32 UMyBlueprintFunctionLibrary::GetEndTimestampByIndex(FString RawDataJson, int32 ScoreIndex) { double StartTime = -1; TArray ScoreArr; TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr 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 > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { TSharedPtr StartMember = (JsonObjectValue)[0]->AsObject(); TSharedPtr 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) { JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp)); //UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds())); } else { JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0); } } // FStringにJsonを書き込むためのWriterを作成 FString OutPutString; TSharedRef> Writer = TJsonWriterFactory<>::Create(&OutPutString); //JsonをFStringに書き込み FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer); //UE_LOG(LogTemp, Log, TEXT("%s"), *OutPutString); return OutPutString; } FString UMyBlueprintFunctionLibrary::SetEndTimeAndTotalUsedTimeAndTotalScore(FString RawDataJson, FString UserID, FString ExamId, FDateTime EndTime, int32 Index, 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 > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { int32 TotalScore = 0; for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); TotalScore+=jsonMember->GetNumberField(TEXT("Score")); if (Index == i) { jsonMember->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime)); double StartTimeNum = jsonMember->GetNumberField(TEXT("StartTime")); FDateTime AStartTime = UnixTimestampToDateTime(StartTimeNum); int32 TimeUsed = DateTimeToUnixTimestamp(EndTime) - StartTimeNum;//UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds()); jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed); break; } } JsonRootObject->SetNumberField(TEXT("TimeUsed"), TotalScore); FString newScoreString = ""; TSharedRef> Writer = TJsonWriterFactory<>::Create(&newScoreString); FJsonSerializer::Serialize(JsonObjectValue, Writer); JsonRootObject->SetStringField(TEXT("Score"), newScoreString); TSharedPtr StartMember = (JsonObjectValue)[0]->AsObject(); TSharedPtr EndMember = (JsonObjectValue)[(JsonObjectValue).Num() - 1]->AsObject(); } // 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"), (EndTimeStamp - StartTimeStamp)); //UKismetMathLibrary::Round(EndTimeStamp - StartTimeStamp)); } else { JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0); } // FStringにJsonを書き込むためのWriterを作成 FString OutPutString; TSharedRef> 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 > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { int32 TotalScore = 0; for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); TotalScore += jsonMember->GetNumberField(TEXT("Score")); } JsonRootObject->SetNumberField(TEXT("TimeUsed"), TotalScore); FString newScoreString = ""; TSharedRef> Writer = TJsonWriterFactory<>::Create(&newScoreString); FJsonSerializer::Serialize(JsonObjectValue, Writer); JsonRootObject->SetStringField(TEXT("Score"), newScoreString); TSharedPtr StartMember = (JsonObjectValue)[0]->AsObject(); TSharedPtr EndMember = (JsonObjectValue)[(JsonObjectValue).Num() - 1]->AsObject(); } // 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> Writer = TJsonWriterFactory<>::Create(&OutPutString); //JsonをFStringに書き込み FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer); OutPutString = Trim(OutPutString); //UE_LOG(LogTemp, Log, TEXT("OutPutString===%s"), *OutPutString); return OutPutString; } FDateTime UMyBlueprintFunctionLibrary::GetExpectTime(FString RawDataJson, int32 ScoreIndex) { double ExpectTime = -1; double StartTime = -1; TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); if (ScoreIndex == i) { ExpectTime = jsonMember->GetIntegerField(TEXT("ExpectTime")); StartTime = jsonMember->GetNumberField(TEXT("StartTime")); break; } } } FTimespan Duration = FTimespan(0, ExpectTime, 0); FDateTime StartTimeDate = UnixTimestampToDateTime(StartTime); FDateTime ExpectTimeData = StartTimeDate + Duration; return ExpectTimeData; } bool UMyBlueprintFunctionLibrary::IsOverTime(FString RawDataJson, int32 ScoreIndex) { double ExpectTime = -1; double StartTime = -1; double EndTime = -1; TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); if (ScoreIndex == i) { ExpectTime = jsonMember->GetIntegerField(TEXT("ExpectTime")); StartTime = jsonMember->GetNumberField(TEXT("StartTime")); EndTime = jsonMember->GetNumberField(TEXT("EndTime")); break; } } } FTimespan Duration = FTimespan(0, ExpectTime, 0); FDateTime StartDateTime = UnixTimestampToDateTime(StartTime); FDateTime EndDateTime = UnixTimestampToDateTime(EndTime); FDateTime ExpectDataTime = StartDateTime + Duration; //UE_LOG(LogTemp, Log, TEXT("StartDateTime=%s"), *StartDateTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")); //UE_LOG(LogTemp, Log, TEXT("EndDateTime=%s"), *EndDateTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")); //UE_LOG(LogTemp, Log, TEXT("ExpectDataTime=%s"), *((EndDateTime - StartDateTime).ToString())); return EndDateTime > ExpectDataTime ?1:0; } 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"))); //UE_LOG(LogTemp, Log, TEXT("StartTime2======%s"), *(UnixTimestampToDateTime(-2006054656).ToString(TEXT("%Y-%m-%d-%H-%M-%S")))); /*UE_LOG(LogTemp, Log, TEXT("StartTimestamp2222======%d"), DateTimeToUnixTimestamp(StartTime));*/ JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); JsonRootObject->SetStringField(TEXT("UserID"), UserID); JsonRootObject->SetStringField(TEXT("ExamId"), ExamId); TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(ScoresStr); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); if (ScoreIndex == i) { double ATime = jsonMember->GetNumberField(TEXT("StartTime")); if (ATime == 0) { jsonMember->SetNumberField(TEXT("StartTime"), 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; } } FString AStr; TSharedRef> 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); // set end time JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp); FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp); // set TimeUsed if (EndTimeStamp-StartTimeStamp>0) { JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp)); //UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds())); } else { JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0); } } // FStringにJsonを書き込むためのWriterを作成 FString OutPutString; TSharedRef> Writer = TJsonWriterFactory<>::Create(&OutPutString); //JsonをFStringに書き込み FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer); //UE_LOG(LogTemp, Log, TEXT("SetStartTimeJson =====%s"), *OutPutString); return OutPutString; } 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()); JsonRootObject->SetStringField(TEXT("UserID"), UserID); JsonRootObject->SetStringField(TEXT("ExamId"), ExamId); //UE_LOG(LogTemp, Log, TEXT("aaaaaaaaaaaaaaaaa=%s"), *ScoresStr); TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(ScoresStr); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { //UE_LOG(LogTemp, Log, TEXT("bbbbbbbbbbbbb=%d"), (JsonObjectValue).Num()); for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); if (ScoreIndex == i) { jsonMember->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime)); double StartTimeNum = jsonMember->GetNumberField(TEXT("StartTime")); FDateTime AStartTime = UnixTimestampToDateTime(StartTimeNum); /* UE_LOG(LogTemp, Log, TEXT("StartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S"))); UE_LOG(LogTemp, Log, TEXT("EndTime======%s"), *EndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S"))); */ int32 TimeUsed = DateTimeToUnixTimestamp(EndTime) - StartTimeNum;//UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds()); //UE_LOG(LogTemp, Log, TEXT("TimeUsed =====%d"), TimeUsed); jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed); break; } } FString AStr; TSharedRef> Writer1 = TJsonWriterFactory<>::Create(&AStr); //JsonをFStringに書き込み FJsonSerializer::Serialize(JsonObjectValue, Writer1); JsonRootObject->SetStringField(TEXT("Score"), AStr); // set start time /*double StartTimeStamp = 0; for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr 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; for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); double ETStamp = jsonMember->GetNumberField(TEXT("EndTime")); if (ETStamp != 0) { EndTimeStamp = ETStamp; } }*/ // set end time 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) { JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp)); //UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds())); } else { JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0); } } // FStringにJsonを書き込むためのWriterを作成 FString OutPutString; TSharedRef> Writer = TJsonWriterFactory<>::Create(&OutPutString); //JsonをFStringに書き込み FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer); //UE_LOG(LogTemp, Log, TEXT("SetStartTimeJson =====%s"), *OutPutString); return OutPutString; } 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); JsonRootObject->SetStringField(TEXT("ExamId"), ExamId); TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(ScoresStr); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); if (ScoreIndex == i) { jsonMember->SetNumberField(TEXT("StartTime"), DateTimeToUnixTimestamp(StartTime)); auto AEndTimeNum = jsonMember->GetNumberField(TEXT("EndTime")); FDateTime AEndTime = UnixTimestampToDateTime(AEndTimeNum); int32 TimeUsed = (AEndTimeNum - DateTimeToUnixTimestamp(StartTime)); //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; } } FString AStr; TSharedRef> 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); // set end time JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp); FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp); // set TimeUsed if (EndTimeStamp - StartTimeStamp > 0) { JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp));//UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds())); } else { JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0); } } // FStringにJsonを書き込むためのWriterを作成 FString OutPutString; TSharedRef> 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 > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(ScoresStr); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); if (ScoreIndex == i) { jsonMember->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime)); auto StartTimeNum = jsonMember->GetNumberField(TEXT("StartTime")); FDateTime AStartTime = UnixTimestampToDateTime(StartTimeNum); int32 TimeUsed = DateTimeToUnixTimestamp(EndTime) - StartTimeNum;//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> 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); // set end time 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) { JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp));//UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds())); } else { JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0); } } // FStringにJsonを書き込むためのWriterを作成 FString OutPutString; TSharedRef> Writer = TJsonWriterFactory<>::Create(&OutPutString); //JsonをFStringに書き込み FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer); //UE_LOG(LogTemp, Log, TEXT("SetStartTimeJson =====%s"), *OutPutString); return OutPutString; } bool UMyBlueprintFunctionLibrary::CanGoNextStep(FString RawDataJson, int32 MyIndex) { JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { TSharedPtr 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; TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); int32 Score = jsonMember->GetIntegerField(TEXT("Score")); if (Score == -1) { bSubmit = false; } } } return bSubmit; } FString UMyBlueprintFunctionLibrary::GetSubmitJsonString(FString UserID, FString ProjectName,FString RawDataJson) { bool bSubmit = true; FString SubmitStr; TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { TSharedPtr EntryObject = MakeShareable(new FJsonObject); EntryObject->SetStringField(TEXT("UserID"), UserID); EntryObject->SetArrayField(TEXT("Scores"), JsonObjectValue); EntryObject->SetBoolField(TEXT("UpToIlab"), true); EntryObject->SetStringField(TEXT("ProjectName"), ProjectName); TSharedRef> Writer = TJsonWriterFactory<>::Create(&SubmitStr); //JsonをFStringに書き込み FJsonSerializer::Serialize(EntryObject.ToSharedRef(), Writer); } return SubmitStr; } FString UMyBlueprintFunctionLibrary::GetRestartJsonString(FString UserID, FString RawDataJson) { JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); JsonRootObject->SetStringField(TEXT("UserID"), UserID); TArray< TSharedPtr > JsonObjectValue; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(RawDataJson); if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue)) { for (int32 i = 0; i < (JsonObjectValue).Num(); i++) { TSharedPtr jsonMember = (JsonObjectValue)[i]->AsObject(); jsonMember->SetNumberField(TEXT("EndTime"), 0); jsonMember->SetNumberField(TEXT("StartTime"), 0); jsonMember->SetNumberField(TEXT("Score"), 0); } } // FStringにJsonを書き込むためのWriterを作成 FString OutPutString; TSharedRef> Writer = TJsonWriterFactory<>::Create(&OutPutString); //JsonをFStringに書き込み FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer); //UE_LOG(LogTemp, Log, TEXT("%s"), *OutPutString); return OutPutString; } FString UMyBlueprintFunctionLibrary::Trim(FString RawDataJson) { FString NewStr = RawDataJson; NewStr = NewStr.Replace(TEXT("\r"), TEXT("")); NewStr = NewStr.Replace(TEXT("\n"), TEXT("")); NewStr = NewStr.Replace(TEXT("\t"), TEXT("")); NewStr = NewStr.Replace(TEXT("\\r"), TEXT("")); NewStr = NewStr.Replace(TEXT("\\n"), TEXT("")); NewStr = NewStr.Replace(TEXT("\\t"), TEXT("")); //NewStr = NewStr.Replace(TEXT("\\"), TEXT("")); //UE_LOG(LogTemp, Log, TEXT("NewStr = %s"), *NewStr); return NewStr; } bool UMyBlueprintFunctionLibrary::CheckSubmitCallBackOk(FString RawDataJson) { JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); FString CodeStr = JsonRootObject->GetStringField(TEXT("Code")); if (CodeStr.Equals(TEXT("100")) == 0) { return true; } return false; } FString UMyBlueprintFunctionLibrary::ParseSubmitCallBackStr(FString RawDataJson) { JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject()); FString CodeStr = JsonRootObject->GetStringField(TEXT("Code")); FString MsgStr = JsonRootObject->GetStringField(TEXT("Msg")); FString resultStr = CodeStr + TEXT("\n") + MsgStr; return resultStr; }