| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292 |
- // 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>
- 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<FJsonValue> > JsonObjectValue;
- TSharedRef<TJsonReader<>> JsonReader2 = TJsonReaderFactory<>::Create(RawDataJson);
- if (FJsonSerializer::Deserialize(JsonReader2, JsonObjectValue))
- {
- CurrentIndex = (JsonObjectValue).Num();
- for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
- TSharedPtr<FJsonObject> 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<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());
- 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))
- {
- 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<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,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(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);
- /* 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<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, 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();
- 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 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<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);
- }
- int32 UMyBlueprintFunctionLibrary::GetStartTimestampByIndex(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("StartTime"));
- break;
- }
- }
- }
- 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)
- {
- JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp)); //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;
- }
- 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<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"));
- 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<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();
-
- }
- // 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<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);
- 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();
- }
- // 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);
- 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<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, 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<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("StartTime11======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
- UE_LOG(LogTemp, Log, TEXT("StartTimestamp11======%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
- 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<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, 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<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 = 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<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"), 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<TJsonWriter<>> 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<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("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<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);
- // 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<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();
- 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<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);
- // 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<TJsonWriter<>> 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<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;
- 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;
- }
- 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;
- }
-
|