MyBlueprintFunctionLibrary.cpp 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831
  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. FDateTime UMyBlueprintFunctionLibrary::UnixTimestampToDateTime(int64 UnixTime)
  9. {
  10. FDateTime Time = FDateTime::FromUnixTimestamp(UnixTime);
  11. return Time;
  12. }
  13. int64 UMyBlueprintFunctionLibrary::DateTimeToUnixTimestamp(FDateTime DateTime)
  14. {
  15. int64 Timestamp = DateTime.ToUnixTimestamp();
  16. return Timestamp;
  17. }
  18. FString UMyBlueprintFunctionLibrary::GetTempScoresStr(FString RawDataJson)
  19. {
  20. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  21. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  22. FString JsonIDStr;
  23. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  24. {
  25. const TArray< TSharedPtr<FJsonValue> > *JsonArrayValue;
  26. if (JsonRootObject->TryGetArrayField(TEXT("TempScores"), JsonArrayValue)) {
  27. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonIDStr);
  28. FJsonSerializer::Serialize(*JsonArrayValue, Writer);
  29. //UE_LOG(LogTemp, Log, TEXT("ScoresStr=%s"), *JsonIDStr);
  30. return JsonIDStr;
  31. }
  32. }
  33. return TEXT("");
  34. }
  35. FString UMyBlueprintFunctionLibrary::CreateExamJson(FString UserID, FString ExamId, FString DataJsonStr)
  36. {
  37. //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\":\"备注\"}]");
  38. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  39. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  40. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  41. JsonRootObject->SetStringField(TEXT("Score"), DataJsonStr);
  42. JsonRootObject->SetNumberField(TEXT("StartTime"), 0);
  43. JsonRootObject->SetNumberField(TEXT("EndTime"), 0);
  44. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  45. // FStringにJsonを書き込むためのWriterを作成
  46. FString OutPutString;
  47. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  48. //JsonをFStringに書き込み
  49. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  50. //UE_LOG(LogTemp, Log, TEXT("OutPutString======%s"), *OutPutString);
  51. return OutPutString;
  52. }
  53. FString UMyBlueprintFunctionLibrary::ParseExamIdFromCreateExam(FString RawDataJson)
  54. {
  55. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  56. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  57. //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson);
  58. FString JsonIDStr;
  59. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  60. {
  61. JsonObjectPtr JsonExamObject = JsonRootObject->GetObjectField(TEXT("Exam"));
  62. JsonIDStr = JsonExamObject->GetStringField(TEXT("ID"));
  63. return JsonIDStr;
  64. }
  65. return TEXT("");
  66. }
  67. FString UMyBlueprintFunctionLibrary::GetExamUsingId(FString RawDataJson)
  68. {
  69. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  70. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  71. //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson);
  72. FString JsonIDStr;
  73. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  74. {
  75. JsonObjectPtr JsonExamObject = JsonRootObject->GetObjectField(TEXT("User"));
  76. JsonIDStr = JsonExamObject->GetStringField(TEXT("ExamUsingId"));
  77. return JsonIDStr;
  78. }
  79. return TEXT("");
  80. }
  81. FString UMyBlueprintFunctionLibrary::GetScoresStr(FString RawDataJson)
  82. {
  83. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  84. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  85. FString ScoresStr;
  86. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  87. {
  88. JsonObjectPtr JsonExamObject = JsonRootObject->GetObjectField(TEXT("Exam"));
  89. ScoresStr = JsonExamObject->GetStringField(TEXT("ScoreStep"));
  90. return ScoresStr;
  91. }
  92. //UE_LOG(LogTemp, Log, TEXT("ScoresStr=%s"), *ScoresStr);
  93. return TEXT("");
  94. }
  95. TArray<int32> UMyBlueprintFunctionLibrary::GetScores(FString RawDataJson)
  96. {
  97. TArray<int32> ScoreArr;
  98. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  99. TSharedRef<TJsonReader<>> JsonReader2 = TJsonReaderFactory<>::Create(RawDataJson);
  100. if (FJsonSerializer::Deserialize(JsonReader2, JsonObjectValue))
  101. {
  102. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  103. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  104. ScoreArr.Add(jsonMember->GetIntegerField(TEXT("Score")));
  105. }
  106. }
  107. return ScoreArr;
  108. }
  109. int64 UMyBlueprintFunctionLibrary::GetStartTimestamp(FString RawDataJson)
  110. {
  111. int64 StartTimestamp = 0;
  112. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  113. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  114. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  115. {
  116. return JsonRootObject->GetNumberField(TEXT("StartTime"));
  117. }
  118. return 0;
  119. }
  120. FString UMyBlueprintFunctionLibrary::ParseAndGetScores(FString RawDataJson)
  121. {
  122. //UE_LOG(LogTemp, Log, TEXT("RawDataJson=%s"), *RawDataJson);
  123. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  124. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  125. FString ScoreArrStr;
  126. if (FJsonSerializer::Deserialize(JsonReader, JsonRootObject))
  127. {
  128. ScoreArrStr = JsonRootObject->GetStringField(TEXT("Score"));
  129. //UE_LOG(LogTemp, Log, TEXT("ScoreArrStr=%s"), *ScoreArrStr);
  130. }
  131. return ScoreArrStr;
  132. }
  133. int32 UMyBlueprintFunctionLibrary::GetScore(FString RawDataJson, int32 ScoreIndex)
  134. {
  135. double Score = -1;
  136. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  137. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  138. TArray<int32> ScoreArr;
  139. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  140. {
  141. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  142. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  143. if (ScoreIndex == i)
  144. {
  145. Score = jsonMember->GetIntegerField(TEXT("Score"));
  146. //UE_LOG(LogTemp, Log, TEXT("Score====%d"), Score);
  147. break;
  148. }
  149. }
  150. }
  151. return Score;
  152. }
  153. FString UMyBlueprintFunctionLibrary::SetScoreJson(FString RawDataJson, FString ExamId, FString UserID, int32 Score, int32 ScoreIndex)
  154. {
  155. //ABP_GameState * BP_GameState = Cast<ABP_GameState>(AGameState);
  156. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  157. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  158. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  159. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  160. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  161. TArray<int32> ScoreArr;
  162. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  163. {
  164. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  165. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  166. if (ScoreIndex == i)
  167. {
  168. jsonMember->SetNumberField(TEXT("Score"), Score);
  169. double MaxScore = jsonMember->GetNumberField(TEXT("MaxScore"));
  170. int32 Evaluation = Score / MaxScore * 100;
  171. FString EvaluationStr = TEXT("不及格");
  172. if (Evaluation < 60)
  173. {
  174. EvaluationStr = TEXT("不及格");
  175. }
  176. else if (Evaluation > 60 && Evaluation < 85)
  177. {
  178. EvaluationStr = TEXT("及格");
  179. }
  180. else
  181. {
  182. EvaluationStr = TEXT("优秀");
  183. }
  184. jsonMember->SetStringField(TEXT("Evaluation"), EvaluationStr);
  185. auto RepeatCount = jsonMember->GetNumberField(TEXT("RepeatCount"));
  186. RepeatCount++;
  187. jsonMember->SetNumberField(TEXT("RepeatCount"), RepeatCount);
  188. break;
  189. }
  190. }
  191. // set Score jsonstring
  192. FString ScoresString;
  193. TSharedRef<TJsonWriter<>> AWriter1 = TJsonWriterFactory<>::Create(&ScoresString);
  194. FJsonSerializer::Serialize(JsonObjectValue, AWriter1);
  195. JsonRootObject->SetStringField(TEXT("Score"), ScoresString);
  196. // set start time
  197. double StartTimeStamp = 0;
  198. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  199. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  200. double STStamp = jsonMember->GetNumberField(TEXT("StartTime"));
  201. if (STStamp != 0)
  202. {
  203. StartTimeStamp = STStamp;
  204. break;
  205. }
  206. }
  207. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  208. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  209. double EndTimeStamp = 0;
  210. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  211. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  212. double ETStamp = jsonMember->GetNumberField(TEXT("EndTime"));
  213. if (ETStamp != 0)
  214. {
  215. EndTimeStamp = ETStamp;
  216. }
  217. }
  218. // set end time
  219. //JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  220. JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  221. FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
  222. // set TimeUsed
  223. if (EndTimeStamp - StartTimeStamp > 0)
  224. {
  225. JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  226. }
  227. else
  228. {
  229. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  230. }
  231. }
  232. // FStringにJsonを書き込むためのWriterを作成
  233. FString OutPutString;
  234. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  235. //JsonをFStringに書き込み
  236. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  237. //UE_LOG(LogTemp, Log, TEXT("OutPutString======%s"), *OutPutString);
  238. return OutPutString;
  239. }
  240. FString UMyBlueprintFunctionLibrary::SetOtherScoreJson(FString UserID, FString ExamId,FString ScoresStr, TArray<int32> Scores)
  241. {
  242. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  243. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  244. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  245. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  246. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(ScoresStr);
  247. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  248. {
  249. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  250. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  251. jsonMember->SetNumberField(TEXT("Score"), Scores[i]);
  252. }
  253. // set Score jsonstring
  254. FString ScoresString;
  255. TSharedRef<TJsonWriter<>> AWriter1 = TJsonWriterFactory<>::Create(&ScoresString);
  256. FJsonSerializer::Serialize(JsonObjectValue, AWriter1);
  257. JsonRootObject->SetStringField(TEXT("Score"), ScoresString);
  258. // set start time
  259. double StartTimeStamp = 0;
  260. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  261. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  262. double STStamp = jsonMember->GetNumberField(TEXT("StartTime"));
  263. if (STStamp != 0)
  264. {
  265. StartTimeStamp = STStamp;
  266. break;
  267. }
  268. }
  269. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  270. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  271. double EndTimeStamp = 0;
  272. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  273. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  274. double ETStamp = jsonMember->GetNumberField(TEXT("EndTime"));
  275. if (ETStamp != 0)
  276. {
  277. EndTimeStamp = ETStamp;
  278. }
  279. }
  280. // set end time
  281. JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  282. FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
  283. // set TimeUsed
  284. if (EndTimeStamp - StartTimeStamp > 0)
  285. {
  286. JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  287. }
  288. else
  289. {
  290. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  291. }
  292. }
  293. // FStringにJsonを書き込むためのWriterを作成
  294. FString OutPutString;
  295. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  296. //JsonをFStringに書き込み
  297. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  298. //UE_LOG(LogTemp, Log, TEXT("%s"), *OutPutString);
  299. return OutPutString;
  300. }
  301. FDateTime UMyBlueprintFunctionLibrary::GetStartTime(FString RawDataJson, int32 ScoreIndex)
  302. {
  303. double StartTime = -1;
  304. TArray<int32> ScoreArr;
  305. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  306. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  307. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  308. {
  309. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  310. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  311. if (ScoreIndex == i)
  312. {
  313. StartTime = jsonMember->GetNumberField(TEXT("StartTime"));
  314. break;
  315. }
  316. }
  317. }
  318. return UnixTimestampToDateTime(StartTime);
  319. }
  320. FDateTime UMyBlueprintFunctionLibrary::GetExpectTime(FString RawDataJson, int32 ScoreIndex)
  321. {
  322. double ExpectTime = -1;
  323. double StartTime = -1;
  324. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  325. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  326. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  327. {
  328. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  329. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  330. if (ScoreIndex == i)
  331. {
  332. ExpectTime = jsonMember->GetIntegerField(TEXT("ExpectTime"));
  333. StartTime = jsonMember->GetNumberField(TEXT("StartTime"));
  334. break;
  335. }
  336. }
  337. }
  338. FTimespan Duration = FTimespan(0, ExpectTime, 0);
  339. FDateTime StartTimeDate = UnixTimestampToDateTime(StartTime);
  340. FDateTime ExpectTimeData = StartTimeDate + Duration;
  341. return ExpectTimeData;
  342. }
  343. bool UMyBlueprintFunctionLibrary::IsOverTime(FString RawDataJson, int32 ScoreIndex)
  344. {
  345. double ExpectTime = -1;
  346. double StartTime = -1;
  347. double EndTime = -1;
  348. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  349. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  350. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  351. {
  352. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  353. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  354. if (ScoreIndex == i)
  355. {
  356. ExpectTime = jsonMember->GetIntegerField(TEXT("ExpectTime"));
  357. StartTime = jsonMember->GetNumberField(TEXT("StartTime"));
  358. EndTime = jsonMember->GetNumberField(TEXT("EndTime"));
  359. break;
  360. }
  361. }
  362. }
  363. FTimespan Duration = FTimespan(0, ExpectTime, 0);
  364. FDateTime StartDateTime = UnixTimestampToDateTime(StartTime);
  365. FDateTime EndDateTime = UnixTimestampToDateTime(EndTime);
  366. FDateTime ExpectDataTime = StartDateTime + Duration;
  367. //UE_LOG(LogTemp, Log, TEXT("StartDateTime=%s"), *StartDateTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S"));
  368. //UE_LOG(LogTemp, Log, TEXT("EndDateTime=%s"), *EndDateTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S"));
  369. //UE_LOG(LogTemp, Log, TEXT("ExpectDataTime=%s"), *((EndDateTime - StartDateTime).ToString()));
  370. return EndDateTime > ExpectDataTime ?1:0;
  371. }
  372. FString UMyBlueprintFunctionLibrary::SetStartTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime StartTime, int32 ScoreIndex)
  373. {
  374. //UE_LOG(LogTemp, Log, TEXT("ScoresStr======%s"), *ScoresStr);
  375. //UE_LOG(LogTemp, Log, TEXT("StartTime======%s"), *StartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  376. //UE_LOG(LogTemp, Log, TEXT("StartTime2======%s"), *(UnixTimestampToDateTime(-2006054656).ToString(TEXT("%Y-%m-%d-%H-%M-%S"))));
  377. /*UE_LOG(LogTemp, Log, TEXT("StartTimestamp2222======%d"), DateTimeToUnixTimestamp(StartTime));*/
  378. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  379. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  380. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  381. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  382. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(ScoresStr);
  383. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  384. {
  385. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  386. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  387. if (ScoreIndex == i)
  388. {
  389. double ATime = jsonMember->GetNumberField(TEXT("StartTime"));
  390. if (ATime == 0)
  391. {
  392. jsonMember->SetNumberField(TEXT("StartTime"), DateTimeToUnixTimestamp(StartTime));
  393. //UE_LOG(LogTemp, Log, TEXT("StartTimestamp======%d"), DateTimeToUnixTimestamp(StartTime));
  394. }
  395. break;
  396. }
  397. }
  398. FString AStr;
  399. TSharedRef<TJsonWriter<>> Writer1 = TJsonWriterFactory<>::Create(&AStr);
  400. //JsonをFStringに書き込み
  401. FJsonSerializer::Serialize(JsonObjectValue, Writer1);
  402. JsonRootObject->SetStringField(TEXT("Score"), AStr);
  403. // set start time
  404. double StartTimeStamp = 0;
  405. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  406. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  407. double STStamp = jsonMember->GetNumberField(TEXT("StartTime"));
  408. if (STStamp != 0)
  409. {
  410. StartTimeStamp = STStamp;
  411. break;
  412. }
  413. }
  414. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  415. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  416. double EndTimeStamp = 0;
  417. UE_LOG(LogTemp, Log, TEXT("(JsonObjectValue).Num() - 1======%d"), (JsonObjectValue).Num() - 1);
  418. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  419. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  420. double ETStamp = jsonMember->GetNumberField(TEXT("EndTime"));
  421. if (ETStamp != 0)
  422. {
  423. EndTimeStamp = ETStamp;
  424. }
  425. }
  426. // set end time
  427. JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  428. FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
  429. // set TimeUsed
  430. if (EndTimeStamp-StartTimeStamp>0)
  431. {
  432. JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  433. }
  434. else
  435. {
  436. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  437. }
  438. }
  439. // FStringにJsonを書き込むためのWriterを作成
  440. FString OutPutString;
  441. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  442. //JsonをFStringに書き込み
  443. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  444. //UE_LOG(LogTemp, Log, TEXT("SetStartTimeJson =====%s"), *OutPutString);
  445. return OutPutString;
  446. }
  447. FString UMyBlueprintFunctionLibrary::SetEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 ScoreIndex)
  448. {
  449. //UE_LOG(LogTemp, Log, TEXT("xxxxxxxxxxxxxxxxx"));
  450. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  451. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  452. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  453. //UE_LOG(LogTemp, Log, TEXT("aaaaaaaaaaaaaaaaa=%s"), *ScoresStr);
  454. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  455. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(ScoresStr);
  456. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  457. {
  458. //UE_LOG(LogTemp, Log, TEXT("bbbbbbbbbbbbb=%d"), (JsonObjectValue).Num());
  459. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  460. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  461. if (ScoreIndex == i)
  462. {
  463. jsonMember->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
  464. double StartTimeNum = jsonMember->GetNumberField(TEXT("StartTime"));
  465. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeNum);
  466. /* UE_LOG(LogTemp, Log, TEXT("StartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  467. UE_LOG(LogTemp, Log, TEXT("EndTime======%s"), *EndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  468. */
  469. int32 TimeUsed = UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds());
  470. //UE_LOG(LogTemp, Log, TEXT("TimeUsed =====%d"), TimeUsed);
  471. jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed);
  472. break;
  473. }
  474. }
  475. FString AStr;
  476. TSharedRef<TJsonWriter<>> Writer1 = TJsonWriterFactory<>::Create(&AStr);
  477. //JsonをFStringに書き込み
  478. FJsonSerializer::Serialize(JsonObjectValue, Writer1);
  479. JsonRootObject->SetStringField(TEXT("Score"), AStr);
  480. // set start time
  481. double StartTimeStamp = 0;
  482. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  483. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  484. double STStamp = jsonMember->GetNumberField(TEXT("StartTime"));
  485. if (STStamp != 0)
  486. {
  487. StartTimeStamp = STStamp;
  488. break;
  489. }
  490. }
  491. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  492. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  493. double EndTimeStamp = 0;
  494. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  495. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  496. double ETStamp = jsonMember->GetNumberField(TEXT("EndTime"));
  497. if (ETStamp != 0)
  498. {
  499. EndTimeStamp = ETStamp;
  500. }
  501. }
  502. // set end time
  503. JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  504. FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
  505. UE_LOG(LogTemp, Log, TEXT("AEndTime======%s"), *AEndTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  506. UE_LOG(LogTemp, Log, TEXT("AStartTime======%s"), *AStartTime.ToString(TEXT("%Y-%m-%d-%H-%M-%S")));
  507. // set TimeUsed
  508. if (EndTimeStamp - StartTimeStamp > 0)
  509. {
  510. JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  511. }
  512. else
  513. {
  514. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  515. }
  516. }
  517. // FStringにJsonを書き込むためのWriterを作成
  518. FString OutPutString;
  519. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  520. //JsonをFStringに書き込み
  521. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  522. //UE_LOG(LogTemp, Log, TEXT("SetStartTimeJson =====%s"), *OutPutString);
  523. return OutPutString;
  524. }
  525. FString UMyBlueprintFunctionLibrary::SetScoreAndEndTimeJson(FString ScoresStr, FString ExamId, FString UserID, FDateTime EndTime, int32 Score, int32 ScoreIndex)
  526. {
  527. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  528. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  529. JsonRootObject->SetStringField(TEXT("ExamId"), ExamId);
  530. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  531. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(ScoresStr);
  532. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  533. {
  534. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  535. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  536. if (ScoreIndex == i)
  537. {
  538. jsonMember->SetNumberField(TEXT("EndTime"), DateTimeToUnixTimestamp(EndTime));
  539. double StartTimeNum = jsonMember->GetNumberField(TEXT("StartTime"));
  540. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeNum);
  541. int32 TimeUsed = UKismetMathLibrary::Round((EndTime - AStartTime).GetSeconds());
  542. jsonMember->SetNumberField(TEXT("TimeUsed"), TimeUsed);
  543. jsonMember->SetNumberField(TEXT("Score"), Score);
  544. break;
  545. }
  546. }
  547. FString AStr;
  548. TSharedRef<TJsonWriter<>> Writer1 = TJsonWriterFactory<>::Create(&AStr);
  549. //JsonをFStringに書き込み
  550. FJsonSerializer::Serialize(JsonObjectValue, Writer1);
  551. JsonRootObject->SetStringField(TEXT("Score"), AStr);
  552. // set start time
  553. double StartTimeStamp = 0;
  554. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  555. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  556. double STStamp = jsonMember->GetNumberField(TEXT("StartTime"));
  557. if (STStamp != 0)
  558. {
  559. StartTimeStamp = STStamp;
  560. break;
  561. }
  562. }
  563. JsonRootObject->SetNumberField(TEXT("StartTime"), StartTimeStamp);
  564. FDateTime AStartTime = UnixTimestampToDateTime(StartTimeStamp);
  565. double EndTimeStamp = 0;
  566. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  567. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  568. double ETStamp = jsonMember->GetNumberField(TEXT("EndTime"));
  569. if (ETStamp != 0)
  570. {
  571. EndTimeStamp = ETStamp;
  572. }
  573. }
  574. // set end time
  575. JsonRootObject->SetNumberField(TEXT("EndTime"), EndTimeStamp);
  576. FDateTime AEndTime = UnixTimestampToDateTime(EndTimeStamp);
  577. // set TimeUsed
  578. if (EndTimeStamp - StartTimeStamp > 0)
  579. {
  580. JsonRootObject->SetNumberField(TEXT("TimeUsed"), UKismetMathLibrary::Round((AEndTime - AStartTime).GetSeconds()));
  581. }
  582. else
  583. {
  584. JsonRootObject->SetNumberField(TEXT("TimeUsed"), 0);
  585. }
  586. }
  587. // FStringにJsonを書き込むためのWriterを作成
  588. FString OutPutString;
  589. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  590. //JsonをFStringに書き込み
  591. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  592. //UE_LOG(LogTemp, Log, TEXT("SetStartTimeJson =====%s"), *OutPutString);
  593. return OutPutString;
  594. }
  595. bool UMyBlueprintFunctionLibrary::IsSubmit(FString RawDataJson)
  596. {
  597. bool bSubmit = true;
  598. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  599. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  600. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  601. {
  602. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  603. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  604. int32 Score = jsonMember->GetIntegerField(TEXT("Score"));
  605. if (Score == -1)
  606. {
  607. bSubmit = false;
  608. }
  609. }
  610. }
  611. return bSubmit;
  612. }
  613. FString UMyBlueprintFunctionLibrary::GetSubmitJsonString(FString UserID, FString ProjectName,FString RawDataJson)
  614. {
  615. bool bSubmit = true;
  616. FString SubmitStr;
  617. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  618. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  619. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  620. {
  621. TSharedPtr<FJsonObject> EntryObject = MakeShareable(new FJsonObject);
  622. EntryObject->SetStringField(TEXT("UserID"), UserID);
  623. EntryObject->SetArrayField(TEXT("Scores"), JsonObjectValue);
  624. EntryObject->SetBoolField(TEXT("UpToIlab"), true);
  625. EntryObject->SetStringField(TEXT("ProjectName"), ProjectName);
  626. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&SubmitStr);
  627. //JsonをFStringに書き込み
  628. FJsonSerializer::Serialize(EntryObject.ToSharedRef(), Writer);
  629. }
  630. return SubmitStr;
  631. }
  632. FString UMyBlueprintFunctionLibrary::GetRestartJsonString(FString UserID, FString RawDataJson)
  633. {
  634. JsonObjectPtr JsonRootObject = MakeShareable(new FJsonObject());
  635. JsonRootObject->SetStringField(TEXT("UserID"), UserID);
  636. TArray< TSharedPtr<FJsonValue> > JsonObjectValue;
  637. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(RawDataJson);
  638. if (FJsonSerializer::Deserialize(JsonReader, JsonObjectValue))
  639. {
  640. for (int32 i = 0; i < (JsonObjectValue).Num(); i++) {
  641. TSharedPtr<FJsonObject> jsonMember = (JsonObjectValue)[i]->AsObject();
  642. jsonMember->SetNumberField(TEXT("EndTime"), 0);
  643. jsonMember->SetNumberField(TEXT("StartTime"), 0);
  644. jsonMember->SetNumberField(TEXT("Score"), 0);
  645. }
  646. }
  647. // FStringにJsonを書き込むためのWriterを作成
  648. FString OutPutString;
  649. TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutPutString);
  650. //JsonをFStringに書き込み
  651. FJsonSerializer::Serialize(JsonRootObject.ToSharedRef(), Writer);
  652. //UE_LOG(LogTemp, Log, TEXT("%s"), *OutPutString);
  653. return OutPutString;
  654. }