MyBlueprintFunctionLibrary.cpp 45 KB

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