| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831 |
- // 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 <Runtime/Engine/Classes/Kismet/KismetMathLibrary.h>
- FDateTime UMyBlueprintFunctionLibrary::UnixTimestampToDateTime(int64 UnixTime)
- {
- FDateTime Time = FDateTime::FromUnixTimestamp(UnixTime);
- return Time;
- }
- int64 UMyBlueprintFunctionLibrary::DateTimeToUnixTimestamp(FDateTime DateTime)
- {
- int64 Timestamp = DateTime.ToUnixTimestamp();
- return Timestamp;
- }
- FString UMyBlueprintFunctionLibrary::GetTempScoresStr(FString RawDataJson)
- {
- JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
- TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
- FString JsonIDStr;
- if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
- {
- const TArray< TSharedPtr<FJsonValue> > *JsonArrayValue;
- if (JsonRootObject->TryGetArrayField(TEXT("TempScores"), JsonArrayValue)) {
-
- TSharedRef<TJsonWriter<>> 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<TJsonWriter<>> 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<TJsonReader<>> 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<TJsonReader<>> 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<TJsonReader<>> 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<int32> UMyBlueprintFunctionLibrary::GetScores(FString RawDataJson)
- {
- TArray<int32> ScoreArr;
- 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();
- ScoreArr.Add(jsonMember->GetIntegerField(TEXT("Score")));
- }
- }
- return ScoreArr;
- }
- int64 UMyBlueprintFunctionLibrary::GetStartTimestamp(FString RawDataJson)
- {
- int64 StartTimestamp = 0;
- JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
- TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
- if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
- {
- return JsonRootObject->GetNumberField(TEXT("StartTime"));
- }
- return 0;
- }
- FString UMyBlueprintFunctionLibrary::ParseAndGetScores(FString RawDataJson)
- {
- //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson);
- JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
- TSharedRef<TJsonReader<>> 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<FJsonValue> > JsonObjectValue;
- TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
- TArray<int32> ScoreArr;
- if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
- {
- for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
- TSharedPtr<FJsonObject> 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)
- {
- //ABP_GameState * BP_GameState = Cast<ABP_GameState>(AGameState);
- 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);
- TArray<int32> ScoreArr;
- if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
- {
- for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
- TSharedPtr<FJsonObject> 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<TJsonWriter<>> 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<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;
- 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);
- 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("OutPutString======%s"), *OutPutString);
- return OutPutString;
- }
- FString UMyBlueprintFunctionLibrary::SetOtherScoreJson(FString UserID, FString ExamId,FString ScoresStr, TArray<int32> Scores)
- {
- 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();
- jsonMember->SetNumberField(TEXT("Score"), Scores[i]);
- }
- // set Score jsonstring
- FString ScoresString;
- TSharedRef<TJsonWriter<>> 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<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;
- 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);
- // 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();
- if (ScoreIndex == i)
- {
- StartTime = jsonMember->GetNumberField(TEXT("StartTime"));
- break;
- }
- }
- }
- return UnixTimestampToDateTime(StartTime);
- }
- FDateTime UMyBlueprintFunctionLibrary::GetExpectTime(FString RawDataJson, int32 ScoreIndex)
- {
- double ExpectTime = -1;
- double StartTime = -1;
- 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)
- {
- 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<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)
- {
- 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)
- {
- //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<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();
- if (ScoreIndex == i)
- {
- double ATime = jsonMember->GetNumberField(TEXT("StartTime"));
- if (ATime == 0)
- {
- jsonMember->SetNumberField(TEXT("StartTime"), DateTimeToUnixTimestamp(StartTime));
- //UE_LOG(LogTemp, Log, TEXT("StartTimestamp======%d"), DateTimeToUnixTimestamp(StartTime));
- }
- break;
- }
- }
- FString AStr;
- TSharedRef<TJsonWriter<>> 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<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);
- // 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::SetEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 ScoreIndex)
- {
- //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<FJsonValue> > JsonObjectValue;
- TSharedRef<TJsonReader<>> 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<FJsonObject> 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 = UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds());
- //UE_LOG(LogTemp, Log, TEXT("TimeUsed =====%d"), TimeUsed);
- jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed);
- break;
- }
- }
- FString AStr;
- TSharedRef<TJsonWriter<>> 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<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;
- 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);
- UE_LOG(LogTemp, Log, TEXT("AEndTime======%s"), *AEndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
- UE_LOG(LogTemp, Log, TEXT("AStartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
- // 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)
- {
- 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();
- if (ScoreIndex == i)
- {
- 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);
- jsonMember->SetNumberField(TEXT("Score"), Score);
- break;
- }
- }
- FString AStr;
- TSharedRef<TJsonWriter<>> 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<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;
- 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);
- // 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;
- }
- bool UMyBlueprintFunctionLibrary::IsSubmit(FString RawDataJson)
- {
- bool bSubmit = true;
- 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();
- 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<FJsonValue> > JsonObjectValue;
- TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
- if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
- {
- TSharedPtr<FJsonObject> 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<TJsonWriter<>> 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<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();
- jsonMember->SetNumberField(TEXT("EndTime"), 0);
- jsonMember->SetNumberField(TEXT("StartTime"), 0);
- jsonMember->SetNumberField(TEXT("Score"), 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;
- }
-
|