MyBlueprintFunctionLibrary.cpp 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292
  1. // Fill out your copyright notice in the Description page of Project Settings.
  2. #include "MyBlueprintFunctionLibrary.h"
  3. #include "JsonUtilities/Public/JsonUtilities.h"
  4. #include "Runtime/Json/Public/Serialization/JsonReader.h"
  5. #include "Misc/DateTime.h"
  6. #include "Misc/Timespan.h"
  7. #include <Runtime/Engine/Classes/Kismet/KismetMathLibrary.h>
  8. FString UMyBlueprintFunctionLibrary::MyText()
  9. {
  10. int64 StartTimestamp = 1629431914;
  11. //int64 EndTimestamp = 1629393979;
  12. FDateTime StartTime = UnixTimestampToDateTime(StartTimestamp);
  13. //FTimespan Duration = FTimespan(8, 0, 0);
  14. StartTime = StartTime + (FDateTime::Now()-FDateTime::UtcNow());
  15. //FDateTime EndTime = UnixTimestampToDateTime(EndTimestamp);
  16. UE_LOG(LogTemp, Log, TEXT("StartTime======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  17. //UE_LOG(LogTemp, Log, TEXT("EndTime======%s"), *EndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  18. //FDateTime NowTime = FDateTime::UtcNow();
  19. //UE_LOG(LogTemp, Log, TEXT("Now======%s"), *NowTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  20. //获取时间戳
  21. //int64 NowTimestamp = NowTime.ToUnixTimestamp();
  22. //UE_LOG(LogTemp, Log, TEXT("%d"), NowTimestamp);
  23. //EndTime = StartTime+ FTimespan::FromSeconds(30);
  24. //UE_LOG(LogTemp, Log, TEXT("TimeUsed======%d"), (EndTime - StartTime).GetSeconds());
  25. /*UE_LOG(LogTemp, Log, TEXT("StartTime1======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  26. UE_LOG(LogTemp, Log, TEXT("StartTimestamp======%d"), DateTimeToUnixTimestamp(StartTime));
  27. StartTime = UnixTimestampToDateTime(DateTimeToUnixTimestamp(StartTime));
  28. UE_LOG(LogTemp, Log, TEXT("StartTime2======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  29. UE_LOG(LogTemp, Log, TEXT("EndTime======%s"), *EndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  30. UE_LOG(LogTemp, Log, TEXT("TimeUsed1======%d"), (EndTime - StartTime).GetSeconds());*/
  31. return TEXT("MyTest");
  32. }
  33. FDateTime UMyBlueprintFunctionLibrary::UnixTimestampToDateTime(int64 UnixTime)
  34. {
  35. FDateTime Time = FDateTime::FromUnixTimestamp(UnixTime);
  36. return Time;
  37. }
  38. int64 UMyBlueprintFunctionLibrary::DateTimeToUnixTimestamp(FDateTime DateTime)
  39. {
  40. int64 Timestamp = DateTime.ToUnixTimestamp();
  41. return Timestamp;
  42. }
  43. int32 UMyBlueprintFunctionLibrary::GetCurrentIndex(FString RawDataJson)
  44. {
  45. //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson);
  46. int32 CurrentIndex = 0;
  47. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  48. TSharedRef<TJsonReader<>> JsonReader2 = TJsonReaderFactory<>::Create(RawDataJson);
  49. if (FJsonSerializer::Deserialize(JsonReader2, JsonObjectValue))
  50. {
  51. CurrentIndex = (JsonObjectValue).Num();
  52. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  53. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  54. double EndTimeStamp = jsonMember->GetIntegerField(TEXT("EndTime"));
  55. //UE_LOG(LogTemp, Log, TEXT("EndTimeStamp======%d"), EndTimeStamp);
  56. if (EndTimeStamp == 0)
  57. {
  58. CurrentIndex = i;
  59. break;
  60. }
  61. }
  62. }
  63. return CurrentIndex;
  64. }
  65. FString UMyBlueprintFunctionLibrary::GetCallBackJsonStr(FString RawDataJson)
  66. {
  67. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  68. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  69. FString JsonIDStr;
  70. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  71. {
  72. double Code = JsonRootObject->GetNumberField(TEXT("Code"));
  73. if (Code != 100)
  74. {
  75. return "";
  76. }
  77. JsonObjectPtr JsonExamObject = JsonRootObject->GetObjectField(TEXT("Exam"));
  78. JsonIDStr = JsonExamObject->GetStringField(TEXT("ScoreStep"));
  79. return JsonIDStr;
  80. }
  81. return "";
  82. }
  83. FString UMyBlueprintFunctionLibrary::GetTempScoresStr(FString RawDataJson)
  84. {
  85. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  86. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  87. FString JsonIDStr;
  88. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  89. {
  90. const TArray< TSharedPtr<FJsonValue> > *JsonArrayValue;
  91. if (JsonRootObject->TryGetArrayField(TEXT("TempScores"), JsonArrayValue)) {
  92. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonIDStr);
  93. FJsonSerializer::Serialize(*JsonArrayValue, Writer);
  94. //UE_LOG(LogTemp, Log, TEXT("ScoresStr=%s"), *JsonIDStr);
  95. return JsonIDStr;
  96. }
  97. }
  98. return TEXT("");
  99. }
  100. FString UMyBlueprintFunctionLibrary::CreateExamJson(FString UserID, FString ExamId, FString DataJsonStr)
  101. {
  102. //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\":\"备注\"}]");
  103. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  104. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  105. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  106. JsonRootObject->SetStringField(TEXT("Score"), DataJsonStr);
  107. JsonRootObject->SetNumberField(TEXT("StartTime"), 0);
  108. JsonRootObject->SetNumberField(TEXT("EndTime"), 0);
  109. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  110. // FStringにJsonを書き込むためのWriterを作成
  111. FString OutPutString;
  112. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  113. //JsonをFStringに書き込み
  114. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  115. //UE_LOG(LogTemp, Log, TEXT("OutPutString======%s"), *OutPutString);
  116. return OutPutString;
  117. }
  118. FString UMyBlueprintFunctionLibrary::ParseExamIdFromCreateExam(FString RawDataJson)
  119. {
  120. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  121. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  122. //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson);
  123. FString JsonIDStr;
  124. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  125. {
  126. JsonObjectPtr JsonExamObject = JsonRootObject->GetObjectField(TEXT("Exam"));
  127. JsonIDStr = JsonExamObject->GetStringField(TEXT("ID"));
  128. return JsonIDStr;
  129. }
  130. return TEXT("");
  131. }
  132. FString UMyBlueprintFunctionLibrary::GetExamUsingId(FString RawDataJson)
  133. {
  134. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  135. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  136. //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson);
  137. FString JsonIDStr;
  138. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  139. {
  140. JsonObjectPtr JsonExamObject = JsonRootObject->GetObjectField(TEXT("User"));
  141. JsonIDStr = JsonExamObject->GetStringField(TEXT("ExamUsingId"));
  142. return JsonIDStr;
  143. }
  144. return TEXT("");
  145. }
  146. FString UMyBlueprintFunctionLibrary::GetScoresStr(FString RawDataJson)
  147. {
  148. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  149. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  150. FString ScoresStr;
  151. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  152. {
  153. JsonObjectPtr JsonExamObject = JsonRootObject->GetObjectField(TEXT("Exam"));
  154. ScoresStr = JsonExamObject->GetStringField(TEXT("ScoreStep"));
  155. return ScoresStr;
  156. }
  157. //UE_LOG(LogTemp, Log, TEXT("ScoresStr=%s"), *ScoresStr);
  158. return TEXT("");
  159. }
  160. TArray<int32> UMyBlueprintFunctionLibrary::GetScores(FString RawDataJson)
  161. {
  162. TArray<int32> ScoreArr;
  163. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  164. TSharedRef<TJsonReader<>> JsonReader2 = TJsonReaderFactory<>::Create(RawDataJson);
  165. if (FJsonSerializer::Deserialize(JsonReader2, JsonObjectValue))
  166. {
  167. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  168. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  169. ScoreArr.Add(jsonMember->GetIntegerField(TEXT("Score")));
  170. }
  171. }
  172. return ScoreArr;
  173. }
  174. int64 UMyBlueprintFunctionLibrary::GetStartTimestamp(FString RawDataJson)
  175. {
  176. int64 StartTimestamp = 0;
  177. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  178. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  179. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  180. {
  181. JsonObjectPtr ExamObj = JsonRootObject->GetObjectField(TEXT("Exam"));
  182. return ExamObj->GetNumberField(TEXT("StartTime"));
  183. }
  184. return 0;
  185. }
  186. FString UMyBlueprintFunctionLibrary::ParseAndGetScores(FString RawDataJson)
  187. {
  188. //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson);
  189. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  190. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  191. FString ScoreArrStr;
  192. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  193. {
  194. ScoreArrStr = JsonRootObject->GetStringField(TEXT("Score"));
  195. //UE_LOG(LogTemp, Log, TEXT("ScoreArrStr=%s"), *ScoreArrStr);
  196. }
  197. return ScoreArrStr;
  198. }
  199. int32 UMyBlueprintFunctionLibrary::GetScore(FString RawDataJson, int32 ScoreIndex)
  200. {
  201. double Score = -1;
  202. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  203. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  204. TArray<int32> ScoreArr;
  205. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  206. {
  207. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  208. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  209. if (ScoreIndex == i)
  210. {
  211. Score = jsonMember->GetIntegerField(TEXT("Score"));
  212. //UE_LOG(LogTemp, Log, TEXT("Score====%d"), Score);
  213. break;
  214. }
  215. }
  216. }
  217. return Score;
  218. }
  219. FString UMyBlueprintFunctionLibrary::SetScoreJson(FString RawDataJson, FString ExamId, FString UserID, int32 Score, int32 ScoreIndex,int64 StartTimeStamp,int64 EndTimeStamp)
  220. {
  221. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  222. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  223. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  224. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  225. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  226. TArray<int32> ScoreArr;
  227. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  228. {
  229. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  230. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  231. if (ScoreIndex == i)
  232. {
  233. jsonMember->SetNumberField(TEXT("Score"), Score);
  234. double MaxScore = jsonMember->GetNumberField(TEXT("MaxScore"));
  235. int32 Evaluation = Score / MaxScore * 100;
  236. FString EvaluationStr = TEXT("不及格");
  237. if (Evaluation < 60)
  238. {
  239. EvaluationStr = TEXT("不及格");
  240. }
  241. else if (Evaluation > 60 && Evaluation < 85)
  242. {
  243. EvaluationStr = TEXT("及格");
  244. }
  245. else
  246. {
  247. EvaluationStr = TEXT("优秀");
  248. }
  249. jsonMember->SetStringField(TEXT("Evaluation"), EvaluationStr);
  250. auto RepeatCount = jsonMember->GetNumberField(TEXT("RepeatCount"));
  251. RepeatCount++;
  252. jsonMember->SetNumberField(TEXT("RepeatCount"), RepeatCount);
  253. break;
  254. }
  255. }
  256. // set Score jsonstring
  257. FString ScoresString;
  258. TSharedRef<TJsonWriter<>> AWriter1 = TJsonWriterFactory<>::Create(&ScoresString);
  259. FJsonSerializer::Serialize(JsonObjectValue, AWriter1);
  260. JsonRootObject->SetStringField(TEXT("Score"), ScoresString);
  261. // set start time
  262. /*double StartTimeStamp = 0;
  263. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  264. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  265. double STStamp = jsonMember->GetNumberField(TEXT("StartTime"));
  266. if (STStamp != 0)
  267. {
  268. StartTimeStamp = STStamp;
  269. break;
  270. }
  271. }*/
  272. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  273. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  274. /*double EndTimeStamp = 0;
  275. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  276. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  277. double ETStamp = jsonMember->GetNumberField(TEXT("EndTime"));
  278. if (ETStamp != 0)
  279. {
  280. EndTimeStamp = ETStamp;
  281. }
  282. }*/
  283. // set end time
  284. //JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  285. JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  286. FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
  287. /* UE_LOG(LogTemp, Log, TEXT("StartTimeStamp======%d"), StartTimeStamp);
  288. UE_LOG(LogTemp, Log, TEXT("AStartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  289. UE_LOG(LogTemp, Log, TEXT("EndTimeStamp======%d"), EndTimeStamp);
  290. UE_LOG(LogTemp, Log, TEXT("AEndTime======%s"), *AEndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));*/
  291. // set TimeUsed
  292. if (EndTimeStamp - StartTimeStamp > 0)
  293. {
  294. JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp)); //UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  295. }
  296. else
  297. {
  298. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  299. }
  300. }
  301. // FStringにJsonを書き込むためのWriterを作成
  302. FString OutPutString;
  303. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  304. //JsonをFStringに書き込み
  305. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  306. //UE_LOG(LogTemp, Log, TEXT("OutPutString======%s"), *OutPutString);
  307. return OutPutString;
  308. }
  309. FString UMyBlueprintFunctionLibrary::SetOtherScoreJson(FString UserID, FString ExamId,FString ScoresStr, TArray<int32> Scores, int64 StartTimeStamp, int64 EndTimeStamp)
  310. {
  311. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  312. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  313. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  314. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  315. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(ScoresStr);
  316. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  317. {
  318. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  319. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  320. jsonMember->SetNumberField(TEXT("Score"), Scores[i]);
  321. double MaxScore = jsonMember->GetNumberField(TEXT("MaxScore"));
  322. int32 Evaluation = Scores[i] / MaxScore * 100;
  323. FString EvaluationStr = TEXT("不及格");
  324. if (Evaluation < 60)
  325. {
  326. EvaluationStr = TEXT("不及格");
  327. }
  328. else if (Evaluation > 60 && Evaluation < 85)
  329. {
  330. EvaluationStr = TEXT("及格");
  331. }
  332. else
  333. {
  334. EvaluationStr = TEXT("优秀");
  335. }
  336. jsonMember->SetStringField(TEXT("Evaluation"), EvaluationStr);
  337. auto RepeatCount = jsonMember->GetNumberField(TEXT("RepeatCount"));
  338. RepeatCount++;
  339. jsonMember->SetNumberField(TEXT("RepeatCount"), RepeatCount);
  340. }
  341. // set Score jsonstring
  342. FString ScoresString;
  343. TSharedRef<TJsonWriter<>> AWriter1 = TJsonWriterFactory<>::Create(&ScoresString);
  344. FJsonSerializer::Serialize(JsonObjectValue, AWriter1);
  345. JsonRootObject->SetStringField(TEXT("Score"), ScoresString);
  346. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  347. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  348. // set end time
  349. JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  350. FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
  351. // set TimeUsed
  352. if (EndTimeStamp - StartTimeStamp > 0)
  353. {
  354. JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp));//UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  355. }
  356. else
  357. {
  358. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  359. }
  360. }
  361. // FStringにJsonを書き込むためのWriterを作成
  362. FString OutPutString;
  363. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  364. //JsonをFStringに書き込み
  365. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  366. //UE_LOG(LogTemp, Log, TEXT("%s"), *OutPutString);
  367. return OutPutString;
  368. }
  369. FDateTime UMyBlueprintFunctionLibrary::GetStartTime(FString RawDataJson, int32 ScoreIndex)
  370. {
  371. double StartTime = -1;
  372. TArray<int32> ScoreArr;
  373. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  374. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  375. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  376. {
  377. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  378. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  379. if (ScoreIndex == i)
  380. {
  381. StartTime = jsonMember->GetNumberField(TEXT("StartTime"));
  382. break;
  383. }
  384. }
  385. }
  386. return UnixTimestampToDateTime(StartTime);
  387. }
  388. int32 UMyBlueprintFunctionLibrary::GetStartTimestampByIndex(FString RawDataJson, int32 ScoreIndex)
  389. {
  390. double StartTime = -1;
  391. TArray<int32> ScoreArr;
  392. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  393. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  394. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  395. {
  396. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  397. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  398. if (ScoreIndex == i)
  399. {
  400. return jsonMember->GetNumberField(TEXT("StartTime"));
  401. break;
  402. }
  403. }
  404. }
  405. return 0;
  406. }
  407. int32 UMyBlueprintFunctionLibrary::GetEndTimestampByIndex(FString RawDataJson, int32 ScoreIndex)
  408. {
  409. double StartTime = -1;
  410. TArray<int32> ScoreArr;
  411. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  412. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  413. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  414. {
  415. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  416. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  417. if (ScoreIndex == i)
  418. {
  419. return jsonMember->GetNumberField(TEXT("EndTime"));
  420. break;
  421. }
  422. }
  423. }
  424. return 0;
  425. }
  426. FString UMyBlueprintFunctionLibrary::GetTotalUsedTimeStr(FString RawDataJson, FString UserID, FString ExamId)
  427. {
  428. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  429. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  430. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  431. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  432. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  433. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  434. {
  435. TSharedPtr<FJsonObject> StartMember = (JsonObjectValue)[0]->AsObject();
  436. TSharedPtr<FJsonObject> EndMember = (JsonObjectValue)[(JsonObjectValue).Num()-1]->AsObject();
  437. // start time
  438. double StartTimeStamp = StartMember->GetNumberField(TEXT("StartTime"));
  439. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  440. // end time
  441. double EndTimeStamp = StartMember->GetNumberField(TEXT("EndTime"));
  442. FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
  443. // set TimeUsed
  444. if (EndTimeStamp - StartTimeStamp > 0)
  445. {
  446. JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp)); //UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  447. }
  448. else
  449. {
  450. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  451. }
  452. }
  453. // FStringにJsonを書き込むためのWriterを作成
  454. FString OutPutString;
  455. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  456. //JsonをFStringに書き込み
  457. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  458. //UE_LOG(LogTemp, Log, TEXT("%s"), *OutPutString);
  459. return OutPutString;
  460. }
  461. FString UMyBlueprintFunctionLibrary::SetEndTimeAndTotalUsedTimeAndTotalScore(FString RawDataJson, FString UserID, FString ExamId, FDateTime EndTime, int32 Index, int64 StartTimeStamp, int64 EndTimeStamp)
  462. {
  463. //UE_LOG(LogTemp, Log, TEXT("RawDataJson===%s"), *RawDataJson);
  464. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  465. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  466. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  467. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  468. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  469. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  470. {
  471. int32 TotalScore = 0;
  472. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  473. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  474. TotalScore+=jsonMember->GetNumberField(TEXT("Score"));
  475. if (Index == i)
  476. {
  477. jsonMember->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
  478. double StartTimeNum = jsonMember->GetNumberField(TEXT("StartTime"));
  479. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeNum);
  480. int32 TimeUsed = DateTimeToUnixTimestamp(EndTime) - StartTimeNum;//UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds());
  481. jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed);
  482. break;
  483. }
  484. }
  485. JsonRootObject->SetNumberField(TEXT("TimeUsed"), TotalScore);
  486. FString newScoreString = "";
  487. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&newScoreString);
  488. FJsonSerializer::Serialize(JsonObjectValue, Writer);
  489. JsonRootObject->SetStringField(TEXT("Score"), newScoreString);
  490. TSharedPtr<FJsonObject> StartMember = (JsonObjectValue)[0]->AsObject();
  491. TSharedPtr<FJsonObject> EndMember = (JsonObjectValue)[(JsonObjectValue).Num() - 1]->AsObject();
  492. }
  493. // set start time
  494. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  495. //FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  496. // set end time
  497. JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  498. //FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
  499. // set TimeUsed
  500. if (EndTimeStamp - StartTimeStamp > 0)
  501. {
  502. //JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  503. JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp)); //UKismetMathLibrary::Round(EndTimeStamp - StartTimeStamp));
  504. }
  505. else
  506. {
  507. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  508. }
  509. // FStringにJsonを書き込むためのWriterを作成
  510. FString OutPutString;
  511. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  512. //JsonをFStringに書き込み
  513. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  514. //UE_LOG(LogTemp, Log, TEXT("OutPutString===%s"), *OutPutString);
  515. return OutPutString;
  516. }
  517. FString UMyBlueprintFunctionLibrary::SetTotalEndTimeAndTotalUsedTimeAndTotalScore(FString RawDataJson, FString UserID, FString ExamId, int64 StartTimeStamp, int64 EndTimeStamp)
  518. {
  519. //UE_LOG(LogTemp, Log, TEXT("RawDataJson===%s"), *RawDataJson);
  520. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  521. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  522. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  523. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  524. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  525. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  526. {
  527. int32 TotalScore = 0;
  528. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  529. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  530. TotalScore += jsonMember->GetNumberField(TEXT("Score"));
  531. }
  532. JsonRootObject->SetNumberField(TEXT("TimeUsed"), TotalScore);
  533. FString newScoreString = "";
  534. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&newScoreString);
  535. FJsonSerializer::Serialize(JsonObjectValue, Writer);
  536. JsonRootObject->SetStringField(TEXT("Score"), newScoreString);
  537. TSharedPtr<FJsonObject> StartMember = (JsonObjectValue)[0]->AsObject();
  538. TSharedPtr<FJsonObject> EndMember = (JsonObjectValue)[(JsonObjectValue).Num() - 1]->AsObject();
  539. }
  540. // set start time
  541. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  542. //FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  543. // set end time
  544. //int64 EndTimeStamp = DateTimeToUnixTimestamp(EndTime);
  545. JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  546. //FDateTime AEndTime = EndTime;
  547. // set TimeUsed
  548. if (EndTimeStamp - StartTimeStamp > 0)
  549. {
  550. JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round(EndTimeStamp - StartTimeStamp));
  551. }
  552. else
  553. {
  554. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  555. }
  556. // FStringにJsonを書き込むためのWriterを作成
  557. FString OutPutString;
  558. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  559. //JsonをFStringに書き込み
  560. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  561. OutPutString = Trim(OutPutString);
  562. //UE_LOG(LogTemp, Log, TEXT("OutPutString===%s"), *OutPutString);
  563. return OutPutString;
  564. }
  565. FDateTime UMyBlueprintFunctionLibrary::GetExpectTime(FString RawDataJson, int32 ScoreIndex)
  566. {
  567. double ExpectTime = -1;
  568. double StartTime = -1;
  569. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  570. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  571. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  572. {
  573. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  574. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  575. if (ScoreIndex == i)
  576. {
  577. ExpectTime = jsonMember->GetIntegerField(TEXT("ExpectTime"));
  578. StartTime = jsonMember->GetNumberField(TEXT("StartTime"));
  579. break;
  580. }
  581. }
  582. }
  583. FTimespan Duration = FTimespan(0, ExpectTime, 0);
  584. FDateTime StartTimeDate = UnixTimestampToDateTime(StartTime);
  585. FDateTime ExpectTimeData = StartTimeDate + Duration;
  586. return ExpectTimeData;
  587. }
  588. bool UMyBlueprintFunctionLibrary::IsOverTime(FString RawDataJson, int32 ScoreIndex)
  589. {
  590. double ExpectTime = -1;
  591. double StartTime = -1;
  592. double EndTime = -1;
  593. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  594. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  595. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  596. {
  597. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  598. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  599. if (ScoreIndex == i)
  600. {
  601. ExpectTime = jsonMember->GetIntegerField(TEXT("ExpectTime"));
  602. StartTime = jsonMember->GetNumberField(TEXT("StartTime"));
  603. EndTime = jsonMember->GetNumberField(TEXT("EndTime"));
  604. break;
  605. }
  606. }
  607. }
  608. FTimespan Duration = FTimespan(0, ExpectTime, 0);
  609. FDateTime StartDateTime = UnixTimestampToDateTime(StartTime);
  610. FDateTime EndDateTime = UnixTimestampToDateTime(EndTime);
  611. FDateTime ExpectDataTime = StartDateTime + Duration;
  612. //UE_LOG(LogTemp, Log, TEXT("StartDateTime=%s"), *StartDateTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S"));
  613. //UE_LOG(LogTemp, Log, TEXT("EndDateTime=%s"), *EndDateTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S"));
  614. //UE_LOG(LogTemp, Log, TEXT("ExpectDataTime=%s"), *((EndDateTime - StartDateTime).ToString()));
  615. return EndDateTime > ExpectDataTime ?1:0;
  616. }
  617. FString UMyBlueprintFunctionLibrary::SetStartTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime StartTime, int32 ScoreIndex, int64 StartTimeStamp, int64 EndTimeStamp)
  618. {
  619. //UE_LOG(LogTemp, Log, TEXT("ScoresStr======%s"), *ScoresStr);
  620. //UE_LOG(LogTemp, Log, TEXT("StartTime======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  621. //UE_LOG(LogTemp, Log, TEXT("StartTime2======%s"), *(UnixTimestampToDateTime(-2006054656).ToString(TEXT("%Y-%m-%d-%H-%M-%S"))));
  622. /*UE_LOG(LogTemp, Log, TEXT("StartTimestamp2222======%d"), DateTimeToUnixTimestamp(StartTime));*/
  623. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  624. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  625. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  626. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  627. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(ScoresStr);
  628. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  629. {
  630. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  631. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  632. if (ScoreIndex == i)
  633. {
  634. double ATime = jsonMember->GetNumberField(TEXT("StartTime"));
  635. if (ATime == 0)
  636. {
  637. jsonMember->SetNumberField(TEXT("StartTime"), DateTimeToUnixTimestamp(StartTime));
  638. /*UE_LOG(LogTemp, Log, TEXT("StartTime11======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  639. UE_LOG(LogTemp, Log, TEXT("StartTimestamp11======%d"), DateTimeToUnixTimestamp(StartTime));*/
  640. }
  641. break;
  642. }
  643. }
  644. FString AStr;
  645. TSharedRef<TJsonWriter<>> Writer1 = TJsonWriterFactory<>::Create(&AStr);
  646. //JsonをFStringに書き込み
  647. FJsonSerializer::Serialize(JsonObjectValue, Writer1);
  648. JsonRootObject->SetStringField(TEXT("Score"), AStr);
  649. // set start time
  650. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  651. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  652. // set end time
  653. JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  654. FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
  655. // set TimeUsed
  656. if (EndTimeStamp-StartTimeStamp>0)
  657. {
  658. JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp)); //UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  659. }
  660. else
  661. {
  662. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  663. }
  664. }
  665. // FStringにJsonを書き込むためのWriterを作成
  666. FString OutPutString;
  667. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  668. //JsonをFStringに書き込み
  669. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  670. //UE_LOG(LogTemp, Log, TEXT("SetStartTimeJson =====%s"), *OutPutString);
  671. return OutPutString;
  672. }
  673. FString UMyBlueprintFunctionLibrary::SetEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 ScoreIndex, int64 StartTimeStamp, int64 EndTimeStamp)
  674. {
  675. //UE_LOG(LogTemp, Log, TEXT("xxxxxxxxxxxxxxxxx"));
  676. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  677. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  678. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  679. //UE_LOG(LogTemp, Log, TEXT("aaaaaaaaaaaaaaaaa=%s"), *ScoresStr);
  680. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  681. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(ScoresStr);
  682. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  683. {
  684. //UE_LOG(LogTemp, Log, TEXT("bbbbbbbbbbbbb=%d"), (JsonObjectValue).Num());
  685. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  686. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  687. if (ScoreIndex == i)
  688. {
  689. jsonMember->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
  690. double StartTimeNum = jsonMember->GetNumberField(TEXT("StartTime"));
  691. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeNum);
  692. /* UE_LOG(LogTemp, Log, TEXT("StartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  693. UE_LOG(LogTemp, Log, TEXT("EndTime======%s"), *EndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  694. */
  695. int32 TimeUsed = DateTimeToUnixTimestamp(EndTime) - StartTimeNum;//UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds());
  696. //UE_LOG(LogTemp, Log, TEXT("TimeUsed =====%d"), TimeUsed);
  697. jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed);
  698. break;
  699. }
  700. }
  701. FString AStr;
  702. TSharedRef<TJsonWriter<>> Writer1 = TJsonWriterFactory<>::Create(&AStr);
  703. //JsonをFStringに書き込み
  704. FJsonSerializer::Serialize(JsonObjectValue, Writer1);
  705. JsonRootObject->SetStringField(TEXT("Score"), AStr);
  706. // set start time
  707. /*double StartTimeStamp = 0;
  708. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  709. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  710. double STStamp = jsonMember->GetNumberField(TEXT("StartTime"));
  711. if (STStamp != 0)
  712. {
  713. StartTimeStamp = STStamp;
  714. break;
  715. }
  716. }*/
  717. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  718. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  719. /*double EndTimeStamp = 0;
  720. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  721. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  722. double ETStamp = jsonMember->GetNumberField(TEXT("EndTime"));
  723. if (ETStamp != 0)
  724. {
  725. EndTimeStamp = ETStamp;
  726. }
  727. }*/
  728. // set end time
  729. JsonRootObject->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
  730. FDateTime AEndTime = UnixTimestampToDateTime(DateTimeToUnixTimestamp(EndTime));
  731. /*UE_LOG(LogTemp, Log, TEXT("StartTimeStamp======%d"), StartTimeStamp);
  732. UE_LOG(LogTemp, Log, TEXT("AStartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  733. UE_LOG(LogTemp, Log, TEXT("EndTimeStamp======%d"), EndTimeStamp);
  734. UE_LOG(LogTemp, Log, TEXT("AEndTime======%s"), *AEndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));*/
  735. // set TimeUsed
  736. if (EndTimeStamp - StartTimeStamp > 0)
  737. {
  738. JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp)); //UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  739. }
  740. else
  741. {
  742. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  743. }
  744. }
  745. // FStringにJsonを書き込むためのWriterを作成
  746. FString OutPutString;
  747. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  748. //JsonをFStringに書き込み
  749. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  750. //UE_LOG(LogTemp, Log, TEXT("SetStartTimeJson =====%s"), *OutPutString);
  751. return OutPutString;
  752. }
  753. FString UMyBlueprintFunctionLibrary::SetScoreAndStartTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime StartTime, int32 Score, int32 ScoreIndex, int64 StartTimeStamp, int64 EndTimeStamp)
  754. {
  755. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  756. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  757. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  758. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  759. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(ScoresStr);
  760. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  761. {
  762. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  763. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  764. if (ScoreIndex == i)
  765. {
  766. jsonMember->SetNumberField(TEXT("StartTime"), DateTimeToUnixTimestamp(StartTime));
  767. auto AEndTimeNum = jsonMember->GetNumberField(TEXT("EndTime"));
  768. FDateTime AEndTime = UnixTimestampToDateTime(AEndTimeNum);
  769. int32 TimeUsed = (AEndTimeNum - DateTimeToUnixTimestamp(StartTime)); //UKismetMathLibrary::Round((AEndTime - StartTime).GetSeconds());
  770. jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed);
  771. jsonMember->SetNumberField(TEXT("Score"), Score);
  772. double MaxScore = jsonMember->GetNumberField(TEXT("MaxScore"));
  773. int32 Evaluation = Score / MaxScore * 100;
  774. FString EvaluationStr = TEXT("不及格");
  775. if (Evaluation < 60)
  776. {
  777. EvaluationStr = TEXT("不及格");
  778. }
  779. else if (Evaluation > 60 && Evaluation < 85)
  780. {
  781. EvaluationStr = TEXT("及格");
  782. }
  783. else
  784. {
  785. EvaluationStr = TEXT("优秀");
  786. }
  787. jsonMember->SetStringField(TEXT("Evaluation"), EvaluationStr);
  788. auto RepeatCount = jsonMember->GetNumberField(TEXT("RepeatCount"));
  789. RepeatCount++;
  790. jsonMember->SetNumberField(TEXT("RepeatCount"), RepeatCount);
  791. break;
  792. }
  793. }
  794. FString AStr;
  795. TSharedRef<TJsonWriter<>> Writer1 = TJsonWriterFactory<>::Create(&AStr);
  796. //JsonをFStringに書き込み
  797. FJsonSerializer::Serialize(JsonObjectValue, Writer1);
  798. JsonRootObject->SetStringField(TEXT("Score"), AStr);
  799. // set start time
  800. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  801. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  802. // set end time
  803. JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  804. FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
  805. // set TimeUsed
  806. if (EndTimeStamp - StartTimeStamp > 0)
  807. {
  808. JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp));//UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  809. }
  810. else
  811. {
  812. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  813. }
  814. }
  815. // FStringにJsonを書き込むためのWriterを作成
  816. FString OutPutString;
  817. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  818. //JsonをFStringに書き込み
  819. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  820. //UE_LOG(LogTemp, Log, TEXT("SetStartTimeJson =====%s"), *OutPutString);
  821. return OutPutString;
  822. }
  823. FString UMyBlueprintFunctionLibrary::SetScoreAndEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 Score, int32 ScoreIndex, int64 StartTimeStamp, int64 EndTimeStamp)
  824. {
  825. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  826. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  827. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  828. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  829. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(ScoresStr);
  830. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  831. {
  832. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  833. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  834. if (ScoreIndex == i)
  835. {
  836. jsonMember->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
  837. auto StartTimeNum = jsonMember->GetNumberField(TEXT("StartTime"));
  838. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeNum);
  839. int32 TimeUsed = DateTimeToUnixTimestamp(EndTime) - StartTimeNum;//UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds());
  840. jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed);
  841. /*UE_LOG(LogTemp, Log, TEXT("StartTimeStamp======%d"), StartTimeNum);
  842. UE_LOG(LogTemp, Log, TEXT("AStartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  843. UE_LOG(LogTemp, Log, TEXT("EndTimeStamp======%d"), DateTimeToUnixTimestamp(EndTime));
  844. UE_LOG(LogTemp, Log, TEXT("EndTime======%s"), *EndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  845. UE_LOG(LogTemp, Log, TEXT("Timeused======%d"), UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds()));*/
  846. jsonMember->SetNumberField(TEXT("Score"), Score);
  847. double MaxScore = jsonMember->GetNumberField(TEXT("MaxScore"));
  848. int32 Evaluation = Score / MaxScore * 100;
  849. FString EvaluationStr = TEXT("不及格");
  850. if (Evaluation < 60)
  851. {
  852. EvaluationStr = TEXT("不及格");
  853. }
  854. else if (Evaluation > 60 && Evaluation < 85)
  855. {
  856. EvaluationStr = TEXT("及格");
  857. }
  858. else
  859. {
  860. EvaluationStr = TEXT("优秀");
  861. }
  862. jsonMember->SetStringField(TEXT("Evaluation"), EvaluationStr);
  863. auto RepeatCount = jsonMember->GetNumberField(TEXT("RepeatCount"));
  864. RepeatCount++;
  865. jsonMember->SetNumberField(TEXT("RepeatCount"), RepeatCount);
  866. break;
  867. }
  868. }
  869. FString AStr;
  870. TSharedRef<TJsonWriter<>> Writer1 = TJsonWriterFactory<>::Create(&AStr);
  871. //JsonをFStringに書き込み
  872. FJsonSerializer::Serialize(JsonObjectValue, Writer1);
  873. JsonRootObject->SetStringField(TEXT("Score"), AStr);
  874. // set start time
  875. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  876. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  877. // set end time
  878. JsonRootObject->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
  879. FDateTime AEndTime = UnixTimestampToDateTime(DateTimeToUnixTimestamp(EndTime));
  880. /*UE_LOG(LogTemp, Log, TEXT("StartTimeStamp======%d"), StartTimeStamp);
  881. UE_LOG(LogTemp, Log, TEXT("AStartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  882. UE_LOG(LogTemp, Log, TEXT("EndTimeStamp======%d"), EndTimeStamp);
  883. UE_LOG(LogTemp, Log, TEXT("AEndTime======%s"), *AEndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));*/
  884. // set TimeUsed
  885. if (EndTimeStamp - StartTimeStamp > 0)
  886. {
  887. JsonRootObject->SetNumberField(TEXT("TimeUsed"), (EndTimeStamp - StartTimeStamp));//UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  888. }
  889. else
  890. {
  891. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  892. }
  893. }
  894. // FStringにJsonを書き込むためのWriterを作成
  895. FString OutPutString;
  896. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  897. //JsonをFStringに書き込み
  898. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  899. //UE_LOG(LogTemp, Log, TEXT("SetStartTimeJson =====%s"), *OutPutString);
  900. return OutPutString;
  901. }
  902. bool UMyBlueprintFunctionLibrary::CanGoNextStep(FString RawDataJson, int32 MyIndex)
  903. {
  904. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  905. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  906. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  907. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  908. {
  909. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[(MyIndex-1)]->AsObject();
  910. double AScore = jsonMember->GetNumberField(TEXT("Score"));
  911. double AStartTimeStamp = jsonMember->GetNumberField(TEXT("StartTime"));
  912. double AEndTimeStamp = jsonMember->GetNumberField(TEXT("EndTime"));
  913. if (AScore != -1 && AStartTimeStamp != 0 && AEndTimeStamp != 0)
  914. {
  915. return true;
  916. }
  917. }
  918. return false;
  919. }
  920. bool UMyBlueprintFunctionLibrary::IsSubmit(FString RawDataJson)
  921. {
  922. bool bSubmit = true;
  923. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  924. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  925. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  926. {
  927. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  928. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  929. int32 Score = jsonMember->GetIntegerField(TEXT("Score"));
  930. if (Score == -1)
  931. {
  932. bSubmit = false;
  933. }
  934. }
  935. }
  936. return bSubmit;
  937. }
  938. FString UMyBlueprintFunctionLibrary::GetSubmitJsonString(FString UserID, FString ProjectName,FString RawDataJson)
  939. {
  940. bool bSubmit = true;
  941. FString SubmitStr;
  942. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  943. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  944. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  945. {
  946. TSharedPtr<FJsonObject> EntryObject = MakeShareable(new FJsonObject);
  947. EntryObject->SetStringField(TEXT("UserID"), UserID);
  948. EntryObject->SetArrayField(TEXT("Scores"), JsonObjectValue);
  949. EntryObject->SetBoolField(TEXT("UpToIlab"), true);
  950. EntryObject->SetStringField(TEXT("ProjectName"), ProjectName);
  951. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&SubmitStr);
  952. //JsonをFStringに書き込み
  953. FJsonSerializer::Serialize(EntryObject.ToSharedRef(), Writer);
  954. }
  955. return SubmitStr;
  956. }
  957. FString UMyBlueprintFunctionLibrary::GetRestartJsonString(FString UserID, FString RawDataJson)
  958. {
  959. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  960. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  961. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  962. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  963. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  964. {
  965. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  966. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  967. jsonMember->SetNumberField(TEXT("EndTime"), 0);
  968. jsonMember->SetNumberField(TEXT("StartTime"), 0);
  969. jsonMember->SetNumberField(TEXT("Score"), 0);
  970. }
  971. }
  972. // FStringにJsonを書き込むためのWriterを作成
  973. FString OutPutString;
  974. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  975. //JsonをFStringに書き込み
  976. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  977. //UE_LOG(LogTemp, Log, TEXT("%s"), *OutPutString);
  978. return OutPutString;
  979. }
  980. FString UMyBlueprintFunctionLibrary::Trim(FString RawDataJson)
  981. {
  982. FString NewStr = RawDataJson;
  983. NewStr = NewStr.Replace(TEXT("\r"), TEXT(""));
  984. NewStr = NewStr.Replace(TEXT("\n"), TEXT(""));
  985. NewStr = NewStr.Replace(TEXT("\t"), TEXT(""));
  986. NewStr = NewStr.Replace(TEXT("\\r"), TEXT(""));
  987. NewStr = NewStr.Replace(TEXT("\\n"), TEXT(""));
  988. NewStr = NewStr.Replace(TEXT("\\t"), TEXT(""));
  989. //NewStr = NewStr.Replace(TEXT("\\"), TEXT(""));
  990. //UE_LOG(LogTemp, Log, TEXT("NewStr = %s"), *NewStr);
  991. return NewStr;
  992. }
  993. bool UMyBlueprintFunctionLibrary::CheckSubmitCallBackOk(FString RawDataJson)
  994. {
  995. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  996. FString CodeStr = JsonRootObject->GetStringField(TEXT("Code"));
  997. if (CodeStr.Equals(TEXT("100")) == 0)
  998. {
  999. return true;
  1000. }
  1001. return false;
  1002. }
  1003. FString UMyBlueprintFunctionLibrary::ParseSubmitCallBackStr(FString RawDataJson)
  1004. {
  1005. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  1006. FString CodeStr = JsonRootObject->GetStringField(TEXT("Code"));
  1007. FString MsgStr = JsonRootObject->GetStringField(TEXT("Msg"));
  1008. FString resultStr = CodeStr + TEXT("\n") + MsgStr;
  1009. return resultStr;
  1010. }